11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * linux/fs/nfs/callback.h 31da177e4SLinus Torvalds * 41da177e4SLinus Torvalds * Copyright (C) 2004 Trond Myklebust 51da177e4SLinus Torvalds * 61da177e4SLinus Torvalds * NFSv4 callback definitions 71da177e4SLinus Torvalds */ 81da177e4SLinus Torvalds #ifndef __LINUX_FS_NFS_CALLBACK_H 91da177e4SLinus Torvalds #define __LINUX_FS_NFS_CALLBACK_H 101da177e4SLinus Torvalds 111da177e4SLinus Torvalds #define NFS4_CALLBACK 0x40000000 121da177e4SLinus Torvalds #define NFS4_CALLBACK_XDRSIZE 2048 131da177e4SLinus Torvalds #define NFS4_CALLBACK_BUFSIZE (1024 + NFS4_CALLBACK_XDRSIZE) 141da177e4SLinus Torvalds 151da177e4SLinus Torvalds enum nfs4_callback_procnum { 161da177e4SLinus Torvalds CB_NULL = 0, 171da177e4SLinus Torvalds CB_COMPOUND = 1, 181da177e4SLinus Torvalds }; 191da177e4SLinus Torvalds 201da177e4SLinus Torvalds enum nfs4_callback_opnum { 211da177e4SLinus Torvalds OP_CB_GETATTR = 3, 221da177e4SLinus Torvalds OP_CB_RECALL = 4, 23*45377b94SBenny Halevy /* Callback operations new to NFSv4.1 */ 24*45377b94SBenny Halevy OP_CB_LAYOUTRECALL = 5, 25*45377b94SBenny Halevy OP_CB_NOTIFY = 6, 26*45377b94SBenny Halevy OP_CB_PUSH_DELEG = 7, 27*45377b94SBenny Halevy OP_CB_RECALL_ANY = 8, 28*45377b94SBenny Halevy OP_CB_RECALLABLE_OBJ_AVAIL = 9, 29*45377b94SBenny Halevy OP_CB_RECALL_SLOT = 10, 30*45377b94SBenny Halevy OP_CB_SEQUENCE = 11, 31*45377b94SBenny Halevy OP_CB_WANTS_CANCELLED = 12, 32*45377b94SBenny Halevy OP_CB_NOTIFY_LOCK = 13, 331da177e4SLinus Torvalds OP_CB_ILLEGAL = 10044, 341da177e4SLinus Torvalds }; 351da177e4SLinus Torvalds 361da177e4SLinus Torvalds struct cb_compound_hdr_arg { 372e42c3e2STrond Myklebust unsigned int taglen; 381da177e4SLinus Torvalds const char *tag; 39b8f2ef84SBenny Halevy unsigned int minorversion; 401da177e4SLinus Torvalds unsigned nops; 411da177e4SLinus Torvalds }; 421da177e4SLinus Torvalds 431da177e4SLinus Torvalds struct cb_compound_hdr_res { 445704fdebSAl Viro __be32 *status; 452e42c3e2STrond Myklebust unsigned int taglen; 461da177e4SLinus Torvalds const char *tag; 475704fdebSAl Viro __be32 *nops; 481da177e4SLinus Torvalds }; 491da177e4SLinus Torvalds 501da177e4SLinus Torvalds struct cb_getattrargs { 51671beed7SChuck Lever struct sockaddr *addr; 521da177e4SLinus Torvalds struct nfs_fh fh; 531da177e4SLinus Torvalds uint32_t bitmap[2]; 541da177e4SLinus Torvalds }; 551da177e4SLinus Torvalds 561da177e4SLinus Torvalds struct cb_getattrres { 57e6f684f6SAl Viro __be32 status; 581da177e4SLinus Torvalds uint32_t bitmap[2]; 591da177e4SLinus Torvalds uint64_t size; 601da177e4SLinus Torvalds uint64_t change_attr; 611da177e4SLinus Torvalds struct timespec ctime; 621da177e4SLinus Torvalds struct timespec mtime; 631da177e4SLinus Torvalds }; 641da177e4SLinus Torvalds 651da177e4SLinus Torvalds struct cb_recallargs { 66c1d35866SChuck Lever struct sockaddr *addr; 671da177e4SLinus Torvalds struct nfs_fh fh; 681da177e4SLinus Torvalds nfs4_stateid stateid; 691da177e4SLinus Torvalds uint32_t truncate; 701da177e4SLinus Torvalds }; 711da177e4SLinus Torvalds 72e6f684f6SAl Viro extern __be32 nfs4_callback_getattr(struct cb_getattrargs *args, struct cb_getattrres *res); 73e6f684f6SAl Viro extern __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy); 741da177e4SLinus Torvalds 755ae1fbceSDavid Howells #ifdef CONFIG_NFS_V4 7671468513SBenny Halevy extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt); 77e82dc22dSAndy Adamson extern void nfs_callback_down(int minorversion); 78e82dc22dSAndy Adamson #endif /* CONFIG_NFS_V4 */ 791da177e4SLinus Torvalds 80a43cde94SRicardo Labiaga /* 81a43cde94SRicardo Labiaga * nfs41: Callbacks are expected to not cause substantial latency, 82a43cde94SRicardo Labiaga * so we limit their concurrency to 1 by setting up the maximum number 83a43cde94SRicardo Labiaga * of slots for the backchannel. 84a43cde94SRicardo Labiaga */ 85a43cde94SRicardo Labiaga #define NFS41_BC_MIN_CALLBACKS 1 86a43cde94SRicardo Labiaga 87a72b4422STrond Myklebust extern unsigned int nfs_callback_set_tcpport; 881da177e4SLinus Torvalds extern unsigned short nfs_callback_tcpport; 89f738f517SChuck Lever extern unsigned short nfs_callback_tcpport6; 901da177e4SLinus Torvalds 911da177e4SLinus Torvalds #endif /* __LINUX_FS_NFS_CALLBACK_H */ 92