nfsd: Move private headers to source directory
authorBoaz Harrosh <bharrosh@panasas.com>
Thu, 3 Dec 2009 18:30:56 +0000 (20:30 +0200)
committerJ. Bruce Fields <bfields@citi.umich.edu>
Mon, 14 Dec 2009 23:12:12 +0000 (18:12 -0500)
Lots of include/linux/nfsd/* headers are only used by
nfsd module. Move them to the source directory

Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
32 files changed:
fs/nfsd/auth.c
fs/nfsd/cache.h [new file with mode: 0644]
fs/nfsd/export.c
fs/nfsd/lockd.c
fs/nfsd/nfs2acl.c
fs/nfsd/nfs3acl.c
fs/nfsd/nfs3proc.c
fs/nfsd/nfs3xdr.c
fs/nfsd/nfs4callback.c
fs/nfsd/nfs4proc.c
fs/nfsd/nfs4recover.c
fs/nfsd/nfs4state.c
fs/nfsd/nfs4xdr.c
fs/nfsd/nfscache.c
fs/nfsd/nfsctl.c
fs/nfsd/nfsd.h [new file with mode: 0644]
fs/nfsd/nfsfh.c
fs/nfsd/nfsproc.c
fs/nfsd/nfssvc.c
fs/nfsd/nfsxdr.c
fs/nfsd/state.h [new file with mode: 0644]
fs/nfsd/stats.c
fs/nfsd/vfs.c
fs/nfsd/xdr.h [new file with mode: 0644]
fs/nfsd/xdr3.h [new file with mode: 0644]
fs/nfsd/xdr4.h [new file with mode: 0644]
include/linux/nfsd/cache.h [deleted file]
include/linux/nfsd/nfsd.h [deleted file]
include/linux/nfsd/state.h [deleted file]
include/linux/nfsd/xdr.h [deleted file]
include/linux/nfsd/xdr3.h [deleted file]
include/linux/nfsd/xdr4.h [deleted file]

index ad354d284cf8248526c0facd53da8a12ee8dd789..71209d4993d0b089730df0474e1549afa39086cd 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 #include <linux/sched.h>
-#include <linux/nfsd/nfsd.h>
+#include "nfsd.h"
 #include "auth.h"
 
 int nfsexp_flags(struct svc_rqst *rqstp, struct svc_export *exp)
diff --git a/fs/nfsd/cache.h b/fs/nfsd/cache.h
new file mode 100644 (file)
index 0000000..a165425
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * include/linux/nfsd/cache.h
+ *
+ * Request reply cache. This was heavily inspired by the
+ * implementation in 4.3BSD/4.4BSD.
+ *
+ * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef NFSCACHE_H
+#define NFSCACHE_H
+
+#include <linux/sunrpc/svc.h>
+
+/*
+ * Representation of a reply cache entry.
+ */
+struct svc_cacherep {
+       struct hlist_node       c_hash;
+       struct list_head        c_lru;
+
+       unsigned char           c_state,        /* unused, inprog, done */
+                               c_type,         /* status, buffer */
+                               c_secure : 1;   /* req came from port < 1024 */
+       struct sockaddr_in      c_addr;
+       __be32                  c_xid;
+       u32                     c_prot;
+       u32                     c_proc;
+       u32                     c_vers;
+       unsigned long           c_timestamp;
+       union {
+               struct kvec     u_vec;
+               __be32          u_status;
+       }                       c_u;
+};
+
+#define c_replvec              c_u.u_vec
+#define c_replstat             c_u.u_status
+
+/* cache entry states */
+enum {
+       RC_UNUSED,
+       RC_INPROG,
+       RC_DONE
+};
+
+/* return values */
+enum {
+       RC_DROPIT,
+       RC_REPLY,
+       RC_DOIT,
+       RC_INTR
+};
+
+/*
+ * Cache types.
+ * We may want to add more types one day, e.g. for diropres and
+ * attrstat replies. Using cache entries with fixed length instead
+ * of buffer pointers may be more efficient.
+ */
+enum {
+       RC_NOCACHE,
+       RC_REPLSTAT,
+       RC_REPLBUFF,
+};
+
+/*
+ * If requests are retransmitted within this interval, they're dropped.
+ */
+#define RC_DELAY               (HZ/5)
+
+int    nfsd_reply_cache_init(void);
+void   nfsd_reply_cache_shutdown(void);
+int    nfsd_cache_lookup(struct svc_rqst *, int);
+void   nfsd_cache_update(struct svc_rqst *, int, __be32 *);
+
+#ifdef CONFIG_NFSD_V4
+void   nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp);
+#else  /* CONFIG_NFSD_V4 */
+static inline void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp)
+{
+}
+#endif /* CONFIG_NFSD_V4 */
+
+#endif /* NFSCACHE_H */
index 68e63f441444a6eaf6f98ed9de7cc26b262c9bc2..cb3dae2fcd86ed69839934238e449c6ad0e92f87 100644 (file)
 #include <linux/module.h>
 #include <linux/exportfs.h>
 
-#include <linux/nfsd/nfsd.h>
 #include <linux/nfsd/syscall.h>
 #include <net/ipv6.h>
 
+#include "nfsd.h"
+
 #define NFSDDBG_FACILITY       NFSDDBG_EXPORT
 
 typedef struct auth_domain     svc_client;
index 801ef7104ff49be1c18fd4b14b053e860949e450..6f12777ed2277d2d9bc9a9ce53644d536487d43f 100644 (file)
@@ -9,8 +9,8 @@
  */
 
 #include <linux/file.h>
-#include <linux/nfsd/nfsd.h>
 #include <linux/lockd/bind.h>
+#include "nfsd.h"
 #include "vfs.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_LOCKD
index a54628de7715e55341c63a7ed46825a64d1e6ffe..874e2a94bf4f4539889118e89669cf53cc63386b 100644 (file)
@@ -6,10 +6,11 @@
  * Copyright (C) 2002-2003 Andreas Gruenbacher <agruen@suse.de>
  */
 
-#include <linux/nfsd/nfsd.h>
-#include <linux/nfsd/cache.h>
-#include <linux/nfsd/xdr3.h>
+#include "nfsd.h"
+/* FIXME: nfsacl.h is a broken header */
 #include <linux/nfsacl.h>
+#include "cache.h"
+#include "xdr3.h"
 #include "vfs.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_PROC
index 2f5c61bea908b6e5546cfe4646dc98eea5c46989..c6011ddbadc042c1f8f5f5b43e21f0caa6ed6a25 100644 (file)
@@ -6,10 +6,11 @@
  * Copyright (C) 2002-2003 Andreas Gruenbacher <agruen@suse.de>
  */
 
-#include <linux/nfsd/nfsd.h>
-#include <linux/nfsd/cache.h>
-#include <linux/nfsd/xdr3.h>
+#include "nfsd.h"
+/* FIXME: nfsacl.h is a broken header */
 #include <linux/nfsacl.h>
+#include "cache.h"
+#include "xdr3.h"
 #include "vfs.h"
 
 #define RETURN_STATUS(st)      { resp->status = (st); return (st); }
index b694b43045449d0e8872ea0c74ef1f5cca6c748d..90b19ca75b34cf47a0c405e40129cf063a503867 100644 (file)
@@ -10,8 +10,8 @@
 #include <linux/ext2_fs.h>
 #include <linux/magic.h>
 
-#include <linux/nfsd/cache.h>
-#include <linux/nfsd/xdr3.h>
+#include "cache.h"
+#include "xdr3.h"
 #include "vfs.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_PROC
index 623e13aa62595069e11ddaa3cb416c0f22a14c95..c523bb88c10b72695a08076e1c665483f3f98846 100644 (file)
@@ -9,7 +9,7 @@
  */
 
 #include <linux/namei.h>
-#include <linux/nfsd/xdr3.h>
+#include "xdr3.h"
 #include "auth.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_XDR
index 4fe396071b613e6a7d2c0b794081ec0a658bbe35..f7a315827638b60f90bc957eea8ae3e752316258 100644 (file)
@@ -34,8 +34,8 @@
  */
 
 #include <linux/sunrpc/clnt.h>
-#include <linux/nfsd/nfsd.h>
-#include <linux/nfsd/state.h>
+#include "nfsd.h"
+#include "state.h"
 
 #define NFSDDBG_FACILITY                NFSDDBG_PROC
 
index 61f682c77e7f23e1bc914f52b8756617da06bb01..e2b5666f25d148d3f1a4cd291c15648a6a23cb13 100644 (file)
@@ -36,8 +36,8 @@
  */
 #include <linux/file.h>
 
-#include <linux/nfsd/cache.h>
-#include <linux/nfsd/xdr4.h>
+#include "cache.h"
+#include "xdr4.h"
 #include "vfs.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_PROC
index 48742f243c25c92ed01064fa2f3b9ba358ddadd8..6744e7f2da0e291e41b5e341863777c39a747f9d 100644 (file)
 *
 */
 
-#include <linux/nfsd/nfsd.h>
-#include <linux/nfsd/state.h>
 #include <linux/file.h>
 #include <linux/namei.h>
 #include <linux/crypto.h>
 #include <linux/sched.h>
+
+#include "nfsd.h"
+#include "state.h"
 #include "vfs.h"
 
 #define NFSDDBG_FACILITY                NFSDDBG_PROC
index 1fe6e29fd500f64391c5aeed5526e1d527f6ab0d..2923e6c1da181b89f2f5e2d92de004c8edb4f47a 100644 (file)
 
 #include <linux/file.h>
 #include <linux/smp_lock.h>
-#include <linux/nfsd/xdr4.h>
 #include <linux/namei.h>
 #include <linux/swap.h>
 #include <linux/sunrpc/svcauth_gss.h>
 #include <linux/sunrpc/clnt.h>
+#include "xdr4.h"
 #include "vfs.h"
 
 #define NFSDDBG_FACILITY                NFSDDBG_PROC
index 2fa96821f5b5ee20b227d17518120e7f6d3f1943..cab9780311006a98a20a92a499d69d1ad55c3c9b 100644 (file)
 #include <linux/namei.h>
 #include <linux/statfs.h>
 #include <linux/utsname.h>
-#include <linux/nfsd/xdr4.h>
 #include <linux/nfsd_idmap.h>
 #include <linux/nfs4_acl.h>
 #include <linux/sunrpc/svcauth_gss.h>
+
+#include "xdr4.h"
 #include "vfs.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_XDR
index 96694b8345eff895160c1f5dba1d1f640dc14e9b..18aa9729a38012ef6ff26c2885b2785054101df5 100644 (file)
@@ -10,8 +10,8 @@
  * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
  */
 
-#include <linux/nfsd/nfsd.h>
-#include <linux/nfsd/cache.h>
+#include "nfsd.h"
+#include "cache.h"
 
 /* Size of reply cache. Common values are:
  * 4.3BSD:     128
index e4f49fd6af44037f49236a9feb284ad6cd96a910..0415680d3f58a9b43ede349bd65846fe8b6d1291 100644 (file)
 
 #include <linux/nfsd_idmap.h>
 #include <linux/sunrpc/svcsock.h>
-#include <linux/nfsd/nfsd.h>
-#include <linux/nfsd/cache.h>
 #include <linux/nfsd/syscall.h>
 #include <linux/lockd/lockd.h>
 #include <linux/sunrpc/clnt.h>
 
+#include "nfsd.h"
+#include "cache.h"
+
 /*
  *     We have a single directory with 9 nodes in it.
  */
diff --git a/fs/nfsd/nfsd.h b/fs/nfsd/nfsd.h
new file mode 100644 (file)
index 0000000..74f67c2
--- /dev/null
@@ -0,0 +1,335 @@
+/*
+ * linux/include/linux/nfsd/nfsd.h
+ *
+ * Hodge-podge collection of knfsd-related stuff.
+ * I will sort this out later.
+ *
+ * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef LINUX_NFSD_NFSD_H
+#define LINUX_NFSD_NFSD_H
+
+#include <linux/types.h>
+#include <linux/mount.h>
+
+#include <linux/nfsd/debug.h>
+#include <linux/nfsd/export.h>
+#include <linux/nfsd/stats.h>
+/*
+ * nfsd version
+ */
+#define NFSD_SUPPORTED_MINOR_VERSION   1
+
+struct readdir_cd {
+       __be32                  err;    /* 0, nfserr, or nfserr_eof */
+};
+
+
+extern struct svc_program      nfsd_program;
+extern struct svc_version      nfsd_version2, nfsd_version3,
+                               nfsd_version4;
+extern u32                     nfsd_supported_minorversion;
+extern struct mutex            nfsd_mutex;
+extern struct svc_serv         *nfsd_serv;
+extern spinlock_t              nfsd_drc_lock;
+extern unsigned int            nfsd_drc_max_mem;
+extern unsigned int            nfsd_drc_mem_used;
+
+extern const struct seq_operations nfs_exports_op;
+
+/*
+ * Function prototypes.
+ */
+int            nfsd_svc(unsigned short port, int nrservs);
+int            nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp);
+
+int            nfsd_nrthreads(void);
+int            nfsd_nrpools(void);
+int            nfsd_get_nrthreads(int n, int *);
+int            nfsd_set_nrthreads(int n, int *);
+
+#if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
+#ifdef CONFIG_NFSD_V2_ACL
+extern struct svc_version nfsd_acl_version2;
+#else
+#define nfsd_acl_version2 NULL
+#endif
+#ifdef CONFIG_NFSD_V3_ACL
+extern struct svc_version nfsd_acl_version3;
+#else
+#define nfsd_acl_version3 NULL
+#endif
+#endif
+
+enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL };
+int nfsd_vers(int vers, enum vers_op change);
+int nfsd_minorversion(u32 minorversion, enum vers_op change);
+void nfsd_reset_versions(void);
+int nfsd_create_serv(void);
+
+extern int nfsd_max_blksize;
+
+/* 
+ * NFSv4 State
+ */
+#ifdef CONFIG_NFSD_V4
+extern unsigned int max_delegations;
+int nfs4_state_init(void);
+void nfsd4_free_slabs(void);
+int nfs4_state_start(void);
+void nfs4_state_shutdown(void);
+time_t nfs4_lease_time(void);
+void nfs4_reset_lease(time_t leasetime);
+int nfs4_reset_recoverydir(char *recdir);
+#else
+static inline int nfs4_state_init(void) { return 0; }
+static inline void nfsd4_free_slabs(void) { }
+static inline int nfs4_state_start(void) { return 0; }
+static inline void nfs4_state_shutdown(void) { }
+static inline time_t nfs4_lease_time(void) { return 0; }
+static inline void nfs4_reset_lease(time_t leasetime) { }
+static inline int nfs4_reset_recoverydir(char *recdir) { return 0; }
+#endif
+
+/*
+ * lockd binding
+ */
+void           nfsd_lockd_init(void);
+void           nfsd_lockd_shutdown(void);
+
+
+/*
+ * These macros provide pre-xdr'ed values for faster operation.
+ */
+#define        nfs_ok                  cpu_to_be32(NFS_OK)
+#define        nfserr_perm             cpu_to_be32(NFSERR_PERM)
+#define        nfserr_noent            cpu_to_be32(NFSERR_NOENT)
+#define        nfserr_io               cpu_to_be32(NFSERR_IO)
+#define        nfserr_nxio             cpu_to_be32(NFSERR_NXIO)
+#define        nfserr_eagain           cpu_to_be32(NFSERR_EAGAIN)
+#define        nfserr_acces            cpu_to_be32(NFSERR_ACCES)
+#define        nfserr_exist            cpu_to_be32(NFSERR_EXIST)
+#define        nfserr_xdev             cpu_to_be32(NFSERR_XDEV)
+#define        nfserr_nodev            cpu_to_be32(NFSERR_NODEV)
+#define        nfserr_notdir           cpu_to_be32(NFSERR_NOTDIR)
+#define        nfserr_isdir            cpu_to_be32(NFSERR_ISDIR)
+#define        nfserr_inval            cpu_to_be32(NFSERR_INVAL)
+#define        nfserr_fbig             cpu_to_be32(NFSERR_FBIG)
+#define        nfserr_nospc            cpu_to_be32(NFSERR_NOSPC)
+#define        nfserr_rofs             cpu_to_be32(NFSERR_ROFS)
+#define        nfserr_mlink            cpu_to_be32(NFSERR_MLINK)
+#define        nfserr_opnotsupp        cpu_to_be32(NFSERR_OPNOTSUPP)
+#define        nfserr_nametoolong      cpu_to_be32(NFSERR_NAMETOOLONG)
+#define        nfserr_notempty         cpu_to_be32(NFSERR_NOTEMPTY)
+#define        nfserr_dquot            cpu_to_be32(NFSERR_DQUOT)
+#define        nfserr_stale            cpu_to_be32(NFSERR_STALE)
+#define        nfserr_remote           cpu_to_be32(NFSERR_REMOTE)
+#define        nfserr_wflush           cpu_to_be32(NFSERR_WFLUSH)
+#define        nfserr_badhandle        cpu_to_be32(NFSERR_BADHANDLE)
+#define        nfserr_notsync          cpu_to_be32(NFSERR_NOT_SYNC)
+#define        nfserr_badcookie        cpu_to_be32(NFSERR_BAD_COOKIE)
+#define        nfserr_notsupp          cpu_to_be32(NFSERR_NOTSUPP)
+#define        nfserr_toosmall         cpu_to_be32(NFSERR_TOOSMALL)
+#define        nfserr_serverfault      cpu_to_be32(NFSERR_SERVERFAULT)
+#define        nfserr_badtype          cpu_to_be32(NFSERR_BADTYPE)
+#define        nfserr_jukebox          cpu_to_be32(NFSERR_JUKEBOX)
+#define        nfserr_denied           cpu_to_be32(NFSERR_DENIED)
+#define        nfserr_deadlock         cpu_to_be32(NFSERR_DEADLOCK)
+#define nfserr_expired          cpu_to_be32(NFSERR_EXPIRED)
+#define        nfserr_bad_cookie       cpu_to_be32(NFSERR_BAD_COOKIE)
+#define        nfserr_same             cpu_to_be32(NFSERR_SAME)
+#define        nfserr_clid_inuse       cpu_to_be32(NFSERR_CLID_INUSE)
+#define        nfserr_stale_clientid   cpu_to_be32(NFSERR_STALE_CLIENTID)
+#define        nfserr_resource         cpu_to_be32(NFSERR_RESOURCE)
+#define        nfserr_moved            cpu_to_be32(NFSERR_MOVED)
+#define        nfserr_nofilehandle     cpu_to_be32(NFSERR_NOFILEHANDLE)
+#define        nfserr_minor_vers_mismatch      cpu_to_be32(NFSERR_MINOR_VERS_MISMATCH)
+#define nfserr_share_denied    cpu_to_be32(NFSERR_SHARE_DENIED)
+#define nfserr_stale_stateid   cpu_to_be32(NFSERR_STALE_STATEID)
+#define nfserr_old_stateid     cpu_to_be32(NFSERR_OLD_STATEID)
+#define nfserr_bad_stateid     cpu_to_be32(NFSERR_BAD_STATEID)
+#define nfserr_bad_seqid       cpu_to_be32(NFSERR_BAD_SEQID)
+#define        nfserr_symlink          cpu_to_be32(NFSERR_SYMLINK)
+#define        nfserr_not_same         cpu_to_be32(NFSERR_NOT_SAME)
+#define        nfserr_restorefh        cpu_to_be32(NFSERR_RESTOREFH)
+#define        nfserr_attrnotsupp      cpu_to_be32(NFSERR_ATTRNOTSUPP)
+#define        nfserr_bad_xdr          cpu_to_be32(NFSERR_BAD_XDR)
+#define        nfserr_openmode         cpu_to_be32(NFSERR_OPENMODE)
+#define        nfserr_locks_held       cpu_to_be32(NFSERR_LOCKS_HELD)
+#define        nfserr_op_illegal       cpu_to_be32(NFSERR_OP_ILLEGAL)
+#define        nfserr_grace            cpu_to_be32(NFSERR_GRACE)
+#define        nfserr_no_grace         cpu_to_be32(NFSERR_NO_GRACE)
+#define        nfserr_reclaim_bad      cpu_to_be32(NFSERR_RECLAIM_BAD)
+#define        nfserr_badname          cpu_to_be32(NFSERR_BADNAME)
+#define        nfserr_cb_path_down     cpu_to_be32(NFSERR_CB_PATH_DOWN)
+#define        nfserr_locked           cpu_to_be32(NFSERR_LOCKED)
+#define        nfserr_wrongsec         cpu_to_be32(NFSERR_WRONGSEC)
+#define nfserr_badiomode               cpu_to_be32(NFS4ERR_BADIOMODE)
+#define nfserr_badlayout               cpu_to_be32(NFS4ERR_BADLAYOUT)
+#define nfserr_bad_session_digest      cpu_to_be32(NFS4ERR_BAD_SESSION_DIGEST)
+#define nfserr_badsession              cpu_to_be32(NFS4ERR_BADSESSION)
+#define nfserr_badslot                 cpu_to_be32(NFS4ERR_BADSLOT)
+#define nfserr_complete_already                cpu_to_be32(NFS4ERR_COMPLETE_ALREADY)
+#define nfserr_conn_not_bound_to_session cpu_to_be32(NFS4ERR_CONN_NOT_BOUND_TO_SESSION)
+#define nfserr_deleg_already_wanted    cpu_to_be32(NFS4ERR_DELEG_ALREADY_WANTED)
+#define nfserr_back_chan_busy          cpu_to_be32(NFS4ERR_BACK_CHAN_BUSY)
+#define nfserr_layouttrylater          cpu_to_be32(NFS4ERR_LAYOUTTRYLATER)
+#define nfserr_layoutunavailable       cpu_to_be32(NFS4ERR_LAYOUTUNAVAILABLE)
+#define nfserr_nomatching_layout       cpu_to_be32(NFS4ERR_NOMATCHING_LAYOUT)
+#define nfserr_recallconflict          cpu_to_be32(NFS4ERR_RECALLCONFLICT)
+#define nfserr_unknown_layouttype      cpu_to_be32(NFS4ERR_UNKNOWN_LAYOUTTYPE)
+#define nfserr_seq_misordered          cpu_to_be32(NFS4ERR_SEQ_MISORDERED)
+#define nfserr_sequence_pos            cpu_to_be32(NFS4ERR_SEQUENCE_POS)
+#define nfserr_req_too_big             cpu_to_be32(NFS4ERR_REQ_TOO_BIG)
+#define nfserr_rep_too_big             cpu_to_be32(NFS4ERR_REP_TOO_BIG)
+#define nfserr_rep_too_big_to_cache    cpu_to_be32(NFS4ERR_REP_TOO_BIG_TO_CACHE)
+#define nfserr_retry_uncached_rep      cpu_to_be32(NFS4ERR_RETRY_UNCACHED_REP)
+#define nfserr_unsafe_compound         cpu_to_be32(NFS4ERR_UNSAFE_COMPOUND)
+#define nfserr_too_many_ops            cpu_to_be32(NFS4ERR_TOO_MANY_OPS)
+#define nfserr_op_not_in_session       cpu_to_be32(NFS4ERR_OP_NOT_IN_SESSION)
+#define nfserr_hash_alg_unsupp         cpu_to_be32(NFS4ERR_HASH_ALG_UNSUPP)
+#define nfserr_clientid_busy           cpu_to_be32(NFS4ERR_CLIENTID_BUSY)
+#define nfserr_pnfs_io_hole            cpu_to_be32(NFS4ERR_PNFS_IO_HOLE)
+#define nfserr_seq_false_retry         cpu_to_be32(NFS4ERR_SEQ_FALSE_RETRY)
+#define nfserr_bad_high_slot           cpu_to_be32(NFS4ERR_BAD_HIGH_SLOT)
+#define nfserr_deadsession             cpu_to_be32(NFS4ERR_DEADSESSION)
+#define nfserr_encr_alg_unsupp         cpu_to_be32(NFS4ERR_ENCR_ALG_UNSUPP)
+#define nfserr_pnfs_no_layout          cpu_to_be32(NFS4ERR_PNFS_NO_LAYOUT)
+#define nfserr_not_only_op             cpu_to_be32(NFS4ERR_NOT_ONLY_OP)
+#define nfserr_wrong_cred              cpu_to_be32(NFS4ERR_WRONG_CRED)
+#define nfserr_wrong_type              cpu_to_be32(NFS4ERR_WRONG_TYPE)
+#define nfserr_dirdeleg_unavail                cpu_to_be32(NFS4ERR_DIRDELEG_UNAVAIL)
+#define nfserr_reject_deleg            cpu_to_be32(NFS4ERR_REJECT_DELEG)
+#define nfserr_returnconflict          cpu_to_be32(NFS4ERR_RETURNCONFLICT)
+#define nfserr_deleg_revoked           cpu_to_be32(NFS4ERR_DELEG_REVOKED)
+
+/* error codes for internal use */
+/* if a request fails due to kmalloc failure, it gets dropped.
+ *  Client should resend eventually
+ */
+#define        nfserr_dropit           cpu_to_be32(30000)
+/* end-of-file indicator in readdir */
+#define        nfserr_eof              cpu_to_be32(30001)
+/* replay detected */
+#define        nfserr_replay_me        cpu_to_be32(11001)
+/* nfs41 replay detected */
+#define        nfserr_replay_cache     cpu_to_be32(11002)
+
+/* Check for dir entries '.' and '..' */
+#define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.'))
+
+/*
+ * Time of server startup
+ */
+extern struct timeval  nfssvc_boot;
+
+#ifdef CONFIG_NFSD_V4
+
+/* before processing a COMPOUND operation, we have to check that there
+ * is enough space in the buffer for XDR encode to succeed.  otherwise,
+ * we might process an operation with side effects, and be unable to
+ * tell the client that the operation succeeded.
+ *
+ * COMPOUND_SLACK_SPACE - this is the minimum bytes of buffer space
+ * needed to encode an "ordinary" _successful_ operation.  (GETATTR,
+ * READ, READDIR, and READLINK have their own buffer checks.)  if we
+ * fall below this level, we fail the next operation with NFS4ERR_RESOURCE.
+ *
+ * COMPOUND_ERR_SLACK_SPACE - this is the minimum bytes of buffer space
+ * needed to encode an operation which has failed with NFS4ERR_RESOURCE.
+ * care is taken to ensure that we never fall below this level for any
+ * reason.
+ */
+#define        COMPOUND_SLACK_SPACE            140    /* OP_GETFH */
+#define COMPOUND_ERR_SLACK_SPACE       12     /* OP_SETATTR */
+
+#define NFSD_LEASE_TIME                 (nfs4_lease_time())
+#define NFSD_LAUNDROMAT_MINTIMEOUT      10   /* seconds */
+
+/*
+ * The following attributes are currently not supported by the NFSv4 server:
+ *    ARCHIVE       (deprecated anyway)
+ *    HIDDEN        (unlikely to be supported any time soon)
+ *    MIMETYPE      (unlikely to be supported any time soon)
+ *    QUOTA_*       (will be supported in a forthcoming patch)
+ *    SYSTEM        (unlikely to be supported any time soon)
+ *    TIME_BACKUP   (unlikely to be supported any time soon)
+ *    TIME_CREATE   (unlikely to be supported any time soon)
+ */
+#define NFSD4_SUPPORTED_ATTRS_WORD0                                                         \
+(FATTR4_WORD0_SUPPORTED_ATTRS   | FATTR4_WORD0_TYPE         | FATTR4_WORD0_FH_EXPIRE_TYPE   \
+ | FATTR4_WORD0_CHANGE          | FATTR4_WORD0_SIZE         | FATTR4_WORD0_LINK_SUPPORT     \
+ | FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR   | FATTR4_WORD0_FSID             \
+ | FATTR4_WORD0_UNIQUE_HANDLES  | FATTR4_WORD0_LEASE_TIME   | FATTR4_WORD0_RDATTR_ERROR     \
+ | FATTR4_WORD0_ACLSUPPORT      | FATTR4_WORD0_CANSETTIME   | FATTR4_WORD0_CASE_INSENSITIVE \
+ | FATTR4_WORD0_CASE_PRESERVING | FATTR4_WORD0_CHOWN_RESTRICTED                             \
+ | FATTR4_WORD0_FILEHANDLE      | FATTR4_WORD0_FILEID       | FATTR4_WORD0_FILES_AVAIL      \
+ | FATTR4_WORD0_FILES_FREE      | FATTR4_WORD0_FILES_TOTAL  | FATTR4_WORD0_FS_LOCATIONS | FATTR4_WORD0_HOMOGENEOUS      \
+ | FATTR4_WORD0_MAXFILESIZE     | FATTR4_WORD0_MAXLINK      | FATTR4_WORD0_MAXNAME          \
+ | FATTR4_WORD0_MAXREAD         | FATTR4_WORD0_MAXWRITE     | FATTR4_WORD0_ACL)
+
+#define NFSD4_SUPPORTED_ATTRS_WORD1                                                         \
+(FATTR4_WORD1_MODE              | FATTR4_WORD1_NO_TRUNC     | FATTR4_WORD1_NUMLINKS         \
+ | FATTR4_WORD1_OWNER          | FATTR4_WORD1_OWNER_GROUP  | FATTR4_WORD1_RAWDEV           \
+ | FATTR4_WORD1_SPACE_AVAIL     | FATTR4_WORD1_SPACE_FREE   | FATTR4_WORD1_SPACE_TOTAL      \
+ | FATTR4_WORD1_SPACE_USED      | FATTR4_WORD1_TIME_ACCESS  | FATTR4_WORD1_TIME_ACCESS_SET  \
+ | FATTR4_WORD1_TIME_DELTA   | FATTR4_WORD1_TIME_METADATA    \
+ | FATTR4_WORD1_TIME_MODIFY     | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
+
+#define NFSD4_SUPPORTED_ATTRS_WORD2 0
+
+#define NFSD4_1_SUPPORTED_ATTRS_WORD0 \
+       NFSD4_SUPPORTED_ATTRS_WORD0
+
+#define NFSD4_1_SUPPORTED_ATTRS_WORD1 \
+       NFSD4_SUPPORTED_ATTRS_WORD1
+
+#define NFSD4_1_SUPPORTED_ATTRS_WORD2 \
+       (NFSD4_SUPPORTED_ATTRS_WORD2 | FATTR4_WORD2_SUPPATTR_EXCLCREAT)
+
+static inline u32 nfsd_suppattrs0(u32 minorversion)
+{
+       return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD0
+                           : NFSD4_SUPPORTED_ATTRS_WORD0;
+}
+
+static inline u32 nfsd_suppattrs1(u32 minorversion)
+{
+       return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD1
+                           : NFSD4_SUPPORTED_ATTRS_WORD1;
+}
+
+static inline u32 nfsd_suppattrs2(u32 minorversion)
+{
+       return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD2
+                           : NFSD4_SUPPORTED_ATTRS_WORD2;
+}
+
+/* These will return ERR_INVAL if specified in GETATTR or READDIR. */
+#define NFSD_WRITEONLY_ATTRS_WORD1                                                         \
+(FATTR4_WORD1_TIME_ACCESS_SET   | FATTR4_WORD1_TIME_MODIFY_SET)
+
+/* These are the only attrs allowed in CREATE/OPEN/SETATTR. */
+#define NFSD_WRITEABLE_ATTRS_WORD0                                                          \
+(FATTR4_WORD0_SIZE              | FATTR4_WORD0_ACL                                         )
+#define NFSD_WRITEABLE_ATTRS_WORD1                                                          \
+(FATTR4_WORD1_MODE              | FATTR4_WORD1_OWNER         | FATTR4_WORD1_OWNER_GROUP     \
+ | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
+#define NFSD_WRITEABLE_ATTRS_WORD2 0
+
+#define NFSD_SUPPATTR_EXCLCREAT_WORD0 \
+       NFSD_WRITEABLE_ATTRS_WORD0
+/*
+ * we currently store the exclusive create verifier in the v_{a,m}time
+ * attributes so the client can't set these at create time using EXCLUSIVE4_1
+ */
+#define NFSD_SUPPATTR_EXCLCREAT_WORD1 \
+       (NFSD_WRITEABLE_ATTRS_WORD1 & \
+        ~(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET))
+#define NFSD_SUPPATTR_EXCLCREAT_WORD2 \
+       NFSD_WRITEABLE_ATTRS_WORD2
+
+#endif /* CONFIG_NFSD_V4 */
+
+#endif /* LINUX_NFSD_NFSD_H */
index 7399481650340cb0962bc64886af770878765f8b..0eb1c59f5ab835c1983267d3f7e026ce77c69565 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/exportfs.h>
 
 #include <linux/sunrpc/svcauth_gss.h>
-#include <linux/nfsd/nfsd.h>
+#include "nfsd.h"
 #include "vfs.h"
 #include "auth.h"
 
index b6bd9e0d7cd0b4c07afc034b8ab9b758d989642c..21a5f793c3d159953dc706e787a91eda89d15345 100644 (file)
@@ -9,8 +9,8 @@
 
 #include <linux/namei.h>
 
-#include <linux/nfsd/cache.h>
-#include <linux/nfsd/xdr.h>
+#include "cache.h"
+#include "xdr.h"
 #include "vfs.h"
 
 typedef struct svc_rqst        svc_rqst;
index b2d7ffac0357364ee3ba0d33c17fedd9d3328025..b520ce10bd158c066cbcd55a965152965cb84d92 100644 (file)
 
 #include <linux/sunrpc/stats.h>
 #include <linux/sunrpc/svcsock.h>
-#include <linux/nfsd/nfsd.h>
-#include <linux/nfsd/cache.h>
 #include <linux/lockd/bind.h>
 #include <linux/nfsacl.h>
 #include <linux/seq_file.h>
+#include "nfsd.h"
+#include "cache.h"
 #include "vfs.h"
 
 #define NFSDDBG_FACILITY       NFSDDBG_SVC
index 5e0603da39e75566c504e76a41f26ae556463b8e..3bec831704af904450e90ae284439722cb29b951 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
  */
 
-#include <linux/nfsd/xdr.h>
+#include "xdr.h"
 #include "auth.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_XDR
diff --git a/fs/nfsd/state.h b/fs/nfsd/state.h
new file mode 100644 (file)
index 0000000..2af7568
--- /dev/null
@@ -0,0 +1,409 @@
+/*
+ *  linux/include/nfsd/state.h
+ *
+ *  Copyright (c) 2001 The Regents of the University of Michigan.
+ *  All rights reserved.
+ *
+ *  Kendrick Smith <kmsmith@umich.edu>
+ *  Andy Adamson <andros@umich.edu>
+ *  
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *  
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *  3. Neither the name of the University nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef _NFSD4_STATE_H
+#define _NFSD4_STATE_H
+
+#include <linux/nfsd/nfsfh.h>
+
+typedef struct {
+       u32             cl_boot;
+       u32             cl_id;
+} clientid_t;
+
+typedef struct {
+       u32             so_boot;
+       u32             so_stateownerid;
+       u32             so_fileid;
+} stateid_opaque_t;
+
+typedef struct {
+       u32                     si_generation;
+       stateid_opaque_t        si_opaque;
+} stateid_t;
+#define si_boot           si_opaque.so_boot
+#define si_stateownerid   si_opaque.so_stateownerid
+#define si_fileid         si_opaque.so_fileid
+
+#define STATEID_FMT    "(%08x/%08x/%08x/%08x)"
+#define STATEID_VAL(s) \
+       (s)->si_boot, \
+       (s)->si_stateownerid, \
+       (s)->si_fileid, \
+       (s)->si_generation
+
+struct nfsd4_cb_sequence {
+       /* args/res */
+       u32                     cbs_minorversion;
+       struct nfs4_client      *cbs_clp;
+};
+
+struct nfs4_delegation {
+       struct list_head        dl_perfile;
+       struct list_head        dl_perclnt;
+       struct list_head        dl_recall_lru;  /* delegation recalled */
+       atomic_t                dl_count;       /* ref count */
+       struct nfs4_client      *dl_client;
+       struct nfs4_file        *dl_file;
+       struct file_lock        *dl_flock;
+       struct file             *dl_vfs_file;
+       u32                     dl_type;
+       time_t                  dl_time;
+/* For recall: */
+       u32                     dl_ident;
+       stateid_t               dl_stateid;
+       struct knfsd_fh         dl_fh;
+       int                     dl_retries;
+};
+
+/* client delegation callback info */
+struct nfs4_cb_conn {
+       /* SETCLIENTID info */
+       struct sockaddr_storage cb_addr;
+       size_t                  cb_addrlen;
+       u32                     cb_prog;
+       u32                     cb_minorversion;
+       u32                     cb_ident;       /* minorversion 0 only */
+       /* RPC client info */
+       atomic_t                cb_set;     /* successful CB_NULL call */
+       struct rpc_clnt *       cb_client;
+};
+
+/* Maximum number of slots per session. 160 is useful for long haul TCP */
+#define NFSD_MAX_SLOTS_PER_SESSION     160
+/* Maximum number of operations per session compound */
+#define NFSD_MAX_OPS_PER_COMPOUND      16
+/* Maximum  session per slot cache size */
+#define NFSD_SLOT_CACHE_SIZE           1024
+/* Maximum number of NFSD_SLOT_CACHE_SIZE slots per session */
+#define NFSD_CACHE_SIZE_SLOTS_PER_SESSION      32
+#define NFSD_MAX_MEM_PER_SESSION  \
+               (NFSD_CACHE_SIZE_SLOTS_PER_SESSION * NFSD_SLOT_CACHE_SIZE)
+
+struct nfsd4_slot {
+       bool    sl_inuse;
+       bool    sl_cachethis;
+       u16     sl_opcnt;
+       u32     sl_seqid;
+       __be32  sl_status;
+       u32     sl_datalen;
+       char    sl_data[];
+};
+
+struct nfsd4_channel_attrs {
+       u32             headerpadsz;
+       u32             maxreq_sz;
+       u32             maxresp_sz;
+       u32             maxresp_cached;
+       u32             maxops;
+       u32             maxreqs;
+       u32             nr_rdma_attrs;
+       u32             rdma_attrs;
+};
+
+struct nfsd4_create_session {
+       clientid_t                      clientid;
+       struct nfs4_sessionid           sessionid;
+       u32                             seqid;
+       u32                             flags;
+       struct nfsd4_channel_attrs      fore_channel;
+       struct nfsd4_channel_attrs      back_channel;
+       u32                             callback_prog;
+       u32                             uid;
+       u32                             gid;
+};
+
+/* The single slot clientid cache structure */
+struct nfsd4_clid_slot {
+       u32                             sl_seqid;
+       __be32                          sl_status;
+       struct nfsd4_create_session     sl_cr_ses;
+};
+
+struct nfsd4_session {
+       struct kref             se_ref;
+       struct list_head        se_hash;        /* hash by sessionid */
+       struct list_head        se_perclnt;
+       u32                     se_flags;
+       struct nfs4_client      *se_client;     /* for expire_client */
+       struct nfs4_sessionid   se_sessionid;
+       struct nfsd4_channel_attrs se_fchannel;
+       struct nfsd4_channel_attrs se_bchannel;
+       struct nfsd4_slot       *se_slots[];    /* forward channel slots */
+};
+
+static inline void
+nfsd4_put_session(struct nfsd4_session *ses)
+{
+       extern void free_session(struct kref *kref);
+       kref_put(&ses->se_ref, free_session);
+}
+
+static inline void
+nfsd4_get_session(struct nfsd4_session *ses)
+{
+       kref_get(&ses->se_ref);
+}
+
+/* formatted contents of nfs4_sessionid */
+struct nfsd4_sessionid {
+       clientid_t      clientid;
+       u32             sequence;
+       u32             reserved;
+};
+
+#define HEXDIR_LEN     33 /* hex version of 16 byte md5 of cl_name plus '\0' */
+
+/*
+ * struct nfs4_client - one per client.  Clientids live here.
+ *     o Each nfs4_client is hashed by clientid.
+ *
+ *     o Each nfs4_clients is also hashed by name 
+ *       (the opaque quantity initially sent by the client to identify itself).
+ *       
+ *     o cl_perclient list is used to ensure no dangling stateowner references
+ *       when we expire the nfs4_client
+ */
+struct nfs4_client {
+       struct list_head        cl_idhash;      /* hash by cl_clientid.id */
+       struct list_head        cl_strhash;     /* hash by cl_name */
+       struct list_head        cl_openowners;
+       struct list_head        cl_delegations;
+       struct list_head        cl_lru;         /* tail queue */
+       struct xdr_netobj       cl_name;        /* id generated by client */
+       char                    cl_recdir[HEXDIR_LEN]; /* recovery dir */
+       nfs4_verifier           cl_verifier;    /* generated by client */
+       time_t                  cl_time;        /* time of last lease renewal */
+       struct sockaddr_storage cl_addr;        /* client ipaddress */
+       u32                     cl_flavor;      /* setclientid pseudoflavor */
+       char                    *cl_principal;  /* setclientid principal name */
+       struct svc_cred         cl_cred;        /* setclientid principal */
+       clientid_t              cl_clientid;    /* generated by server */
+       nfs4_verifier           cl_confirm;     /* generated by server */
+       struct nfs4_cb_conn     cl_cb_conn;     /* callback info */
+       atomic_t                cl_count;       /* ref count */
+       u32                     cl_firststate;  /* recovery dir creation */
+
+       /* for nfs41 */
+       struct list_head        cl_sessions;
+       struct nfsd4_clid_slot  cl_cs_slot;     /* create_session slot */
+       u32                     cl_exchange_flags;
+       struct nfs4_sessionid   cl_sessionid;
+
+       /* for nfs41 callbacks */
+       /* We currently support a single back channel with a single slot */
+       unsigned long           cl_cb_slot_busy;
+       u32                     cl_cb_seq_nr;
+       struct svc_xprt         *cl_cb_xprt;    /* 4.1 callback transport */
+       struct rpc_wait_queue   cl_cb_waitq;    /* backchannel callers may */
+                                               /* wait here for slots */
+};
+
+/* struct nfs4_client_reset
+ * one per old client. Populates reset_str_hashtbl. Filled from conf_id_hashtbl
+ * upon lease reset, or from upcall to state_daemon (to read in state
+ * from non-volitile storage) upon reboot.
+ */
+struct nfs4_client_reclaim {
+       struct list_head        cr_strhash;     /* hash by cr_name */
+       char                    cr_recdir[HEXDIR_LEN]; /* recover dir */
+};
+
+static inline void
+update_stateid(stateid_t *stateid)
+{
+       stateid->si_generation++;
+}
+
+/* A reasonable value for REPLAY_ISIZE was estimated as follows:  
+ * The OPEN response, typically the largest, requires 
+ *   4(status) + 8(stateid) + 20(changeinfo) + 4(rflags) +  8(verifier) + 
+ *   4(deleg. type) + 8(deleg. stateid) + 4(deleg. recall flag) + 
+ *   20(deleg. space limit) + ~32(deleg. ace) = 112 bytes 
+ */
+
+#define NFSD4_REPLAY_ISIZE       112 
+
+/*
+ * Replay buffer, where the result of the last seqid-mutating operation 
+ * is cached. 
+ */
+struct nfs4_replay {
+       __be32                  rp_status;
+       unsigned int            rp_buflen;
+       char                    *rp_buf;
+       unsigned                intrp_allocated;
+       struct knfsd_fh         rp_openfh;
+       char                    rp_ibuf[NFSD4_REPLAY_ISIZE];
+};
+
+/*
+* nfs4_stateowner can either be an open_owner, or a lock_owner
+*
+*    so_idhash:  stateid_hashtbl[] for open owner, lockstateid_hashtbl[]
+*         for lock_owner
+*    so_strhash: ownerstr_hashtbl[] for open_owner, lock_ownerstr_hashtbl[]
+*         for lock_owner
+*    so_perclient: nfs4_client->cl_perclient entry - used when nfs4_client
+*         struct is reaped.
+*    so_perfilestate: heads the list of nfs4_stateid (either open or lock) 
+*         and is used to ensure no dangling nfs4_stateid references when we 
+*         release a stateowner.
+*    so_perlockowner: (open) nfs4_stateid->st_perlockowner entry - used when
+*         close is called to reap associated byte-range locks
+*    so_close_lru: (open) stateowner is placed on this list instead of being
+*         reaped (when so_perfilestate is empty) to hold the last close replay.
+*         reaped by laundramat thread after lease period.
+*/
+struct nfs4_stateowner {
+       struct kref             so_ref;
+       struct list_head        so_idhash;   /* hash by so_id */
+       struct list_head        so_strhash;   /* hash by op_name */
+       struct list_head        so_perclient;
+       struct list_head        so_stateids;
+       struct list_head        so_perstateid; /* for lockowners only */
+       struct list_head        so_close_lru; /* tail queue */
+       time_t                  so_time; /* time of placement on so_close_lru */
+       int                     so_is_open_owner; /* 1=openowner,0=lockowner */
+       u32                     so_id;
+       struct nfs4_client *    so_client;
+       /* after increment in ENCODE_SEQID_OP_TAIL, represents the next
+        * sequence id expected from the client: */
+       u32                     so_seqid;
+       struct xdr_netobj       so_owner;     /* open owner name */
+       int                     so_confirmed; /* successful OPEN_CONFIRM? */
+       struct nfs4_replay      so_replay;
+};
+
+/*
+*  nfs4_file: a file opened by some number of (open) nfs4_stateowners.
+*    o fi_perfile list is used to search for conflicting 
+*      share_acces, share_deny on the file.
+*/
+struct nfs4_file {
+       atomic_t                fi_ref;
+       struct list_head        fi_hash;    /* hash by "struct inode *" */
+       struct list_head        fi_stateids;
+       struct list_head        fi_delegations;
+       struct inode            *fi_inode;
+       u32                     fi_id;      /* used with stateowner->so_id 
+                                            * for stateid_hashtbl hash */
+       bool                    fi_had_conflict;
+};
+
+/*
+* nfs4_stateid can either be an open stateid or (eventually) a lock stateid
+*
+* (open)nfs4_stateid: one per (open)nfs4_stateowner, nfs4_file
+*
+*      st_hash: stateid_hashtbl[] entry or lockstateid_hashtbl entry
+*      st_perfile: file_hashtbl[] entry.
+*      st_perfile_state: nfs4_stateowner->so_perfilestate
+*       st_perlockowner: (open stateid) list of lock nfs4_stateowners
+*      st_access_bmap: used only for open stateid
+*      st_deny_bmap: used only for open stateid
+*      st_openstp: open stateid lock stateid was derived from
+*
+* XXX: open stateids and lock stateids have diverged sufficiently that
+* we should consider defining separate structs for the two cases.
+*/
+
+struct nfs4_stateid {
+       struct list_head              st_hash; 
+       struct list_head              st_perfile;
+       struct list_head              st_perstateowner;
+       struct list_head              st_lockowners;
+       struct nfs4_stateowner      * st_stateowner;
+       struct nfs4_file            * st_file;
+       stateid_t                     st_stateid;
+       struct file                 * st_vfs_file;
+       unsigned long                 st_access_bmap;
+       unsigned long                 st_deny_bmap;
+       struct nfs4_stateid         * st_openstp;
+};
+
+/* flags for preprocess_seqid_op() */
+#define HAS_SESSION             0x00000001
+#define CONFIRM                 0x00000002
+#define OPEN_STATE              0x00000004
+#define LOCK_STATE              0x00000008
+#define RD_STATE               0x00000010
+#define WR_STATE               0x00000020
+#define CLOSE_STATE             0x00000040
+
+#define seqid_mutating_err(err)                       \
+       (((err) != nfserr_stale_clientid) &&    \
+       ((err) != nfserr_bad_seqid) &&          \
+       ((err) != nfserr_stale_stateid) &&      \
+       ((err) != nfserr_bad_stateid))
+
+struct nfsd4_compound_state;
+
+extern __be32 nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
+               stateid_t *stateid, int flags, struct file **filp);
+extern void nfs4_lock_state(void);
+extern void nfs4_unlock_state(void);
+extern int nfs4_in_grace(void);
+extern __be32 nfs4_check_open_reclaim(clientid_t *clid);
+extern void put_nfs4_client(struct nfs4_client *clp);
+extern void nfs4_free_stateowner(struct kref *kref);
+extern int set_callback_cred(void);
+extern void nfsd4_probe_callback(struct nfs4_client *clp);
+extern void nfsd4_cb_recall(struct nfs4_delegation *dp);
+extern void nfs4_put_delegation(struct nfs4_delegation *dp);
+extern __be32 nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname);
+extern void nfsd4_init_recdir(char *recdir_name);
+extern int nfsd4_recdir_load(void);
+extern void nfsd4_shutdown_recdir(void);
+extern int nfs4_client_to_reclaim(const char *name);
+extern int nfs4_has_reclaimed_state(const char *name, bool use_exchange_id);
+extern void nfsd4_recdir_purge_old(void);
+extern int nfsd4_create_clid_dir(struct nfs4_client *clp);
+extern void nfsd4_remove_clid_dir(struct nfs4_client *clp);
+
+static inline void
+nfs4_put_stateowner(struct nfs4_stateowner *so)
+{
+       kref_put(&so->so_ref, nfs4_free_stateowner);
+}
+
+static inline void
+nfs4_get_stateowner(struct nfs4_stateowner *so)
+{
+       kref_get(&so->so_ref);
+}
+
+#endif   /* NFSD4_STATE_H */
index e3e411e9fe4aabba0e7e14c1ca260b118a731198..3fc69dfd30917fe6a7bbfc1dea91d958ca4a12a6 100644 (file)
 
 #include <linux/seq_file.h>
 #include <linux/module.h>
-
 #include <linux/sunrpc/stats.h>
-#include <linux/nfsd/nfsd.h>
 #include <linux/nfsd/stats.h>
 
+#include "nfsd.h"
+
 struct nfsd_stats      nfsdstats;
 struct svc_stat                nfsd_svcstats = {
        .program        = &nfsd_program,
index 81ce108c114e35417bce7f771527a692be425ea7..04bdba12d21b371bf9a82fdfb2cb736b04a6f94f 100644 (file)
 #include <linux/fcntl.h>
 #include <linux/namei.h>
 #include <linux/delay.h>
-#include <linux/nfsd/nfsd.h>
-#ifdef CONFIG_NFSD_V3
-#include <linux/nfsd/xdr3.h>
-#endif /* CONFIG_NFSD_V3 */
 #include <linux/quotaops.h>
 #include <linux/fsnotify.h>
 #include <linux/posix_acl_xattr.h>
 #include <linux/xattr.h>
+#include <linux/jhash.h>
+#include <linux/ima.h>
+#include <asm/uaccess.h>
+
+#ifdef CONFIG_NFSD_V3
+#include "xdr3.h"
+#endif /* CONFIG_NFSD_V3 */
+
 #ifdef CONFIG_NFSD_V4
 #include <linux/nfs4_acl.h>
 #include <linux/nfsd_idmap.h>
 #endif /* CONFIG_NFSD_V4 */
-#include <linux/jhash.h>
-#include <linux/ima.h>
-#include "vfs.h"
 
-#include <asm/uaccess.h>
+#include "nfsd.h"
+#include "vfs.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_FILEOP
 
diff --git a/fs/nfsd/xdr.h b/fs/nfsd/xdr.h
new file mode 100644 (file)
index 0000000..235ee5c
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * linux/include/linux/nfsd/xdr.h
+ *
+ * XDR types for nfsd. This is mainly a typing exercise.
+ */
+
+#ifndef LINUX_NFSD_H
+#define LINUX_NFSD_H
+
+#include <linux/vfs.h>
+#include "nfsd.h"
+
+struct nfsd_fhandle {
+       struct svc_fh           fh;
+};
+
+struct nfsd_sattrargs {
+       struct svc_fh           fh;
+       struct iattr            attrs;
+};
+
+struct nfsd_diropargs {
+       struct svc_fh           fh;
+       char *                  name;
+       unsigned int            len;
+};
+
+struct nfsd_readargs {
+       struct svc_fh           fh;
+       __u32                   offset;
+       __u32                   count;
+       int                     vlen;
+};
+
+struct nfsd_writeargs {
+       svc_fh                  fh;
+       __u32                   offset;
+       int                     len;
+       int                     vlen;
+};
+
+struct nfsd_createargs {
+       struct svc_fh           fh;
+       char *                  name;
+       unsigned int            len;
+       struct iattr            attrs;
+};
+
+struct nfsd_renameargs {
+       struct svc_fh           ffh;
+       char *                  fname;
+       unsigned int            flen;
+       struct svc_fh           tfh;
+       char *                  tname;
+       unsigned int            tlen;
+};
+
+struct nfsd_readlinkargs {
+       struct svc_fh           fh;
+       char *                  buffer;
+};
+       
+struct nfsd_linkargs {
+       struct svc_fh           ffh;
+       struct svc_fh           tfh;
+       char *                  tname;
+       unsigned int            tlen;
+};
+
+struct nfsd_symlinkargs {
+       struct svc_fh           ffh;
+       char *                  fname;
+       unsigned int            flen;
+       char *                  tname;
+       unsigned int            tlen;
+       struct iattr            attrs;
+};
+
+struct nfsd_readdirargs {
+       struct svc_fh           fh;
+       __u32                   cookie;
+       __u32                   count;
+       __be32 *                buffer;
+};
+
+struct nfsd_attrstat {
+       struct svc_fh           fh;
+       struct kstat            stat;
+};
+
+struct nfsd_diropres  {
+       struct svc_fh           fh;
+       struct kstat            stat;
+};
+
+struct nfsd_readlinkres {
+       int                     len;
+};
+
+struct nfsd_readres {
+       struct svc_fh           fh;
+       unsigned long           count;
+       struct kstat            stat;
+};
+
+struct nfsd_readdirres {
+       int                     count;
+
+       struct readdir_cd       common;
+       __be32 *                buffer;
+       int                     buflen;
+       __be32 *                offset;
+};
+
+struct nfsd_statfsres {
+       struct kstatfs          stats;
+};
+
+/*
+ * Storage requirements for XDR arguments and results.
+ */
+union nfsd_xdrstore {
+       struct nfsd_sattrargs   sattr;
+       struct nfsd_diropargs   dirop;
+       struct nfsd_readargs    read;
+       struct nfsd_writeargs   write;
+       struct nfsd_createargs  create;
+       struct nfsd_renameargs  rename;
+       struct nfsd_linkargs    link;
+       struct nfsd_symlinkargs symlink;
+       struct nfsd_readdirargs readdir;
+};
+
+#define NFS2_SVC_XDRSIZE       sizeof(union nfsd_xdrstore)
+
+
+int nfssvc_decode_void(struct svc_rqst *, __be32 *, void *);
+int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
+int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_sattrargs *);
+int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_diropargs *);
+int nfssvc_decode_readargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_readargs *);
+int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_writeargs *);
+int nfssvc_decode_createargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_createargs *);
+int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_renameargs *);
+int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_readlinkargs *);
+int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_linkargs *);
+int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_symlinkargs *);
+int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *,
+                               struct nfsd_readdirargs *);
+int nfssvc_encode_void(struct svc_rqst *, __be32 *, void *);
+int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *);
+int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *);
+int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *);
+int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *);
+int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *);
+int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *);
+
+int nfssvc_encode_entry(void *, const char *name,
+                       int namlen, loff_t offset, u64 ino, unsigned int);
+
+int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
+
+/* Helper functions for NFSv2 ACL code */
+__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp);
+__be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp);
+
+#endif /* LINUX_NFSD_H */
diff --git a/fs/nfsd/xdr3.h b/fs/nfsd/xdr3.h
new file mode 100644 (file)
index 0000000..b330756
--- /dev/null
@@ -0,0 +1,346 @@
+/*
+ * linux/include/linux/nfsd/xdr3.h
+ *
+ * XDR types for NFSv3 in nfsd.
+ *
+ * Copyright (C) 1996-1998, Olaf Kirch <okir@monad.swb.de>
+ */
+
+#ifndef _LINUX_NFSD_XDR3_H
+#define _LINUX_NFSD_XDR3_H
+
+#include "xdr.h"
+
+struct nfsd3_sattrargs {
+       struct svc_fh           fh;
+       struct iattr            attrs;
+       int                     check_guard;
+       time_t                  guardtime;
+};
+
+struct nfsd3_diropargs {
+       struct svc_fh           fh;
+       char *                  name;
+       unsigned int            len;
+};
+
+struct nfsd3_accessargs {
+       struct svc_fh           fh;
+       unsigned int            access;
+};
+
+struct nfsd3_readargs {
+       struct svc_fh           fh;
+       __u64                   offset;
+       __u32                   count;
+       int                     vlen;
+};
+
+struct nfsd3_writeargs {
+       svc_fh                  fh;
+       __u64                   offset;
+       __u32                   count;
+       int                     stable;
+       __u32                   len;
+       int                     vlen;
+};
+
+struct nfsd3_createargs {
+       struct svc_fh           fh;
+       char *                  name;
+       unsigned int            len;
+       int                     createmode;
+       struct iattr            attrs;
+       __be32 *                verf;
+};
+
+struct nfsd3_mknodargs {
+       struct svc_fh           fh;
+       char *                  name;
+       unsigned int            len;
+       __u32                   ftype;
+       __u32                   major, minor;
+       struct iattr            attrs;
+};
+
+struct nfsd3_renameargs {
+       struct svc_fh           ffh;
+       char *                  fname;
+       unsigned int            flen;
+       struct svc_fh           tfh;
+       char *                  tname;
+       unsigned int            tlen;
+};
+
+struct nfsd3_readlinkargs {
+       struct svc_fh           fh;
+       char *                  buffer;
+};
+
+struct nfsd3_linkargs {
+       struct svc_fh           ffh;
+       struct svc_fh           tfh;
+       char *                  tname;
+       unsigned int            tlen;
+};
+
+struct nfsd3_symlinkargs {
+       struct svc_fh           ffh;
+       char *                  fname;
+       unsigned int            flen;
+       char *                  tname;
+       unsigned int            tlen;
+       struct iattr            attrs;
+};
+
+struct nfsd3_readdirargs {
+       struct svc_fh           fh;
+       __u64                   cookie;
+       __u32                   dircount;
+       __u32                   count;
+       __be32 *                verf;
+       __be32 *                buffer;
+};
+
+struct nfsd3_commitargs {
+       struct svc_fh           fh;
+       __u64                   offset;
+       __u32                   count;
+};
+
+struct nfsd3_getaclargs {
+       struct svc_fh           fh;
+       int                     mask;
+};
+
+struct posix_acl;
+struct nfsd3_setaclargs {
+       struct svc_fh           fh;
+       int                     mask;
+       struct posix_acl        *acl_access;
+       struct posix_acl        *acl_default;
+};
+
+struct nfsd3_attrstat {
+       __be32                  status;
+       struct svc_fh           fh;
+       struct kstat            stat;
+};
+
+/* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */
+struct nfsd3_diropres  {
+       __be32                  status;
+       struct svc_fh           dirfh;
+       struct svc_fh           fh;
+};
+
+struct nfsd3_accessres {
+       __be32                  status;
+       struct svc_fh           fh;
+       __u32                   access;
+};
+
+struct nfsd3_readlinkres {
+       __be32                  status;
+       struct svc_fh           fh;
+       __u32                   len;
+};
+
+struct nfsd3_readres {
+       __be32                  status;
+       struct svc_fh           fh;
+       unsigned long           count;
+       int                     eof;
+};
+
+struct nfsd3_writeres {
+       __be32                  status;
+       struct svc_fh           fh;
+       unsigned long           count;
+       int                     committed;
+};
+
+struct nfsd3_renameres {
+       __be32                  status;
+       struct svc_fh           ffh;
+       struct svc_fh           tfh;
+};
+
+struct nfsd3_linkres {
+       __be32                  status;
+       struct svc_fh           tfh;
+       struct svc_fh           fh;
+};
+
+struct nfsd3_readdirres {
+       __be32                  status;
+       struct svc_fh           fh;
+       int                     count;
+       __be32                  verf[2];
+
+       struct readdir_cd       common;
+       __be32 *                buffer;
+       int                     buflen;
+       __be32 *                offset;
+       __be32 *                offset1;
+       struct svc_rqst *       rqstp;
+
+};
+
+struct nfsd3_fsstatres {
+       __be32                  status;
+       struct kstatfs          stats;
+       __u32                   invarsec;
+};
+
+struct nfsd3_fsinfores {
+       __be32                  status;
+       __u32                   f_rtmax;
+       __u32                   f_rtpref;
+       __u32                   f_rtmult;
+       __u32                   f_wtmax;
+       __u32                   f_wtpref;
+       __u32                   f_wtmult;
+       __u32                   f_dtpref;
+       __u64                   f_maxfilesize;
+       __u32                   f_properties;
+};
+
+struct nfsd3_pathconfres {
+       __be32                  status;
+       __u32                   p_link_max;
+       __u32                   p_name_max;
+       __u32                   p_no_trunc;
+       __u32                   p_chown_restricted;
+       __u32                   p_case_insensitive;
+       __u32                   p_case_preserving;
+};
+
+struct nfsd3_commitres {
+       __be32                  status;
+       struct svc_fh           fh;
+};
+
+struct nfsd3_getaclres {
+       __be32                  status;
+       struct svc_fh           fh;
+       int                     mask;
+       struct posix_acl        *acl_access;
+       struct posix_acl        *acl_default;
+};
+
+/* dummy type for release */
+struct nfsd3_fhandle_pair {
+       __u32                   dummy;
+       struct svc_fh           fh1;
+       struct svc_fh           fh2;
+};
+
+/*
+ * Storage requirements for XDR arguments and results.
+ */
+union nfsd3_xdrstore {
+       struct nfsd3_sattrargs          sattrargs;
+       struct nfsd3_diropargs          diropargs;
+       struct nfsd3_readargs           readargs;
+       struct nfsd3_writeargs          writeargs;
+       struct nfsd3_createargs         createargs;
+       struct nfsd3_renameargs         renameargs;
+       struct nfsd3_linkargs           linkargs;
+       struct nfsd3_symlinkargs        symlinkargs;
+       struct nfsd3_readdirargs        readdirargs;
+       struct nfsd3_diropres           diropres;
+       struct nfsd3_accessres          accessres;
+       struct nfsd3_readlinkres        readlinkres;
+       struct nfsd3_readres            readres;
+       struct nfsd3_writeres           writeres;
+       struct nfsd3_renameres          renameres;
+       struct nfsd3_linkres            linkres;
+       struct nfsd3_readdirres         readdirres;
+       struct nfsd3_fsstatres          fsstatres;
+       struct nfsd3_fsinfores          fsinfores;
+       struct nfsd3_pathconfres        pathconfres;
+       struct nfsd3_commitres          commitres;
+       struct nfsd3_getaclres          getaclres;
+};
+
+#define NFS3_SVC_XDRSIZE               sizeof(union nfsd3_xdrstore)
+
+int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
+int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_sattrargs *);
+int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_diropargs *);
+int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_accessargs *);
+int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_readargs *);
+int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_writeargs *);
+int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_createargs *);
+int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_createargs *);
+int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_mknodargs *);
+int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_renameargs *);
+int nfs3svc_decode_readlinkargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_readlinkargs *);
+int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_linkargs *);
+int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_symlinkargs *);
+int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_readdirargs *);
+int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_readdirargs *);
+int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *,
+                               struct nfsd3_commitargs *);
+int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
+int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *,
+                               struct nfsd3_attrstat *);
+int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *,
+                               struct nfsd3_attrstat *);
+int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_diropres *);
+int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_accessres *);
+int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_readlinkres *);
+int nfs3svc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd3_readres *);
+int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *, struct nfsd3_writeres *);
+int nfs3svc_encode_createres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_diropres *);
+int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_renameres *);
+int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_linkres *);
+int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_readdirres *);
+int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_fsstatres *);
+int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *,
+                               struct nfsd3_fsinfores *);
+int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_pathconfres *);
+int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *,
+                               struct nfsd3_commitres *);
+
+int nfs3svc_release_fhandle(struct svc_rqst *, __be32 *,
+                               struct nfsd3_attrstat *);
+int nfs3svc_release_fhandle2(struct svc_rqst *, __be32 *,
+                               struct nfsd3_fhandle_pair *);
+int nfs3svc_encode_entry(void *, const char *name,
+                               int namlen, loff_t offset, u64 ino,
+                               unsigned int);
+int nfs3svc_encode_entry_plus(void *, const char *name,
+                               int namlen, loff_t offset, u64 ino,
+                               unsigned int);
+/* Helper functions for NFSv3 ACL code */
+__be32 *nfs3svc_encode_post_op_attr(struct svc_rqst *rqstp, __be32 *p,
+                               struct svc_fh *fhp);
+__be32 *nfs3svc_decode_fh(__be32 *p, struct svc_fh *fhp);
+
+
+#endif /* _LINUX_NFSD_XDR3_H */
diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h
new file mode 100644 (file)
index 0000000..83202a1
--- /dev/null
@@ -0,0 +1,564 @@
+/*
+ *  include/linux/nfsd/xdr4.h
+ *
+ *  Server-side types for NFSv4.
+ *
+ *  Copyright (c) 2002 The Regents of the University of Michigan.
+ *  All rights reserved.
+ *
+ *  Kendrick Smith <kmsmith@umich.edu>
+ *  Andy Adamson   <andros@umich.edu>
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *  1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *  2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *  3. Neither the name of the University nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef _LINUX_NFSD_XDR4_H
+#define _LINUX_NFSD_XDR4_H
+
+#include "state.h"
+#include "nfsd.h"
+
+#define NFSD4_MAX_TAGLEN       128
+#define XDR_LEN(n)                     (((n) + 3) & ~3)
+
+struct nfsd4_compound_state {
+       struct svc_fh           current_fh;
+       struct svc_fh           save_fh;
+       struct nfs4_stateowner  *replay_owner;
+       /* For sessions DRC */
+       struct nfsd4_session    *session;
+       struct nfsd4_slot       *slot;
+       __be32                  *datap;
+       size_t                  iovlen;
+       u32                     minorversion;
+       u32                     status;
+};
+
+static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
+{
+       return cs->slot != NULL;
+}
+
+struct nfsd4_change_info {
+       u32             atomic;
+       bool            change_supported;
+       u32             before_ctime_sec;
+       u32             before_ctime_nsec;
+       u64             before_change;
+       u32             after_ctime_sec;
+       u32             after_ctime_nsec;
+       u64             after_change;
+};
+
+struct nfsd4_access {
+       u32             ac_req_access;      /* request */
+       u32             ac_supported;       /* response */
+       u32             ac_resp_access;     /* response */
+};
+
+struct nfsd4_close {
+       u32             cl_seqid;           /* request */
+       stateid_t       cl_stateid;         /* request+response */
+       struct nfs4_stateowner * cl_stateowner; /* response */
+};
+
+struct nfsd4_commit {
+       u64             co_offset;          /* request */
+       u32             co_count;           /* request */
+       nfs4_verifier   co_verf;            /* response */
+};
+
+struct nfsd4_create {
+       u32             cr_namelen;         /* request */
+       char *          cr_name;            /* request */
+       u32             cr_type;            /* request */
+       union {                             /* request */
+               struct {
+                       u32 namelen;
+                       char *name;
+               } link;   /* NF4LNK */
+               struct {
+                       u32 specdata1;
+                       u32 specdata2;
+               } dev;    /* NF4BLK, NF4CHR */
+       } u;
+       u32             cr_bmval[3];        /* request */
+       struct iattr    cr_iattr;           /* request */
+       struct nfsd4_change_info  cr_cinfo; /* response */
+       struct nfs4_acl *cr_acl;
+};
+#define cr_linklen     u.link.namelen
+#define cr_linkname    u.link.name
+#define cr_specdata1   u.dev.specdata1
+#define cr_specdata2   u.dev.specdata2
+
+struct nfsd4_delegreturn {
+       stateid_t       dr_stateid;
+};
+
+struct nfsd4_getattr {
+       u32             ga_bmval[3];        /* request */
+       struct svc_fh   *ga_fhp;            /* response */
+};
+
+struct nfsd4_link {
+       u32             li_namelen;         /* request */
+       char *          li_name;            /* request */
+       struct nfsd4_change_info  li_cinfo; /* response */
+};
+
+struct nfsd4_lock_denied {
+       clientid_t      ld_clientid;
+       struct nfs4_stateowner   *ld_sop;
+       u64             ld_start;
+       u64             ld_length;
+       u32             ld_type;
+};
+
+struct nfsd4_lock {
+       /* request */
+       u32             lk_type;
+       u32             lk_reclaim;         /* boolean */
+       u64             lk_offset;
+       u64             lk_length;
+       u32             lk_is_new;
+       union {
+               struct {
+                       u32             open_seqid;
+                       stateid_t       open_stateid;
+                       u32             lock_seqid;
+                       clientid_t      clientid;
+                       struct xdr_netobj owner;
+               } new;
+               struct {
+                       stateid_t       lock_stateid;
+                       u32             lock_seqid;
+               } old;
+       } v;
+
+       /* response */
+       union {
+               struct {
+                       stateid_t               stateid;
+               } ok;
+               struct nfsd4_lock_denied        denied;
+       } u;
+       /* The lk_replay_owner is the open owner in the open_to_lock_owner
+        * case and the lock owner otherwise: */
+       struct nfs4_stateowner *lk_replay_owner;
+};
+#define lk_new_open_seqid       v.new.open_seqid
+#define lk_new_open_stateid     v.new.open_stateid
+#define lk_new_lock_seqid       v.new.lock_seqid
+#define lk_new_clientid         v.new.clientid
+#define lk_new_owner            v.new.owner
+#define lk_old_lock_stateid     v.old.lock_stateid
+#define lk_old_lock_seqid       v.old.lock_seqid
+
+#define lk_rflags       u.ok.rflags
+#define lk_resp_stateid u.ok.stateid
+#define lk_denied       u.denied
+
+
+struct nfsd4_lockt {
+       u32                             lt_type;
+       clientid_t                      lt_clientid;
+       struct xdr_netobj               lt_owner;
+       u64                             lt_offset;
+       u64                             lt_length;
+       struct nfs4_stateowner *        lt_stateowner;
+       struct nfsd4_lock_denied        lt_denied;
+};
+
+struct nfsd4_locku {
+       u32             lu_type;
+       u32             lu_seqid;
+       stateid_t       lu_stateid;
+       u64             lu_offset;
+       u64             lu_length;
+       struct nfs4_stateowner  *lu_stateowner;
+};
+
+
+struct nfsd4_lookup {
+       u32             lo_len;             /* request */
+       char *          lo_name;            /* request */
+};
+
+struct nfsd4_putfh {
+       u32             pf_fhlen;           /* request */
+       char            *pf_fhval;          /* request */
+};
+
+struct nfsd4_open {
+       u32             op_claim_type;      /* request */
+       struct xdr_netobj op_fname;         /* request - everything but CLAIM_PREV */
+       u32             op_delegate_type;   /* request - CLAIM_PREV only */
+       stateid_t       op_delegate_stateid; /* request - response */
+       u32             op_create;          /* request */
+       u32             op_createmode;      /* request */
+       u32             op_bmval[3];        /* request */
+       struct iattr    iattr;              /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */
+       nfs4_verifier   verf;               /* EXCLUSIVE4 */
+       clientid_t      op_clientid;        /* request */
+       struct xdr_netobj op_owner;           /* request */
+       u32             op_seqid;           /* request */
+       u32             op_share_access;    /* request */
+       u32             op_share_deny;      /* request */
+       stateid_t       op_stateid;         /* response */
+       u32             op_recall;          /* recall */
+       struct nfsd4_change_info  op_cinfo; /* response */
+       u32             op_rflags;          /* response */
+       int             op_truncate;        /* used during processing */
+       struct nfs4_stateowner *op_stateowner; /* used during processing */
+       struct nfs4_acl *op_acl;
+};
+#define op_iattr       iattr
+#define op_verf                verf
+
+struct nfsd4_open_confirm {
+       stateid_t       oc_req_stateid          /* request */;
+       u32             oc_seqid                /* request */;
+       stateid_t       oc_resp_stateid         /* response */;
+       struct nfs4_stateowner * oc_stateowner; /* response */
+};
+
+struct nfsd4_open_downgrade {
+       stateid_t       od_stateid;
+       u32             od_seqid;
+       u32             od_share_access;
+       u32             od_share_deny;
+       struct nfs4_stateowner *od_stateowner;
+};
+
+
+struct nfsd4_read {
+       stateid_t       rd_stateid;         /* request */
+       u64             rd_offset;          /* request */
+       u32             rd_length;          /* request */
+       int             rd_vlen;
+       struct file     *rd_filp;
+       
+       struct svc_rqst *rd_rqstp;          /* response */
+       struct svc_fh * rd_fhp;             /* response */
+};
+
+struct nfsd4_readdir {
+       u64             rd_cookie;          /* request */
+       nfs4_verifier   rd_verf;            /* request */
+       u32             rd_dircount;        /* request */
+       u32             rd_maxcount;        /* request */
+       u32             rd_bmval[3];        /* request */
+       struct svc_rqst *rd_rqstp;          /* response */
+       struct svc_fh * rd_fhp;             /* response */
+
+       struct readdir_cd       common;
+       __be32 *                buffer;
+       int                     buflen;
+       __be32 *                offset;
+};
+
+struct nfsd4_release_lockowner {
+       clientid_t        rl_clientid;
+       struct xdr_netobj rl_owner;
+};
+struct nfsd4_readlink {
+       struct svc_rqst *rl_rqstp;          /* request */
+       struct svc_fh * rl_fhp;             /* request */
+};
+
+struct nfsd4_remove {
+       u32             rm_namelen;         /* request */
+       char *          rm_name;            /* request */
+       struct nfsd4_change_info  rm_cinfo; /* response */
+};
+
+struct nfsd4_rename {
+       u32             rn_snamelen;        /* request */
+       char *          rn_sname;           /* request */
+       u32             rn_tnamelen;        /* request */
+       char *          rn_tname;           /* request */
+       struct nfsd4_change_info  rn_sinfo; /* response */
+       struct nfsd4_change_info  rn_tinfo; /* response */
+};
+
+struct nfsd4_secinfo {
+       u32 si_namelen;                                 /* request */
+       char *si_name;                                  /* request */
+       struct svc_export *si_exp;                      /* response */
+};
+
+struct nfsd4_setattr {
+       stateid_t       sa_stateid;         /* request */
+       u32             sa_bmval[3];        /* request */
+       struct iattr    sa_iattr;           /* request */
+       struct nfs4_acl *sa_acl;
+};
+
+struct nfsd4_setclientid {
+       nfs4_verifier   se_verf;            /* request */
+       u32             se_namelen;         /* request */
+       char *          se_name;            /* request */
+       u32             se_callback_prog;   /* request */
+       u32             se_callback_netid_len;  /* request */
+       char *          se_callback_netid_val;  /* request */
+       u32             se_callback_addr_len;   /* request */
+       char *          se_callback_addr_val;   /* request */
+       u32             se_callback_ident;  /* request */
+       clientid_t      se_clientid;        /* response */
+       nfs4_verifier   se_confirm;         /* response */
+};
+
+struct nfsd4_setclientid_confirm {
+       clientid_t      sc_clientid;
+       nfs4_verifier   sc_confirm;
+};
+
+/* also used for NVERIFY */
+struct nfsd4_verify {
+       u32             ve_bmval[3];        /* request */
+       u32             ve_attrlen;         /* request */
+       char *          ve_attrval;         /* request */
+};
+
+struct nfsd4_write {
+       stateid_t       wr_stateid;         /* request */
+       u64             wr_offset;          /* request */
+       u32             wr_stable_how;      /* request */
+       u32             wr_buflen;          /* request */
+       int             wr_vlen;
+
+       u32             wr_bytes_written;   /* response */
+       u32             wr_how_written;     /* response */
+       nfs4_verifier   wr_verifier;        /* response */
+};
+
+struct nfsd4_exchange_id {
+       nfs4_verifier   verifier;
+       struct xdr_netobj clname;
+       u32             flags;
+       clientid_t      clientid;
+       u32             seqid;
+       int             spa_how;
+};
+
+struct nfsd4_sequence {
+       struct nfs4_sessionid   sessionid;              /* request/response */
+       u32                     seqid;                  /* request/response */
+       u32                     slotid;                 /* request/response */
+       u32                     maxslots;               /* request/response */
+       u32                     cachethis;              /* request */
+#if 0
+       u32                     target_maxslots;        /* response */
+       u32                     status_flags;           /* response */
+#endif /* not yet */
+};
+
+struct nfsd4_destroy_session {
+       struct nfs4_sessionid   sessionid;
+};
+
+struct nfsd4_op {
+       int                                     opnum;
+       __be32                                  status;
+       union {
+               struct nfsd4_access             access;
+               struct nfsd4_close              close;
+               struct nfsd4_commit             commit;
+               struct nfsd4_create             create;
+               struct nfsd4_delegreturn        delegreturn;
+               struct nfsd4_getattr            getattr;
+               struct svc_fh *                 getfh;
+               struct nfsd4_link               link;
+               struct nfsd4_lock               lock;
+               struct nfsd4_lockt              lockt;
+               struct nfsd4_locku              locku;
+               struct nfsd4_lookup             lookup;
+               struct nfsd4_verify             nverify;
+               struct nfsd4_open               open;
+               struct nfsd4_open_confirm       open_confirm;
+               struct nfsd4_open_downgrade     open_downgrade;
+               struct nfsd4_putfh              putfh;
+               struct nfsd4_read               read;
+               struct nfsd4_readdir            readdir;
+               struct nfsd4_readlink           readlink;
+               struct nfsd4_remove             remove;
+               struct nfsd4_rename             rename;
+               clientid_t                      renew;
+               struct nfsd4_secinfo            secinfo;
+               struct nfsd4_setattr            setattr;
+               struct nfsd4_setclientid        setclientid;
+               struct nfsd4_setclientid_confirm setclientid_confirm;
+               struct nfsd4_verify             verify;
+               struct nfsd4_write              write;
+               struct nfsd4_release_lockowner  release_lockowner;
+
+               /* NFSv4.1 */
+               struct nfsd4_exchange_id        exchange_id;
+               struct nfsd4_create_session     create_session;
+               struct nfsd4_destroy_session    destroy_session;
+               struct nfsd4_sequence           sequence;
+       } u;
+       struct nfs4_replay *                    replay;
+};
+
+struct nfsd4_compoundargs {
+       /* scratch variables for XDR decode */
+       __be32 *                        p;
+       __be32 *                        end;
+       struct page **                  pagelist;
+       int                             pagelen;
+       __be32                          tmp[8];
+       __be32 *                        tmpp;
+       struct tmpbuf {
+               struct tmpbuf *next;
+               void (*release)(const void *);
+               void *buf;
+       }                               *to_free;
+
+       struct svc_rqst                 *rqstp;
+
+       u32                             taglen;
+       char *                          tag;
+       u32                             minorversion;
+       u32                             opcnt;
+       struct nfsd4_op                 *ops;
+       struct nfsd4_op                 iops[8];
+};
+
+struct nfsd4_compoundres {
+       /* scratch variables for XDR encode */
+       __be32 *                        p;
+       __be32 *                        end;
+       struct xdr_buf *                xbuf;
+       struct svc_rqst *               rqstp;
+
+       u32                             taglen;
+       char *                          tag;
+       u32                             opcnt;
+       __be32 *                        tagp; /* tag, opcount encode location */
+       struct nfsd4_compound_state     cstate;
+};
+
+static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
+{
+       struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
+       return resp->opcnt == 1 && args->ops[0].opnum == OP_SEQUENCE;
+}
+
+static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
+{
+       return !resp->cstate.slot->sl_cachethis || nfsd4_is_solo_sequence(resp);
+}
+
+#define NFS4_SVC_XDRSIZE               sizeof(struct nfsd4_compoundargs)
+
+static inline void
+set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
+{
+       BUG_ON(!fhp->fh_pre_saved || !fhp->fh_post_saved);
+       cinfo->atomic = 1;
+       cinfo->change_supported = IS_I_VERSION(fhp->fh_dentry->d_inode);
+       if (cinfo->change_supported) {
+               cinfo->before_change = fhp->fh_pre_change;
+               cinfo->after_change = fhp->fh_post_change;
+       } else {
+               cinfo->before_ctime_sec = fhp->fh_pre_ctime.tv_sec;
+               cinfo->before_ctime_nsec = fhp->fh_pre_ctime.tv_nsec;
+               cinfo->after_ctime_sec = fhp->fh_post_attr.ctime.tv_sec;
+               cinfo->after_ctime_nsec = fhp->fh_post_attr.ctime.tv_nsec;
+       }
+}
+
+int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
+int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *,
+               struct nfsd4_compoundargs *);
+int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *,
+               struct nfsd4_compoundres *);
+void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *);
+void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op);
+__be32 nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
+                      struct dentry *dentry, __be32 *buffer, int *countp,
+                      u32 *bmval, struct svc_rqst *, int ignore_crossmnt);
+extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *,
+               struct nfsd4_setclientid *setclid);
+extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *,
+               struct nfsd4_setclientid_confirm *setclientid_confirm);
+extern void nfsd4_store_cache_entry(struct nfsd4_compoundres *resp);
+extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
+               struct nfsd4_sequence *seq);
+extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *,
+struct nfsd4_exchange_id *);
+               extern __be32 nfsd4_create_session(struct svc_rqst *,
+               struct nfsd4_compound_state *,
+               struct nfsd4_create_session *);
+extern __be32 nfsd4_sequence(struct svc_rqst *,
+               struct nfsd4_compound_state *,
+               struct nfsd4_sequence *);
+extern __be32 nfsd4_destroy_session(struct svc_rqst *,
+               struct nfsd4_compound_state *,
+               struct nfsd4_destroy_session *);
+extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
+               struct nfsd4_open *open);
+extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
+               struct svc_fh *current_fh, struct nfsd4_open *open);
+extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *, struct nfsd4_open_confirm *oc);
+extern __be32 nfsd4_close(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *,
+               struct nfsd4_close *close);
+extern __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *,
+               struct nfsd4_open_downgrade *od);
+extern __be32 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *,
+               struct nfsd4_lock *lock);
+extern __be32 nfsd4_lockt(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *,
+               struct nfsd4_lockt *lockt);
+extern __be32 nfsd4_locku(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *,
+               struct nfsd4_locku *locku);
+extern __be32
+nfsd4_release_lockowner(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *,
+               struct nfsd4_release_lockowner *rlockowner);
+extern void nfsd4_release_compoundargs(struct nfsd4_compoundargs *);
+extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp,
+               struct nfsd4_compound_state *, struct nfsd4_delegreturn *dr);
+extern __be32 nfsd4_renew(struct svc_rqst *rqstp,
+                         struct nfsd4_compound_state *, clientid_t *clid);
+#endif
+
+/*
+ * Local variables:
+ *  c-basic-offset: 8
+ * End:
+ */
diff --git a/include/linux/nfsd/cache.h b/include/linux/nfsd/cache.h
deleted file mode 100644 (file)
index a165425..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * include/linux/nfsd/cache.h
- *
- * Request reply cache. This was heavily inspired by the
- * implementation in 4.3BSD/4.4BSD.
- *
- * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
- */
-
-#ifndef NFSCACHE_H
-#define NFSCACHE_H
-
-#include <linux/sunrpc/svc.h>
-
-/*
- * Representation of a reply cache entry.
- */
-struct svc_cacherep {
-       struct hlist_node       c_hash;
-       struct list_head        c_lru;
-
-       unsigned char           c_state,        /* unused, inprog, done */
-                               c_type,         /* status, buffer */
-                               c_secure : 1;   /* req came from port < 1024 */
-       struct sockaddr_in      c_addr;
-       __be32                  c_xid;
-       u32                     c_prot;
-       u32                     c_proc;
-       u32                     c_vers;
-       unsigned long           c_timestamp;
-       union {
-               struct kvec     u_vec;
-               __be32          u_status;
-       }                       c_u;
-};
-
-#define c_replvec              c_u.u_vec
-#define c_replstat             c_u.u_status
-
-/* cache entry states */
-enum {
-       RC_UNUSED,
-       RC_INPROG,
-       RC_DONE
-};
-
-/* return values */
-enum {
-       RC_DROPIT,
-       RC_REPLY,
-       RC_DOIT,
-       RC_INTR
-};
-
-/*
- * Cache types.
- * We may want to add more types one day, e.g. for diropres and
- * attrstat replies. Using cache entries with fixed length instead
- * of buffer pointers may be more efficient.
- */
-enum {
-       RC_NOCACHE,
-       RC_REPLSTAT,
-       RC_REPLBUFF,
-};
-
-/*
- * If requests are retransmitted within this interval, they're dropped.
- */
-#define RC_DELAY               (HZ/5)
-
-int    nfsd_reply_cache_init(void);
-void   nfsd_reply_cache_shutdown(void);
-int    nfsd_cache_lookup(struct svc_rqst *, int);
-void   nfsd_cache_update(struct svc_rqst *, int, __be32 *);
-
-#ifdef CONFIG_NFSD_V4
-void   nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp);
-#else  /* CONFIG_NFSD_V4 */
-static inline void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp)
-{
-}
-#endif /* CONFIG_NFSD_V4 */
-
-#endif /* NFSCACHE_H */
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h
deleted file mode 100644 (file)
index 74f67c2..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * linux/include/linux/nfsd/nfsd.h
- *
- * Hodge-podge collection of knfsd-related stuff.
- * I will sort this out later.
- *
- * Copyright (C) 1995-1997 Olaf Kirch <okir@monad.swb.de>
- */
-
-#ifndef LINUX_NFSD_NFSD_H
-#define LINUX_NFSD_NFSD_H
-
-#include <linux/types.h>
-#include <linux/mount.h>
-
-#include <linux/nfsd/debug.h>
-#include <linux/nfsd/export.h>
-#include <linux/nfsd/stats.h>
-/*
- * nfsd version
- */
-#define NFSD_SUPPORTED_MINOR_VERSION   1
-
-struct readdir_cd {
-       __be32                  err;    /* 0, nfserr, or nfserr_eof */
-};
-
-
-extern struct svc_program      nfsd_program;
-extern struct svc_version      nfsd_version2, nfsd_version3,
-                               nfsd_version4;
-extern u32                     nfsd_supported_minorversion;
-extern struct mutex            nfsd_mutex;
-extern struct svc_serv         *nfsd_serv;
-extern spinlock_t              nfsd_drc_lock;
-extern unsigned int            nfsd_drc_max_mem;
-extern unsigned int            nfsd_drc_mem_used;
-
-extern const struct seq_operations nfs_exports_op;
-
-/*
- * Function prototypes.
- */
-int            nfsd_svc(unsigned short port, int nrservs);
-int            nfsd_dispatch(struct svc_rqst *rqstp, __be32 *statp);
-
-int            nfsd_nrthreads(void);
-int            nfsd_nrpools(void);
-int            nfsd_get_nrthreads(int n, int *);
-int            nfsd_set_nrthreads(int n, int *);
-
-#if defined(CONFIG_NFSD_V2_ACL) || defined(CONFIG_NFSD_V3_ACL)
-#ifdef CONFIG_NFSD_V2_ACL
-extern struct svc_version nfsd_acl_version2;
-#else
-#define nfsd_acl_version2 NULL
-#endif
-#ifdef CONFIG_NFSD_V3_ACL
-extern struct svc_version nfsd_acl_version3;
-#else
-#define nfsd_acl_version3 NULL
-#endif
-#endif
-
-enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL };
-int nfsd_vers(int vers, enum vers_op change);
-int nfsd_minorversion(u32 minorversion, enum vers_op change);
-void nfsd_reset_versions(void);
-int nfsd_create_serv(void);
-
-extern int nfsd_max_blksize;
-
-/* 
- * NFSv4 State
- */
-#ifdef CONFIG_NFSD_V4
-extern unsigned int max_delegations;
-int nfs4_state_init(void);
-void nfsd4_free_slabs(void);
-int nfs4_state_start(void);
-void nfs4_state_shutdown(void);
-time_t nfs4_lease_time(void);
-void nfs4_reset_lease(time_t leasetime);
-int nfs4_reset_recoverydir(char *recdir);
-#else
-static inline int nfs4_state_init(void) { return 0; }
-static inline void nfsd4_free_slabs(void) { }
-static inline int nfs4_state_start(void) { return 0; }
-static inline void nfs4_state_shutdown(void) { }
-static inline time_t nfs4_lease_time(void) { return 0; }
-static inline void nfs4_reset_lease(time_t leasetime) { }
-static inline int nfs4_reset_recoverydir(char *recdir) { return 0; }
-#endif
-
-/*
- * lockd binding
- */
-void           nfsd_lockd_init(void);
-void           nfsd_lockd_shutdown(void);
-
-
-/*
- * These macros provide pre-xdr'ed values for faster operation.
- */
-#define        nfs_ok                  cpu_to_be32(NFS_OK)
-#define        nfserr_perm             cpu_to_be32(NFSERR_PERM)
-#define        nfserr_noent            cpu_to_be32(NFSERR_NOENT)
-#define        nfserr_io               cpu_to_be32(NFSERR_IO)
-#define        nfserr_nxio             cpu_to_be32(NFSERR_NXIO)
-#define        nfserr_eagain           cpu_to_be32(NFSERR_EAGAIN)
-#define        nfserr_acces            cpu_to_be32(NFSERR_ACCES)
-#define        nfserr_exist            cpu_to_be32(NFSERR_EXIST)
-#define        nfserr_xdev             cpu_to_be32(NFSERR_XDEV)
-#define        nfserr_nodev            cpu_to_be32(NFSERR_NODEV)
-#define        nfserr_notdir           cpu_to_be32(NFSERR_NOTDIR)
-#define        nfserr_isdir            cpu_to_be32(NFSERR_ISDIR)
-#define        nfserr_inval            cpu_to_be32(NFSERR_INVAL)
-#define        nfserr_fbig             cpu_to_be32(NFSERR_FBIG)
-#define        nfserr_nospc            cpu_to_be32(NFSERR_NOSPC)
-#define        nfserr_rofs             cpu_to_be32(NFSERR_ROFS)
-#define        nfserr_mlink            cpu_to_be32(NFSERR_MLINK)
-#define        nfserr_opnotsupp        cpu_to_be32(NFSERR_OPNOTSUPP)
-#define        nfserr_nametoolong      cpu_to_be32(NFSERR_NAMETOOLONG)
-#define        nfserr_notempty         cpu_to_be32(NFSERR_NOTEMPTY)
-#define        nfserr_dquot            cpu_to_be32(NFSERR_DQUOT)
-#define        nfserr_stale            cpu_to_be32(NFSERR_STALE)
-#define        nfserr_remote           cpu_to_be32(NFSERR_REMOTE)
-#define        nfserr_wflush           cpu_to_be32(NFSERR_WFLUSH)
-#define        nfserr_badhandle        cpu_to_be32(NFSERR_BADHANDLE)
-#define        nfserr_notsync          cpu_to_be32(NFSERR_NOT_SYNC)
-#define        nfserr_badcookie        cpu_to_be32(NFSERR_BAD_COOKIE)
-#define        nfserr_notsupp          cpu_to_be32(NFSERR_NOTSUPP)
-#define        nfserr_toosmall         cpu_to_be32(NFSERR_TOOSMALL)
-#define        nfserr_serverfault      cpu_to_be32(NFSERR_SERVERFAULT)
-#define        nfserr_badtype          cpu_to_be32(NFSERR_BADTYPE)
-#define        nfserr_jukebox          cpu_to_be32(NFSERR_JUKEBOX)
-#define        nfserr_denied           cpu_to_be32(NFSERR_DENIED)
-#define        nfserr_deadlock         cpu_to_be32(NFSERR_DEADLOCK)
-#define nfserr_expired          cpu_to_be32(NFSERR_EXPIRED)
-#define        nfserr_bad_cookie       cpu_to_be32(NFSERR_BAD_COOKIE)
-#define        nfserr_same             cpu_to_be32(NFSERR_SAME)
-#define        nfserr_clid_inuse       cpu_to_be32(NFSERR_CLID_INUSE)
-#define        nfserr_stale_clientid   cpu_to_be32(NFSERR_STALE_CLIENTID)
-#define        nfserr_resource         cpu_to_be32(NFSERR_RESOURCE)
-#define        nfserr_moved            cpu_to_be32(NFSERR_MOVED)
-#define        nfserr_nofilehandle     cpu_to_be32(NFSERR_NOFILEHANDLE)
-#define        nfserr_minor_vers_mismatch      cpu_to_be32(NFSERR_MINOR_VERS_MISMATCH)
-#define nfserr_share_denied    cpu_to_be32(NFSERR_SHARE_DENIED)
-#define nfserr_stale_stateid   cpu_to_be32(NFSERR_STALE_STATEID)
-#define nfserr_old_stateid     cpu_to_be32(NFSERR_OLD_STATEID)
-#define nfserr_bad_stateid     cpu_to_be32(NFSERR_BAD_STATEID)
-#define nfserr_bad_seqid       cpu_to_be32(NFSERR_BAD_SEQID)
-#define        nfserr_symlink          cpu_to_be32(NFSERR_SYMLINK)
-#define        nfserr_not_same         cpu_to_be32(NFSERR_NOT_SAME)
-#define        nfserr_restorefh        cpu_to_be32(NFSERR_RESTOREFH)
-#define        nfserr_attrnotsupp      cpu_to_be32(NFSERR_ATTRNOTSUPP)
-#define        nfserr_bad_xdr          cpu_to_be32(NFSERR_BAD_XDR)
-#define        nfserr_openmode         cpu_to_be32(NFSERR_OPENMODE)
-#define        nfserr_locks_held       cpu_to_be32(NFSERR_LOCKS_HELD)
-#define        nfserr_op_illegal       cpu_to_be32(NFSERR_OP_ILLEGAL)
-#define        nfserr_grace            cpu_to_be32(NFSERR_GRACE)
-#define        nfserr_no_grace         cpu_to_be32(NFSERR_NO_GRACE)
-#define        nfserr_reclaim_bad      cpu_to_be32(NFSERR_RECLAIM_BAD)
-#define        nfserr_badname          cpu_to_be32(NFSERR_BADNAME)
-#define        nfserr_cb_path_down     cpu_to_be32(NFSERR_CB_PATH_DOWN)
-#define        nfserr_locked           cpu_to_be32(NFSERR_LOCKED)
-#define        nfserr_wrongsec         cpu_to_be32(NFSERR_WRONGSEC)
-#define nfserr_badiomode               cpu_to_be32(NFS4ERR_BADIOMODE)
-#define nfserr_badlayout               cpu_to_be32(NFS4ERR_BADLAYOUT)
-#define nfserr_bad_session_digest      cpu_to_be32(NFS4ERR_BAD_SESSION_DIGEST)
-#define nfserr_badsession              cpu_to_be32(NFS4ERR_BADSESSION)
-#define nfserr_badslot                 cpu_to_be32(NFS4ERR_BADSLOT)
-#define nfserr_complete_already                cpu_to_be32(NFS4ERR_COMPLETE_ALREADY)
-#define nfserr_conn_not_bound_to_session cpu_to_be32(NFS4ERR_CONN_NOT_BOUND_TO_SESSION)
-#define nfserr_deleg_already_wanted    cpu_to_be32(NFS4ERR_DELEG_ALREADY_WANTED)
-#define nfserr_back_chan_busy          cpu_to_be32(NFS4ERR_BACK_CHAN_BUSY)
-#define nfserr_layouttrylater          cpu_to_be32(NFS4ERR_LAYOUTTRYLATER)
-#define nfserr_layoutunavailable       cpu_to_be32(NFS4ERR_LAYOUTUNAVAILABLE)
-#define nfserr_nomatching_layout       cpu_to_be32(NFS4ERR_NOMATCHING_LAYOUT)
-#define nfserr_recallconflict          cpu_to_be32(NFS4ERR_RECALLCONFLICT)
-#define nfserr_unknown_layouttype      cpu_to_be32(NFS4ERR_UNKNOWN_LAYOUTTYPE)
-#define nfserr_seq_misordered          cpu_to_be32(NFS4ERR_SEQ_MISORDERED)
-#define nfserr_sequence_pos            cpu_to_be32(NFS4ERR_SEQUENCE_POS)
-#define nfserr_req_too_big             cpu_to_be32(NFS4ERR_REQ_TOO_BIG)
-#define nfserr_rep_too_big             cpu_to_be32(NFS4ERR_REP_TOO_BIG)
-#define nfserr_rep_too_big_to_cache    cpu_to_be32(NFS4ERR_REP_TOO_BIG_TO_CACHE)
-#define nfserr_retry_uncached_rep      cpu_to_be32(NFS4ERR_RETRY_UNCACHED_REP)
-#define nfserr_unsafe_compound         cpu_to_be32(NFS4ERR_UNSAFE_COMPOUND)
-#define nfserr_too_many_ops            cpu_to_be32(NFS4ERR_TOO_MANY_OPS)
-#define nfserr_op_not_in_session       cpu_to_be32(NFS4ERR_OP_NOT_IN_SESSION)
-#define nfserr_hash_alg_unsupp         cpu_to_be32(NFS4ERR_HASH_ALG_UNSUPP)
-#define nfserr_clientid_busy           cpu_to_be32(NFS4ERR_CLIENTID_BUSY)
-#define nfserr_pnfs_io_hole            cpu_to_be32(NFS4ERR_PNFS_IO_HOLE)
-#define nfserr_seq_false_retry         cpu_to_be32(NFS4ERR_SEQ_FALSE_RETRY)
-#define nfserr_bad_high_slot           cpu_to_be32(NFS4ERR_BAD_HIGH_SLOT)
-#define nfserr_deadsession             cpu_to_be32(NFS4ERR_DEADSESSION)
-#define nfserr_encr_alg_unsupp         cpu_to_be32(NFS4ERR_ENCR_ALG_UNSUPP)
-#define nfserr_pnfs_no_layout          cpu_to_be32(NFS4ERR_PNFS_NO_LAYOUT)
-#define nfserr_not_only_op             cpu_to_be32(NFS4ERR_NOT_ONLY_OP)
-#define nfserr_wrong_cred              cpu_to_be32(NFS4ERR_WRONG_CRED)
-#define nfserr_wrong_type              cpu_to_be32(NFS4ERR_WRONG_TYPE)
-#define nfserr_dirdeleg_unavail                cpu_to_be32(NFS4ERR_DIRDELEG_UNAVAIL)
-#define nfserr_reject_deleg            cpu_to_be32(NFS4ERR_REJECT_DELEG)
-#define nfserr_returnconflict          cpu_to_be32(NFS4ERR_RETURNCONFLICT)
-#define nfserr_deleg_revoked           cpu_to_be32(NFS4ERR_DELEG_REVOKED)
-
-/* error codes for internal use */
-/* if a request fails due to kmalloc failure, it gets dropped.
- *  Client should resend eventually
- */
-#define        nfserr_dropit           cpu_to_be32(30000)
-/* end-of-file indicator in readdir */
-#define        nfserr_eof              cpu_to_be32(30001)
-/* replay detected */
-#define        nfserr_replay_me        cpu_to_be32(11001)
-/* nfs41 replay detected */
-#define        nfserr_replay_cache     cpu_to_be32(11002)
-
-/* Check for dir entries '.' and '..' */
-#define isdotent(n, l) (l < 3 && n[0] == '.' && (l == 1 || n[1] == '.'))
-
-/*
- * Time of server startup
- */
-extern struct timeval  nfssvc_boot;
-
-#ifdef CONFIG_NFSD_V4
-
-/* before processing a COMPOUND operation, we have to check that there
- * is enough space in the buffer for XDR encode to succeed.  otherwise,
- * we might process an operation with side effects, and be unable to
- * tell the client that the operation succeeded.
- *
- * COMPOUND_SLACK_SPACE - this is the minimum bytes of buffer space
- * needed to encode an "ordinary" _successful_ operation.  (GETATTR,
- * READ, READDIR, and READLINK have their own buffer checks.)  if we
- * fall below this level, we fail the next operation with NFS4ERR_RESOURCE.
- *
- * COMPOUND_ERR_SLACK_SPACE - this is the minimum bytes of buffer space
- * needed to encode an operation which has failed with NFS4ERR_RESOURCE.
- * care is taken to ensure that we never fall below this level for any
- * reason.
- */
-#define        COMPOUND_SLACK_SPACE            140    /* OP_GETFH */
-#define COMPOUND_ERR_SLACK_SPACE       12     /* OP_SETATTR */
-
-#define NFSD_LEASE_TIME                 (nfs4_lease_time())
-#define NFSD_LAUNDROMAT_MINTIMEOUT      10   /* seconds */
-
-/*
- * The following attributes are currently not supported by the NFSv4 server:
- *    ARCHIVE       (deprecated anyway)
- *    HIDDEN        (unlikely to be supported any time soon)
- *    MIMETYPE      (unlikely to be supported any time soon)
- *    QUOTA_*       (will be supported in a forthcoming patch)
- *    SYSTEM        (unlikely to be supported any time soon)
- *    TIME_BACKUP   (unlikely to be supported any time soon)
- *    TIME_CREATE   (unlikely to be supported any time soon)
- */
-#define NFSD4_SUPPORTED_ATTRS_WORD0                                                         \
-(FATTR4_WORD0_SUPPORTED_ATTRS   | FATTR4_WORD0_TYPE         | FATTR4_WORD0_FH_EXPIRE_TYPE   \
- | FATTR4_WORD0_CHANGE          | FATTR4_WORD0_SIZE         | FATTR4_WORD0_LINK_SUPPORT     \
- | FATTR4_WORD0_SYMLINK_SUPPORT | FATTR4_WORD0_NAMED_ATTR   | FATTR4_WORD0_FSID             \
- | FATTR4_WORD0_UNIQUE_HANDLES  | FATTR4_WORD0_LEASE_TIME   | FATTR4_WORD0_RDATTR_ERROR     \
- | FATTR4_WORD0_ACLSUPPORT      | FATTR4_WORD0_CANSETTIME   | FATTR4_WORD0_CASE_INSENSITIVE \
- | FATTR4_WORD0_CASE_PRESERVING | FATTR4_WORD0_CHOWN_RESTRICTED                             \
- | FATTR4_WORD0_FILEHANDLE      | FATTR4_WORD0_FILEID       | FATTR4_WORD0_FILES_AVAIL      \
- | FATTR4_WORD0_FILES_FREE      | FATTR4_WORD0_FILES_TOTAL  | FATTR4_WORD0_FS_LOCATIONS | FATTR4_WORD0_HOMOGENEOUS      \
- | FATTR4_WORD0_MAXFILESIZE     | FATTR4_WORD0_MAXLINK      | FATTR4_WORD0_MAXNAME          \
- | FATTR4_WORD0_MAXREAD         | FATTR4_WORD0_MAXWRITE     | FATTR4_WORD0_ACL)
-
-#define NFSD4_SUPPORTED_ATTRS_WORD1                                                         \
-(FATTR4_WORD1_MODE              | FATTR4_WORD1_NO_TRUNC     | FATTR4_WORD1_NUMLINKS         \
- | FATTR4_WORD1_OWNER          | FATTR4_WORD1_OWNER_GROUP  | FATTR4_WORD1_RAWDEV           \
- | FATTR4_WORD1_SPACE_AVAIL     | FATTR4_WORD1_SPACE_FREE   | FATTR4_WORD1_SPACE_TOTAL      \
- | FATTR4_WORD1_SPACE_USED      | FATTR4_WORD1_TIME_ACCESS  | FATTR4_WORD1_TIME_ACCESS_SET  \
- | FATTR4_WORD1_TIME_DELTA   | FATTR4_WORD1_TIME_METADATA    \
- | FATTR4_WORD1_TIME_MODIFY     | FATTR4_WORD1_TIME_MODIFY_SET | FATTR4_WORD1_MOUNTED_ON_FILEID)
-
-#define NFSD4_SUPPORTED_ATTRS_WORD2 0
-
-#define NFSD4_1_SUPPORTED_ATTRS_WORD0 \
-       NFSD4_SUPPORTED_ATTRS_WORD0
-
-#define NFSD4_1_SUPPORTED_ATTRS_WORD1 \
-       NFSD4_SUPPORTED_ATTRS_WORD1
-
-#define NFSD4_1_SUPPORTED_ATTRS_WORD2 \
-       (NFSD4_SUPPORTED_ATTRS_WORD2 | FATTR4_WORD2_SUPPATTR_EXCLCREAT)
-
-static inline u32 nfsd_suppattrs0(u32 minorversion)
-{
-       return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD0
-                           : NFSD4_SUPPORTED_ATTRS_WORD0;
-}
-
-static inline u32 nfsd_suppattrs1(u32 minorversion)
-{
-       return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD1
-                           : NFSD4_SUPPORTED_ATTRS_WORD1;
-}
-
-static inline u32 nfsd_suppattrs2(u32 minorversion)
-{
-       return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD2
-                           : NFSD4_SUPPORTED_ATTRS_WORD2;
-}
-
-/* These will return ERR_INVAL if specified in GETATTR or READDIR. */
-#define NFSD_WRITEONLY_ATTRS_WORD1                                                         \
-(FATTR4_WORD1_TIME_ACCESS_SET   | FATTR4_WORD1_TIME_MODIFY_SET)
-
-/* These are the only attrs allowed in CREATE/OPEN/SETATTR. */
-#define NFSD_WRITEABLE_ATTRS_WORD0                                                          \
-(FATTR4_WORD0_SIZE              | FATTR4_WORD0_ACL                                         )
-#define NFSD_WRITEABLE_ATTRS_WORD1                                                          \
-(FATTR4_WORD1_MODE              | FATTR4_WORD1_OWNER         | FATTR4_WORD1_OWNER_GROUP     \
- | FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET)
-#define NFSD_WRITEABLE_ATTRS_WORD2 0
-
-#define NFSD_SUPPATTR_EXCLCREAT_WORD0 \
-       NFSD_WRITEABLE_ATTRS_WORD0
-/*
- * we currently store the exclusive create verifier in the v_{a,m}time
- * attributes so the client can't set these at create time using EXCLUSIVE4_1
- */
-#define NFSD_SUPPATTR_EXCLCREAT_WORD1 \
-       (NFSD_WRITEABLE_ATTRS_WORD1 & \
-        ~(FATTR4_WORD1_TIME_ACCESS_SET | FATTR4_WORD1_TIME_MODIFY_SET))
-#define NFSD_SUPPATTR_EXCLCREAT_WORD2 \
-       NFSD_WRITEABLE_ATTRS_WORD2
-
-#endif /* CONFIG_NFSD_V4 */
-
-#endif /* LINUX_NFSD_NFSD_H */
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
deleted file mode 100644 (file)
index 2af7568..0000000
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- *  linux/include/nfsd/state.h
- *
- *  Copyright (c) 2001 The Regents of the University of Michigan.
- *  All rights reserved.
- *
- *  Kendrick Smith <kmsmith@umich.edu>
- *  Andy Adamson <andros@umich.edu>
- *  
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *  
- *  1. Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *  2. Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *  3. Neither the name of the University nor the names of its
- *     contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef _NFSD4_STATE_H
-#define _NFSD4_STATE_H
-
-#include <linux/nfsd/nfsfh.h>
-
-typedef struct {
-       u32             cl_boot;
-       u32             cl_id;
-} clientid_t;
-
-typedef struct {
-       u32             so_boot;
-       u32             so_stateownerid;
-       u32             so_fileid;
-} stateid_opaque_t;
-
-typedef struct {
-       u32                     si_generation;
-       stateid_opaque_t        si_opaque;
-} stateid_t;
-#define si_boot           si_opaque.so_boot
-#define si_stateownerid   si_opaque.so_stateownerid
-#define si_fileid         si_opaque.so_fileid
-
-#define STATEID_FMT    "(%08x/%08x/%08x/%08x)"
-#define STATEID_VAL(s) \
-       (s)->si_boot, \
-       (s)->si_stateownerid, \
-       (s)->si_fileid, \
-       (s)->si_generation
-
-struct nfsd4_cb_sequence {
-       /* args/res */
-       u32                     cbs_minorversion;
-       struct nfs4_client      *cbs_clp;
-};
-
-struct nfs4_delegation {
-       struct list_head        dl_perfile;
-       struct list_head        dl_perclnt;
-       struct list_head        dl_recall_lru;  /* delegation recalled */
-       atomic_t                dl_count;       /* ref count */
-       struct nfs4_client      *dl_client;
-       struct nfs4_file        *dl_file;
-       struct file_lock        *dl_flock;
-       struct file             *dl_vfs_file;
-       u32                     dl_type;
-       time_t                  dl_time;
-/* For recall: */
-       u32                     dl_ident;
-       stateid_t               dl_stateid;
-       struct knfsd_fh         dl_fh;
-       int                     dl_retries;
-};
-
-/* client delegation callback info */
-struct nfs4_cb_conn {
-       /* SETCLIENTID info */
-       struct sockaddr_storage cb_addr;
-       size_t                  cb_addrlen;
-       u32                     cb_prog;
-       u32                     cb_minorversion;
-       u32                     cb_ident;       /* minorversion 0 only */
-       /* RPC client info */
-       atomic_t                cb_set;     /* successful CB_NULL call */
-       struct rpc_clnt *       cb_client;
-};
-
-/* Maximum number of slots per session. 160 is useful for long haul TCP */
-#define NFSD_MAX_SLOTS_PER_SESSION     160
-/* Maximum number of operations per session compound */
-#define NFSD_MAX_OPS_PER_COMPOUND      16
-/* Maximum  session per slot cache size */
-#define NFSD_SLOT_CACHE_SIZE           1024
-/* Maximum number of NFSD_SLOT_CACHE_SIZE slots per session */
-#define NFSD_CACHE_SIZE_SLOTS_PER_SESSION      32
-#define NFSD_MAX_MEM_PER_SESSION  \
-               (NFSD_CACHE_SIZE_SLOTS_PER_SESSION * NFSD_SLOT_CACHE_SIZE)
-
-struct nfsd4_slot {
-       bool    sl_inuse;
-       bool    sl_cachethis;
-       u16     sl_opcnt;
-       u32     sl_seqid;
-       __be32  sl_status;
-       u32     sl_datalen;
-       char    sl_data[];
-};
-
-struct nfsd4_channel_attrs {
-       u32             headerpadsz;
-       u32             maxreq_sz;
-       u32             maxresp_sz;
-       u32             maxresp_cached;
-       u32             maxops;
-       u32             maxreqs;
-       u32             nr_rdma_attrs;
-       u32             rdma_attrs;
-};
-
-struct nfsd4_create_session {
-       clientid_t                      clientid;
-       struct nfs4_sessionid           sessionid;
-       u32                             seqid;
-       u32                             flags;
-       struct nfsd4_channel_attrs      fore_channel;
-       struct nfsd4_channel_attrs      back_channel;
-       u32                             callback_prog;
-       u32                             uid;
-       u32                             gid;
-};
-
-/* The single slot clientid cache structure */
-struct nfsd4_clid_slot {
-       u32                             sl_seqid;
-       __be32                          sl_status;
-       struct nfsd4_create_session     sl_cr_ses;
-};
-
-struct nfsd4_session {
-       struct kref             se_ref;
-       struct list_head        se_hash;        /* hash by sessionid */
-       struct list_head        se_perclnt;
-       u32                     se_flags;
-       struct nfs4_client      *se_client;     /* for expire_client */
-       struct nfs4_sessionid   se_sessionid;
-       struct nfsd4_channel_attrs se_fchannel;
-       struct nfsd4_channel_attrs se_bchannel;
-       struct nfsd4_slot       *se_slots[];    /* forward channel slots */
-};
-
-static inline void
-nfsd4_put_session(struct nfsd4_session *ses)
-{
-       extern void free_session(struct kref *kref);
-       kref_put(&ses->se_ref, free_session);
-}
-
-static inline void
-nfsd4_get_session(struct nfsd4_session *ses)
-{
-       kref_get(&ses->se_ref);
-}
-
-/* formatted contents of nfs4_sessionid */
-struct nfsd4_sessionid {
-       clientid_t      clientid;
-       u32             sequence;
-       u32             reserved;
-};
-
-#define HEXDIR_LEN     33 /* hex version of 16 byte md5 of cl_name plus '\0' */
-
-/*
- * struct nfs4_client - one per client.  Clientids live here.
- *     o Each nfs4_client is hashed by clientid.
- *
- *     o Each nfs4_clients is also hashed by name 
- *       (the opaque quantity initially sent by the client to identify itself).
- *       
- *     o cl_perclient list is used to ensure no dangling stateowner references
- *       when we expire the nfs4_client
- */
-struct nfs4_client {
-       struct list_head        cl_idhash;      /* hash by cl_clientid.id */
-       struct list_head        cl_strhash;     /* hash by cl_name */
-       struct list_head        cl_openowners;
-       struct list_head        cl_delegations;
-       struct list_head        cl_lru;         /* tail queue */
-       struct xdr_netobj       cl_name;        /* id generated by client */
-       char                    cl_recdir[HEXDIR_LEN]; /* recovery dir */
-       nfs4_verifier           cl_verifier;    /* generated by client */
-       time_t                  cl_time;        /* time of last lease renewal */
-       struct sockaddr_storage cl_addr;        /* client ipaddress */
-       u32                     cl_flavor;      /* setclientid pseudoflavor */
-       char                    *cl_principal;  /* setclientid principal name */
-       struct svc_cred         cl_cred;        /* setclientid principal */
-       clientid_t              cl_clientid;    /* generated by server */
-       nfs4_verifier           cl_confirm;     /* generated by server */
-       struct nfs4_cb_conn     cl_cb_conn;     /* callback info */
-       atomic_t                cl_count;       /* ref count */
-       u32                     cl_firststate;  /* recovery dir creation */
-
-       /* for nfs41 */
-       struct list_head        cl_sessions;
-       struct nfsd4_clid_slot  cl_cs_slot;     /* create_session slot */
-       u32                     cl_exchange_flags;
-       struct nfs4_sessionid   cl_sessionid;
-
-       /* for nfs41 callbacks */
-       /* We currently support a single back channel with a single slot */
-       unsigned long           cl_cb_slot_busy;
-       u32                     cl_cb_seq_nr;
-       struct svc_xprt         *cl_cb_xprt;    /* 4.1 callback transport */
-       struct rpc_wait_queue   cl_cb_waitq;    /* backchannel callers may */
-                                               /* wait here for slots */
-};
-
-/* struct nfs4_client_reset
- * one per old client. Populates reset_str_hashtbl. Filled from conf_id_hashtbl
- * upon lease reset, or from upcall to state_daemon (to read in state
- * from non-volitile storage) upon reboot.
- */
-struct nfs4_client_reclaim {
-       struct list_head        cr_strhash;     /* hash by cr_name */
-       char                    cr_recdir[HEXDIR_LEN]; /* recover dir */
-};
-
-static inline void
-update_stateid(stateid_t *stateid)
-{
-       stateid->si_generation++;
-}
-
-/* A reasonable value for REPLAY_ISIZE was estimated as follows:  
- * The OPEN response, typically the largest, requires 
- *   4(status) + 8(stateid) + 20(changeinfo) + 4(rflags) +  8(verifier) + 
- *   4(deleg. type) + 8(deleg. stateid) + 4(deleg. recall flag) + 
- *   20(deleg. space limit) + ~32(deleg. ace) = 112 bytes 
- */
-
-#define NFSD4_REPLAY_ISIZE       112 
-
-/*
- * Replay buffer, where the result of the last seqid-mutating operation 
- * is cached. 
- */
-struct nfs4_replay {
-       __be32                  rp_status;
-       unsigned int            rp_buflen;
-       char                    *rp_buf;
-       unsigned                intrp_allocated;
-       struct knfsd_fh         rp_openfh;
-       char                    rp_ibuf[NFSD4_REPLAY_ISIZE];
-};
-
-/*
-* nfs4_stateowner can either be an open_owner, or a lock_owner
-*
-*    so_idhash:  stateid_hashtbl[] for open owner, lockstateid_hashtbl[]
-*         for lock_owner
-*    so_strhash: ownerstr_hashtbl[] for open_owner, lock_ownerstr_hashtbl[]
-*         for lock_owner
-*    so_perclient: nfs4_client->cl_perclient entry - used when nfs4_client
-*         struct is reaped.
-*    so_perfilestate: heads the list of nfs4_stateid (either open or lock) 
-*         and is used to ensure no dangling nfs4_stateid references when we 
-*         release a stateowner.
-*    so_perlockowner: (open) nfs4_stateid->st_perlockowner entry - used when
-*         close is called to reap associated byte-range locks
-*    so_close_lru: (open) stateowner is placed on this list instead of being
-*         reaped (when so_perfilestate is empty) to hold the last close replay.
-*         reaped by laundramat thread after lease period.
-*/
-struct nfs4_stateowner {
-       struct kref             so_ref;
-       struct list_head        so_idhash;   /* hash by so_id */
-       struct list_head        so_strhash;   /* hash by op_name */
-       struct list_head        so_perclient;
-       struct list_head        so_stateids;
-       struct list_head        so_perstateid; /* for lockowners only */
-       struct list_head        so_close_lru; /* tail queue */
-       time_t                  so_time; /* time of placement on so_close_lru */
-       int                     so_is_open_owner; /* 1=openowner,0=lockowner */
-       u32                     so_id;
-       struct nfs4_client *    so_client;
-       /* after increment in ENCODE_SEQID_OP_TAIL, represents the next
-        * sequence id expected from the client: */
-       u32                     so_seqid;
-       struct xdr_netobj       so_owner;     /* open owner name */
-       int                     so_confirmed; /* successful OPEN_CONFIRM? */
-       struct nfs4_replay      so_replay;
-};
-
-/*
-*  nfs4_file: a file opened by some number of (open) nfs4_stateowners.
-*    o fi_perfile list is used to search for conflicting 
-*      share_acces, share_deny on the file.
-*/
-struct nfs4_file {
-       atomic_t                fi_ref;
-       struct list_head        fi_hash;    /* hash by "struct inode *" */
-       struct list_head        fi_stateids;
-       struct list_head        fi_delegations;
-       struct inode            *fi_inode;
-       u32                     fi_id;      /* used with stateowner->so_id 
-                                            * for stateid_hashtbl hash */
-       bool                    fi_had_conflict;
-};
-
-/*
-* nfs4_stateid can either be an open stateid or (eventually) a lock stateid
-*
-* (open)nfs4_stateid: one per (open)nfs4_stateowner, nfs4_file
-*
-*      st_hash: stateid_hashtbl[] entry or lockstateid_hashtbl entry
-*      st_perfile: file_hashtbl[] entry.
-*      st_perfile_state: nfs4_stateowner->so_perfilestate
-*       st_perlockowner: (open stateid) list of lock nfs4_stateowners
-*      st_access_bmap: used only for open stateid
-*      st_deny_bmap: used only for open stateid
-*      st_openstp: open stateid lock stateid was derived from
-*
-* XXX: open stateids and lock stateids have diverged sufficiently that
-* we should consider defining separate structs for the two cases.
-*/
-
-struct nfs4_stateid {
-       struct list_head              st_hash; 
-       struct list_head              st_perfile;
-       struct list_head              st_perstateowner;
-       struct list_head              st_lockowners;
-       struct nfs4_stateowner      * st_stateowner;
-       struct nfs4_file            * st_file;
-       stateid_t                     st_stateid;
-       struct file                 * st_vfs_file;
-       unsigned long                 st_access_bmap;
-       unsigned long                 st_deny_bmap;
-       struct nfs4_stateid         * st_openstp;
-};
-
-/* flags for preprocess_seqid_op() */
-#define HAS_SESSION             0x00000001
-#define CONFIRM                 0x00000002
-#define OPEN_STATE              0x00000004
-#define LOCK_STATE              0x00000008
-#define RD_STATE               0x00000010
-#define WR_STATE               0x00000020
-#define CLOSE_STATE             0x00000040
-
-#define seqid_mutating_err(err)                       \
-       (((err) != nfserr_stale_clientid) &&    \
-       ((err) != nfserr_bad_seqid) &&          \
-       ((err) != nfserr_stale_stateid) &&      \
-       ((err) != nfserr_bad_stateid))
-
-struct nfsd4_compound_state;
-
-extern __be32 nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
-               stateid_t *stateid, int flags, struct file **filp);
-extern void nfs4_lock_state(void);
-extern void nfs4_unlock_state(void);
-extern int nfs4_in_grace(void);
-extern __be32 nfs4_check_open_reclaim(clientid_t *clid);
-extern void put_nfs4_client(struct nfs4_client *clp);
-extern void nfs4_free_stateowner(struct kref *kref);
-extern int set_callback_cred(void);
-extern void nfsd4_probe_callback(struct nfs4_client *clp);
-extern void nfsd4_cb_recall(struct nfs4_delegation *dp);
-extern void nfs4_put_delegation(struct nfs4_delegation *dp);
-extern __be32 nfs4_make_rec_clidname(char *clidname, struct xdr_netobj *clname);
-extern void nfsd4_init_recdir(char *recdir_name);
-extern int nfsd4_recdir_load(void);
-extern void nfsd4_shutdown_recdir(void);
-extern int nfs4_client_to_reclaim(const char *name);
-extern int nfs4_has_reclaimed_state(const char *name, bool use_exchange_id);
-extern void nfsd4_recdir_purge_old(void);
-extern int nfsd4_create_clid_dir(struct nfs4_client *clp);
-extern void nfsd4_remove_clid_dir(struct nfs4_client *clp);
-
-static inline void
-nfs4_put_stateowner(struct nfs4_stateowner *so)
-{
-       kref_put(&so->so_ref, nfs4_free_stateowner);
-}
-
-static inline void
-nfs4_get_stateowner(struct nfs4_stateowner *so)
-{
-       kref_get(&so->so_ref);
-}
-
-#endif   /* NFSD4_STATE_H */
diff --git a/include/linux/nfsd/xdr.h b/include/linux/nfsd/xdr.h
deleted file mode 100644 (file)
index 58f824d..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * linux/include/linux/nfsd/xdr.h
- *
- * XDR types for nfsd. This is mainly a typing exercise.
- */
-
-#ifndef LINUX_NFSD_H
-#define LINUX_NFSD_H
-
-#include <linux/vfs.h>
-#include <linux/nfsd/nfsd.h>
-
-struct nfsd_fhandle {
-       struct svc_fh           fh;
-};
-
-struct nfsd_sattrargs {
-       struct svc_fh           fh;
-       struct iattr            attrs;
-};
-
-struct nfsd_diropargs {
-       struct svc_fh           fh;
-       char *                  name;
-       unsigned int            len;
-};
-
-struct nfsd_readargs {
-       struct svc_fh           fh;
-       __u32                   offset;
-       __u32                   count;
-       int                     vlen;
-};
-
-struct nfsd_writeargs {
-       svc_fh                  fh;
-       __u32                   offset;
-       int                     len;
-       int                     vlen;
-};
-
-struct nfsd_createargs {
-       struct svc_fh           fh;
-       char *                  name;
-       unsigned int            len;
-       struct iattr            attrs;
-};
-
-struct nfsd_renameargs {
-       struct svc_fh           ffh;
-       char *                  fname;
-       unsigned int            flen;
-       struct svc_fh           tfh;
-       char *                  tname;
-       unsigned int            tlen;
-};
-
-struct nfsd_readlinkargs {
-       struct svc_fh           fh;
-       char *                  buffer;
-};
-       
-struct nfsd_linkargs {
-       struct svc_fh           ffh;
-       struct svc_fh           tfh;
-       char *                  tname;
-       unsigned int            tlen;
-};
-
-struct nfsd_symlinkargs {
-       struct svc_fh           ffh;
-       char *                  fname;
-       unsigned int            flen;
-       char *                  tname;
-       unsigned int            tlen;
-       struct iattr            attrs;
-};
-
-struct nfsd_readdirargs {
-       struct svc_fh           fh;
-       __u32                   cookie;
-       __u32                   count;
-       __be32 *                buffer;
-};
-
-struct nfsd_attrstat {
-       struct svc_fh           fh;
-       struct kstat            stat;
-};
-
-struct nfsd_diropres  {
-       struct svc_fh           fh;
-       struct kstat            stat;
-};
-
-struct nfsd_readlinkres {
-       int                     len;
-};
-
-struct nfsd_readres {
-       struct svc_fh           fh;
-       unsigned long           count;
-       struct kstat            stat;
-};
-
-struct nfsd_readdirres {
-       int                     count;
-
-       struct readdir_cd       common;
-       __be32 *                buffer;
-       int                     buflen;
-       __be32 *                offset;
-};
-
-struct nfsd_statfsres {
-       struct kstatfs          stats;
-};
-
-/*
- * Storage requirements for XDR arguments and results.
- */
-union nfsd_xdrstore {
-       struct nfsd_sattrargs   sattr;
-       struct nfsd_diropargs   dirop;
-       struct nfsd_readargs    read;
-       struct nfsd_writeargs   write;
-       struct nfsd_createargs  create;
-       struct nfsd_renameargs  rename;
-       struct nfsd_linkargs    link;
-       struct nfsd_symlinkargs symlink;
-       struct nfsd_readdirargs readdir;
-};
-
-#define NFS2_SVC_XDRSIZE       sizeof(union nfsd_xdrstore)
-
-
-int nfssvc_decode_void(struct svc_rqst *, __be32 *, void *);
-int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
-int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_sattrargs *);
-int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_diropargs *);
-int nfssvc_decode_readargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_readargs *);
-int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_writeargs *);
-int nfssvc_decode_createargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_createargs *);
-int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_renameargs *);
-int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_readlinkargs *);
-int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_linkargs *);
-int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_symlinkargs *);
-int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *,
-                               struct nfsd_readdirargs *);
-int nfssvc_encode_void(struct svc_rqst *, __be32 *, void *);
-int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *);
-int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *);
-int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *);
-int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *);
-int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *);
-int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *);
-
-int nfssvc_encode_entry(void *, const char *name,
-                       int namlen, loff_t offset, u64 ino, unsigned int);
-
-int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
-
-/* Helper functions for NFSv2 ACL code */
-__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp);
-__be32 *nfs2svc_decode_fh(__be32 *p, struct svc_fh *fhp);
-
-#endif /* LINUX_NFSD_H */
diff --git a/include/linux/nfsd/xdr3.h b/include/linux/nfsd/xdr3.h
deleted file mode 100644 (file)
index 421eddd..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * linux/include/linux/nfsd/xdr3.h
- *
- * XDR types for NFSv3 in nfsd.
- *
- * Copyright (C) 1996-1998, Olaf Kirch <okir@monad.swb.de>
- */
-
-#ifndef _LINUX_NFSD_XDR3_H
-#define _LINUX_NFSD_XDR3_H
-
-#include <linux/nfsd/xdr.h>
-
-struct nfsd3_sattrargs {
-       struct svc_fh           fh;
-       struct iattr            attrs;
-       int                     check_guard;
-       time_t                  guardtime;
-};
-
-struct nfsd3_diropargs {
-       struct svc_fh           fh;
-       char *                  name;
-       unsigned int            len;
-};
-
-struct nfsd3_accessargs {
-       struct svc_fh           fh;
-       unsigned int            access;
-};
-
-struct nfsd3_readargs {
-       struct svc_fh           fh;
-       __u64                   offset;
-       __u32                   count;
-       int                     vlen;
-};
-
-struct nfsd3_writeargs {
-       svc_fh                  fh;
-       __u64                   offset;
-       __u32                   count;
-       int                     stable;
-       __u32                   len;
-       int                     vlen;
-};
-
-struct nfsd3_createargs {
-       struct svc_fh           fh;
-       char *                  name;
-       unsigned int            len;
-       int                     createmode;
-       struct iattr            attrs;
-       __be32 *                verf;
-};
-
-struct nfsd3_mknodargs {
-       struct svc_fh           fh;
-       char *                  name;
-       unsigned int            len;
-       __u32                   ftype;
-       __u32                   major, minor;
-       struct iattr            attrs;
-};
-
-struct nfsd3_renameargs {
-       struct svc_fh           ffh;
-       char *                  fname;
-       unsigned int            flen;
-       struct svc_fh           tfh;
-       char *                  tname;
-       unsigned int            tlen;
-};
-
-struct nfsd3_readlinkargs {
-       struct svc_fh           fh;
-       char *                  buffer;
-};
-
-struct nfsd3_linkargs {
-       struct svc_fh           ffh;
-       struct svc_fh           tfh;
-       char *                  tname;
-       unsigned int            tlen;
-};
-
-struct nfsd3_symlinkargs {
-       struct svc_fh           ffh;
-       char *                  fname;
-       unsigned int            flen;
-       char *                  tname;
-       unsigned int            tlen;
-       struct iattr            attrs;
-};
-
-struct nfsd3_readdirargs {
-       struct svc_fh           fh;
-       __u64                   cookie;
-       __u32                   dircount;
-       __u32                   count;
-       __be32 *                verf;
-       __be32 *                buffer;
-};
-
-struct nfsd3_commitargs {
-       struct svc_fh           fh;
-       __u64                   offset;
-       __u32                   count;
-};
-
-struct nfsd3_getaclargs {
-       struct svc_fh           fh;
-       int                     mask;
-};
-
-struct posix_acl;
-struct nfsd3_setaclargs {
-       struct svc_fh           fh;
-       int                     mask;
-       struct posix_acl        *acl_access;
-       struct posix_acl        *acl_default;
-};
-
-struct nfsd3_attrstat {
-       __be32                  status;
-       struct svc_fh           fh;
-       struct kstat            stat;
-};
-
-/* LOOKUP, CREATE, MKDIR, SYMLINK, MKNOD */
-struct nfsd3_diropres  {
-       __be32                  status;
-       struct svc_fh           dirfh;
-       struct svc_fh           fh;
-};
-
-struct nfsd3_accessres {
-       __be32                  status;
-       struct svc_fh           fh;
-       __u32                   access;
-};
-
-struct nfsd3_readlinkres {
-       __be32                  status;
-       struct svc_fh           fh;
-       __u32                   len;
-};
-
-struct nfsd3_readres {
-       __be32                  status;
-       struct svc_fh           fh;
-       unsigned long           count;
-       int                     eof;
-};
-
-struct nfsd3_writeres {
-       __be32                  status;
-       struct svc_fh           fh;
-       unsigned long           count;
-       int                     committed;
-};
-
-struct nfsd3_renameres {
-       __be32                  status;
-       struct svc_fh           ffh;
-       struct svc_fh           tfh;
-};
-
-struct nfsd3_linkres {
-       __be32                  status;
-       struct svc_fh           tfh;
-       struct svc_fh           fh;
-};
-
-struct nfsd3_readdirres {
-       __be32                  status;
-       struct svc_fh           fh;
-       int                     count;
-       __be32                  verf[2];
-
-       struct readdir_cd       common;
-       __be32 *                buffer;
-       int                     buflen;
-       __be32 *                offset;
-       __be32 *                offset1;
-       struct svc_rqst *       rqstp;
-
-};
-
-struct nfsd3_fsstatres {
-       __be32                  status;
-       struct kstatfs          stats;
-       __u32                   invarsec;
-};
-
-struct nfsd3_fsinfores {
-       __be32                  status;
-       __u32                   f_rtmax;
-       __u32                   f_rtpref;
-       __u32                   f_rtmult;
-       __u32                   f_wtmax;
-       __u32                   f_wtpref;
-       __u32                   f_wtmult;
-       __u32                   f_dtpref;
-       __u64                   f_maxfilesize;
-       __u32                   f_properties;
-};
-
-struct nfsd3_pathconfres {
-       __be32                  status;
-       __u32                   p_link_max;
-       __u32                   p_name_max;
-       __u32                   p_no_trunc;
-       __u32                   p_chown_restricted;
-       __u32                   p_case_insensitive;
-       __u32                   p_case_preserving;
-};
-
-struct nfsd3_commitres {
-       __be32                  status;
-       struct svc_fh           fh;
-};
-
-struct nfsd3_getaclres {
-       __be32                  status;
-       struct svc_fh           fh;
-       int                     mask;
-       struct posix_acl        *acl_access;
-       struct posix_acl        *acl_default;
-};
-
-/* dummy type for release */
-struct nfsd3_fhandle_pair {
-       __u32                   dummy;
-       struct svc_fh           fh1;
-       struct svc_fh           fh2;
-};
-
-/*
- * Storage requirements for XDR arguments and results.
- */
-union nfsd3_xdrstore {
-       struct nfsd3_sattrargs          sattrargs;
-       struct nfsd3_diropargs          diropargs;
-       struct nfsd3_readargs           readargs;
-       struct nfsd3_writeargs          writeargs;
-       struct nfsd3_createargs         createargs;
-       struct nfsd3_renameargs         renameargs;
-       struct nfsd3_linkargs           linkargs;
-       struct nfsd3_symlinkargs        symlinkargs;
-       struct nfsd3_readdirargs        readdirargs;
-       struct nfsd3_diropres           diropres;
-       struct nfsd3_accessres          accessres;
-       struct nfsd3_readlinkres        readlinkres;
-       struct nfsd3_readres            readres;
-       struct nfsd3_writeres           writeres;
-       struct nfsd3_renameres          renameres;
-       struct nfsd3_linkres            linkres;
-       struct nfsd3_readdirres         readdirres;
-       struct nfsd3_fsstatres          fsstatres;
-       struct nfsd3_fsinfores          fsinfores;
-       struct nfsd3_pathconfres        pathconfres;
-       struct nfsd3_commitres          commitres;
-       struct nfsd3_getaclres          getaclres;
-};
-
-#define NFS3_SVC_XDRSIZE               sizeof(union nfsd3_xdrstore)
-
-int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *);
-int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_sattrargs *);
-int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_diropargs *);
-int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_accessargs *);
-int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_readargs *);
-int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_writeargs *);
-int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_createargs *);
-int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_createargs *);
-int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_mknodargs *);
-int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_renameargs *);
-int nfs3svc_decode_readlinkargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_readlinkargs *);
-int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_linkargs *);
-int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_symlinkargs *);
-int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_readdirargs *);
-int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_readdirargs *);
-int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *,
-                               struct nfsd3_commitargs *);
-int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
-int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *,
-                               struct nfsd3_attrstat *);
-int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *,
-                               struct nfsd3_attrstat *);
-int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_diropres *);
-int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_accessres *);
-int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_readlinkres *);
-int nfs3svc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd3_readres *);
-int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *, struct nfsd3_writeres *);
-int nfs3svc_encode_createres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_diropres *);
-int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_renameres *);
-int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_linkres *);
-int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_readdirres *);
-int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_fsstatres *);
-int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *,
-                               struct nfsd3_fsinfores *);
-int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_pathconfres *);
-int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *,
-                               struct nfsd3_commitres *);
-
-int nfs3svc_release_fhandle(struct svc_rqst *, __be32 *,
-                               struct nfsd3_attrstat *);
-int nfs3svc_release_fhandle2(struct svc_rqst *, __be32 *,
-                               struct nfsd3_fhandle_pair *);
-int nfs3svc_encode_entry(void *, const char *name,
-                               int namlen, loff_t offset, u64 ino,
-                               unsigned int);
-int nfs3svc_encode_entry_plus(void *, const char *name,
-                               int namlen, loff_t offset, u64 ino,
-                               unsigned int);
-/* Helper functions for NFSv3 ACL code */
-__be32 *nfs3svc_encode_post_op_attr(struct svc_rqst *rqstp, __be32 *p,
-                               struct svc_fh *fhp);
-__be32 *nfs3svc_decode_fh(__be32 *p, struct svc_fh *fhp);
-
-
-#endif /* _LINUX_NFSD_XDR3_H */
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
deleted file mode 100644 (file)
index 1bf2662..0000000
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- *  include/linux/nfsd/xdr4.h
- *
- *  Server-side types for NFSv4.
- *
- *  Copyright (c) 2002 The Regents of the University of Michigan.
- *  All rights reserved.
- *
- *  Kendrick Smith <kmsmith@umich.edu>
- *  Andy Adamson   <andros@umich.edu>
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions
- *  are met:
- *
- *  1. Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- *  2. Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *  3. Neither the name of the University nor the names of its
- *     contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- *  DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- *  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- *  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#ifndef _LINUX_NFSD_XDR4_H
-#define _LINUX_NFSD_XDR4_H
-
-#include <linux/nfsd/state.h>
-#include <linux/nfsd/nfsd.h>
-
-#define NFSD4_MAX_TAGLEN       128
-#define XDR_LEN(n)                     (((n) + 3) & ~3)
-
-struct nfsd4_compound_state {
-       struct svc_fh           current_fh;
-       struct svc_fh           save_fh;
-       struct nfs4_stateowner  *replay_owner;
-       /* For sessions DRC */
-       struct nfsd4_session    *session;
-       struct nfsd4_slot       *slot;
-       __be32                  *datap;
-       size_t                  iovlen;
-       u32                     minorversion;
-       u32                     status;
-};
-
-static inline bool nfsd4_has_session(struct nfsd4_compound_state *cs)
-{
-       return cs->slot != NULL;
-}
-
-struct nfsd4_change_info {
-       u32             atomic;
-       bool            change_supported;
-       u32             before_ctime_sec;
-       u32             before_ctime_nsec;
-       u64             before_change;
-       u32             after_ctime_sec;
-       u32             after_ctime_nsec;
-       u64             after_change;
-};
-
-struct nfsd4_access {
-       u32             ac_req_access;      /* request */
-       u32             ac_supported;       /* response */
-       u32             ac_resp_access;     /* response */
-};
-
-struct nfsd4_close {
-       u32             cl_seqid;           /* request */
-       stateid_t       cl_stateid;         /* request+response */
-       struct nfs4_stateowner * cl_stateowner; /* response */
-};
-
-struct nfsd4_commit {
-       u64             co_offset;          /* request */
-       u32             co_count;           /* request */
-       nfs4_verifier   co_verf;            /* response */
-};
-
-struct nfsd4_create {
-       u32             cr_namelen;         /* request */
-       char *          cr_name;            /* request */
-       u32             cr_type;            /* request */
-       union {                             /* request */
-               struct {
-                       u32 namelen;
-                       char *name;
-               } link;   /* NF4LNK */
-               struct {
-                       u32 specdata1;
-                       u32 specdata2;
-               } dev;    /* NF4BLK, NF4CHR */
-       } u;
-       u32             cr_bmval[3];        /* request */
-       struct iattr    cr_iattr;           /* request */
-       struct nfsd4_change_info  cr_cinfo; /* response */
-       struct nfs4_acl *cr_acl;
-};
-#define cr_linklen     u.link.namelen
-#define cr_linkname    u.link.name
-#define cr_specdata1   u.dev.specdata1
-#define cr_specdata2   u.dev.specdata2
-
-struct nfsd4_delegreturn {
-       stateid_t       dr_stateid;
-};
-
-struct nfsd4_getattr {
-       u32             ga_bmval[3];        /* request */
-       struct svc_fh   *ga_fhp;            /* response */
-};
-
-struct nfsd4_link {
-       u32             li_namelen;         /* request */
-       char *          li_name;            /* request */
-       struct nfsd4_change_info  li_cinfo; /* response */
-};
-
-struct nfsd4_lock_denied {
-       clientid_t      ld_clientid;
-       struct nfs4_stateowner   *ld_sop;
-       u64             ld_start;
-       u64             ld_length;
-       u32             ld_type;
-};
-
-struct nfsd4_lock {
-       /* request */
-       u32             lk_type;
-       u32             lk_reclaim;         /* boolean */
-       u64             lk_offset;
-       u64             lk_length;
-       u32             lk_is_new;
-       union {
-               struct {
-                       u32             open_seqid;
-                       stateid_t       open_stateid;
-                       u32             lock_seqid;
-                       clientid_t      clientid;
-                       struct xdr_netobj owner;
-               } new;
-               struct {
-                       stateid_t       lock_stateid;
-                       u32             lock_seqid;
-               } old;
-       } v;
-
-       /* response */
-       union {
-               struct {
-                       stateid_t               stateid;
-               } ok;
-               struct nfsd4_lock_denied        denied;
-       } u;
-       /* The lk_replay_owner is the open owner in the open_to_lock_owner
-        * case and the lock owner otherwise: */
-       struct nfs4_stateowner *lk_replay_owner;
-};
-#define lk_new_open_seqid       v.new.open_seqid
-#define lk_new_open_stateid     v.new.open_stateid
-#define lk_new_lock_seqid       v.new.lock_seqid
-#define lk_new_clientid         v.new.clientid
-#define lk_new_owner            v.new.owner
-#define lk_old_lock_stateid     v.old.lock_stateid
-#define lk_old_lock_seqid       v.old.lock_seqid
-
-#define lk_rflags       u.ok.rflags
-#define lk_resp_stateid u.ok.stateid
-#define lk_denied       u.denied
-
-
-struct nfsd4_lockt {
-       u32                             lt_type;
-       clientid_t                      lt_clientid;
-       struct xdr_netobj               lt_owner;
-       u64                             lt_offset;
-       u64                             lt_length;
-       struct nfs4_stateowner *        lt_stateowner;
-       struct nfsd4_lock_denied        lt_denied;
-};
-
-struct nfsd4_locku {
-       u32             lu_type;
-       u32             lu_seqid;
-       stateid_t       lu_stateid;
-       u64             lu_offset;
-       u64             lu_length;
-       struct nfs4_stateowner  *lu_stateowner;
-};
-
-
-struct nfsd4_lookup {
-       u32             lo_len;             /* request */
-       char *          lo_name;            /* request */
-};
-
-struct nfsd4_putfh {
-       u32             pf_fhlen;           /* request */
-       char            *pf_fhval;          /* request */
-};
-
-struct nfsd4_open {
-       u32             op_claim_type;      /* request */
-       struct xdr_netobj op_fname;         /* request - everything but CLAIM_PREV */
-       u32             op_delegate_type;   /* request - CLAIM_PREV only */
-       stateid_t       op_delegate_stateid; /* request - response */
-       u32             op_create;          /* request */
-       u32             op_createmode;      /* request */
-       u32             op_bmval[3];        /* request */
-       struct iattr    iattr;              /* UNCHECKED4, GUARDED4, EXCLUSIVE4_1 */
-       nfs4_verifier   verf;               /* EXCLUSIVE4 */
-       clientid_t      op_clientid;        /* request */
-       struct xdr_netobj op_owner;           /* request */
-       u32             op_seqid;           /* request */
-       u32             op_share_access;    /* request */
-       u32             op_share_deny;      /* request */
-       stateid_t       op_stateid;         /* response */
-       u32             op_recall;          /* recall */
-       struct nfsd4_change_info  op_cinfo; /* response */
-       u32             op_rflags;          /* response */
-       int             op_truncate;        /* used during processing */
-       struct nfs4_stateowner *op_stateowner; /* used during processing */
-       struct nfs4_acl *op_acl;
-};
-#define op_iattr       iattr
-#define op_verf                verf
-
-struct nfsd4_open_confirm {
-       stateid_t       oc_req_stateid          /* request */;
-       u32             oc_seqid                /* request */;
-       stateid_t       oc_resp_stateid         /* response */;
-       struct nfs4_stateowner * oc_stateowner; /* response */
-};
-
-struct nfsd4_open_downgrade {
-       stateid_t       od_stateid;
-       u32             od_seqid;
-       u32             od_share_access;
-       u32             od_share_deny;
-       struct nfs4_stateowner *od_stateowner;
-};
-
-
-struct nfsd4_read {
-       stateid_t       rd_stateid;         /* request */
-       u64             rd_offset;          /* request */
-       u32             rd_length;          /* request */
-       int             rd_vlen;
-       struct file     *rd_filp;
-       
-       struct svc_rqst *rd_rqstp;          /* response */
-       struct svc_fh * rd_fhp;             /* response */
-};
-
-struct nfsd4_readdir {
-       u64             rd_cookie;          /* request */
-       nfs4_verifier   rd_verf;            /* request */
-       u32             rd_dircount;        /* request */
-       u32             rd_maxcount;        /* request */
-       u32             rd_bmval[3];        /* request */
-       struct svc_rqst *rd_rqstp;          /* response */
-       struct svc_fh * rd_fhp;             /* response */
-
-       struct readdir_cd       common;
-       __be32 *                buffer;
-       int                     buflen;
-       __be32 *                offset;
-};
-
-struct nfsd4_release_lockowner {
-       clientid_t        rl_clientid;
-       struct xdr_netobj rl_owner;
-};
-struct nfsd4_readlink {
-       struct svc_rqst *rl_rqstp;          /* request */
-       struct svc_fh * rl_fhp;             /* request */
-};
-
-struct nfsd4_remove {
-       u32             rm_namelen;         /* request */
-       char *          rm_name;            /* request */
-       struct nfsd4_change_info  rm_cinfo; /* response */
-};
-
-struct nfsd4_rename {
-       u32             rn_snamelen;        /* request */
-       char *          rn_sname;           /* request */
-       u32             rn_tnamelen;        /* request */
-       char *          rn_tname;           /* request */
-       struct nfsd4_change_info  rn_sinfo; /* response */
-       struct nfsd4_change_info  rn_tinfo; /* response */
-};
-
-struct nfsd4_secinfo {
-       u32 si_namelen;                                 /* request */
-       char *si_name;                                  /* request */
-       struct svc_export *si_exp;                      /* response */
-};
-
-struct nfsd4_setattr {
-       stateid_t       sa_stateid;         /* request */
-       u32             sa_bmval[3];        /* request */
-       struct iattr    sa_iattr;           /* request */
-       struct nfs4_acl *sa_acl;
-};
-
-struct nfsd4_setclientid {
-       nfs4_verifier   se_verf;            /* request */
-       u32             se_namelen;         /* request */
-       char *          se_name;            /* request */
-       u32             se_callback_prog;   /* request */
-       u32             se_callback_netid_len;  /* request */
-       char *          se_callback_netid_val;  /* request */
-       u32             se_callback_addr_len;   /* request */
-       char *          se_callback_addr_val;   /* request */
-       u32             se_callback_ident;  /* request */
-       clientid_t      se_clientid;        /* response */
-       nfs4_verifier   se_confirm;         /* response */
-};
-
-struct nfsd4_setclientid_confirm {
-       clientid_t      sc_clientid;
-       nfs4_verifier   sc_confirm;
-};
-
-/* also used for NVERIFY */
-struct nfsd4_verify {
-       u32             ve_bmval[3];        /* request */
-       u32             ve_attrlen;         /* request */
-       char *          ve_attrval;         /* request */
-};
-
-struct nfsd4_write {
-       stateid_t       wr_stateid;         /* request */
-       u64             wr_offset;          /* request */
-       u32             wr_stable_how;      /* request */
-       u32             wr_buflen;          /* request */
-       int             wr_vlen;
-
-       u32             wr_bytes_written;   /* response */
-       u32             wr_how_written;     /* response */
-       nfs4_verifier   wr_verifier;        /* response */
-};
-
-struct nfsd4_exchange_id {
-       nfs4_verifier   verifier;
-       struct xdr_netobj clname;
-       u32             flags;
-       clientid_t      clientid;
-       u32             seqid;
-       int             spa_how;
-};
-
-struct nfsd4_sequence {
-       struct nfs4_sessionid   sessionid;              /* request/response */
-       u32                     seqid;                  /* request/response */
-       u32                     slotid;                 /* request/response */
-       u32                     maxslots;               /* request/response */
-       u32                     cachethis;              /* request */
-#if 0
-       u32                     target_maxslots;        /* response */
-       u32                     status_flags;           /* response */
-#endif /* not yet */
-};
-
-struct nfsd4_destroy_session {
-       struct nfs4_sessionid   sessionid;
-};
-
-struct nfsd4_op {
-       int                                     opnum;
-       __be32                                  status;
-       union {
-               struct nfsd4_access             access;
-               struct nfsd4_close              close;
-               struct nfsd4_commit             commit;
-               struct nfsd4_create             create;
-               struct nfsd4_delegreturn        delegreturn;
-               struct nfsd4_getattr            getattr;
-               struct svc_fh *                 getfh;
-               struct nfsd4_link               link;
-               struct nfsd4_lock               lock;
-               struct nfsd4_lockt              lockt;
-               struct nfsd4_locku              locku;
-               struct nfsd4_lookup             lookup;
-               struct nfsd4_verify             nverify;
-               struct nfsd4_open               open;
-               struct nfsd4_open_confirm       open_confirm;
-               struct nfsd4_open_downgrade     open_downgrade;
-               struct nfsd4_putfh              putfh;
-               struct nfsd4_read               read;
-               struct nfsd4_readdir            readdir;
-               struct nfsd4_readlink           readlink;
-               struct nfsd4_remove             remove;
-               struct nfsd4_rename             rename;
-               clientid_t                      renew;
-               struct nfsd4_secinfo            secinfo;
-               struct nfsd4_setattr            setattr;
-               struct nfsd4_setclientid        setclientid;
-               struct nfsd4_setclientid_confirm setclientid_confirm;
-               struct nfsd4_verify             verify;
-               struct nfsd4_write              write;
-               struct nfsd4_release_lockowner  release_lockowner;
-
-               /* NFSv4.1 */
-               struct nfsd4_exchange_id        exchange_id;
-               struct nfsd4_create_session     create_session;
-               struct nfsd4_destroy_session    destroy_session;
-               struct nfsd4_sequence           sequence;
-       } u;
-       struct nfs4_replay *                    replay;
-};
-
-struct nfsd4_compoundargs {
-       /* scratch variables for XDR decode */
-       __be32 *                        p;
-       __be32 *                        end;
-       struct page **                  pagelist;
-       int                             pagelen;
-       __be32                          tmp[8];
-       __be32 *                        tmpp;
-       struct tmpbuf {
-               struct tmpbuf *next;
-               void (*release)(const void *);
-               void *buf;
-       }                               *to_free;
-
-       struct svc_rqst                 *rqstp;
-
-       u32                             taglen;
-       char *                          tag;
-       u32                             minorversion;
-       u32                             opcnt;
-       struct nfsd4_op                 *ops;
-       struct nfsd4_op                 iops[8];
-};
-
-struct nfsd4_compoundres {
-       /* scratch variables for XDR encode */
-       __be32 *                        p;
-       __be32 *                        end;
-       struct xdr_buf *                xbuf;
-       struct svc_rqst *               rqstp;
-
-       u32                             taglen;
-       char *                          tag;
-       u32                             opcnt;
-       __be32 *                        tagp; /* tag, opcount encode location */
-       struct nfsd4_compound_state     cstate;
-};
-
-static inline bool nfsd4_is_solo_sequence(struct nfsd4_compoundres *resp)
-{
-       struct nfsd4_compoundargs *args = resp->rqstp->rq_argp;
-       return resp->opcnt == 1 && args->ops[0].opnum == OP_SEQUENCE;
-}
-
-static inline bool nfsd4_not_cached(struct nfsd4_compoundres *resp)
-{
-       return !resp->cstate.slot->sl_cachethis || nfsd4_is_solo_sequence(resp);
-}
-
-#define NFS4_SVC_XDRSIZE               sizeof(struct nfsd4_compoundargs)
-
-static inline void
-set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp)
-{
-       BUG_ON(!fhp->fh_pre_saved || !fhp->fh_post_saved);
-       cinfo->atomic = 1;
-       cinfo->change_supported = IS_I_VERSION(fhp->fh_dentry->d_inode);
-       if (cinfo->change_supported) {
-               cinfo->before_change = fhp->fh_pre_change;
-               cinfo->after_change = fhp->fh_post_change;
-       } else {
-               cinfo->before_ctime_sec = fhp->fh_pre_ctime.tv_sec;
-               cinfo->before_ctime_nsec = fhp->fh_pre_ctime.tv_nsec;
-               cinfo->after_ctime_sec = fhp->fh_post_attr.ctime.tv_sec;
-               cinfo->after_ctime_nsec = fhp->fh_post_attr.ctime.tv_nsec;
-       }
-}
-
-int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *);
-int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *,
-               struct nfsd4_compoundargs *);
-int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *,
-               struct nfsd4_compoundres *);
-void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *);
-void nfsd4_encode_replay(struct nfsd4_compoundres *resp, struct nfsd4_op *op);
-__be32 nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
-                      struct dentry *dentry, __be32 *buffer, int *countp,
-                      u32 *bmval, struct svc_rqst *, int ignore_crossmnt);
-extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *,
-               struct nfsd4_setclientid *setclid);
-extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *,
-               struct nfsd4_setclientid_confirm *setclientid_confirm);
-extern void nfsd4_store_cache_entry(struct nfsd4_compoundres *resp);
-extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
-               struct nfsd4_sequence *seq);
-extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *,
-struct nfsd4_exchange_id *);
-               extern __be32 nfsd4_create_session(struct svc_rqst *,
-               struct nfsd4_compound_state *,
-               struct nfsd4_create_session *);
-extern __be32 nfsd4_sequence(struct svc_rqst *,
-               struct nfsd4_compound_state *,
-               struct nfsd4_sequence *);
-extern __be32 nfsd4_destroy_session(struct svc_rqst *,
-               struct nfsd4_compound_state *,
-               struct nfsd4_destroy_session *);
-extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
-               struct nfsd4_open *open);
-extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
-               struct svc_fh *current_fh, struct nfsd4_open *open);
-extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *, struct nfsd4_open_confirm *oc);
-extern __be32 nfsd4_close(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *,
-               struct nfsd4_close *close);
-extern __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *,
-               struct nfsd4_open_downgrade *od);
-extern __be32 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *,
-               struct nfsd4_lock *lock);
-extern __be32 nfsd4_lockt(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *,
-               struct nfsd4_lockt *lockt);
-extern __be32 nfsd4_locku(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *,
-               struct nfsd4_locku *locku);
-extern __be32
-nfsd4_release_lockowner(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *,
-               struct nfsd4_release_lockowner *rlockowner);
-extern void nfsd4_release_compoundargs(struct nfsd4_compoundargs *);
-extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp,
-               struct nfsd4_compound_state *, struct nfsd4_delegreturn *dr);
-extern __be32 nfsd4_renew(struct svc_rqst *rqstp,
-                         struct nfsd4_compound_state *, clientid_t *clid);
-#endif
-
-/*
- * Local variables:
- *  c-basic-offset: 8
- * End:
- */