On Tue, Jun 21, 2011 at 03:27:43PM +1000, NeilBrown wrote: > Is it too late in the -rc series for this do you think? I think it is OK - > we have been compiling it out for 4 releases anyway so no-one is using it. > And while the next release isn't 2.6.40, it should have been :-) I figure 2.6.40 == 3.0 in linux kernel-version arithmetic. But it's not a bug fix, and I think we owe it to people to make sure something like a feature removal is in a full set of test kernels before it's in a released kernel. I'll queue it up for 3.1. Time flies. Thanks for keeping track of this. --b. > > Thanks, > NeilBrown > > > From 701528a10b9efa9f90d1df8689c353988f6dc455 Mon Sep 17 00:00:00 2001 > From: NeilBrown <neilb@xxxxxxx> > Date: Tue, 21 Jun 2011 15:22:14 +1000 > Subject: [PATCH] nfsd: Remove deprecated nfsctl system call and related code. > > As promised in feature-removal-schedule.txt it is time to > remove the nfsctl system call. > > Userspace has perferred to not use this call throughout 2.6 and it has been > excluded in the default configuration since 2.6.36 (9 months ago). > > So this patch removes all the code that was being compiled out. > > There are still references to sys_nfsctl in various arch systemcall tables > and related code. These should be cleaned out too, probably in the next > merge window. > > Signed-off-by: NeilBrown <neilb@xxxxxxx> > --- > Documentation/feature-removal-schedule.txt | 10 - > arch/tile/configs/tilegx_defconfig | 1 - > fs/Makefile | 1 - > fs/compat.c | 246 ---------------- > fs/nfsctl.c | 100 ------- > fs/nfsd/Kconfig | 12 - > fs/nfsd/export.c | 418 ---------------------------- > fs/nfsd/lockd.c | 2 - > fs/nfsd/nfsctl.c | 343 ----------------------- > fs/nfsd/nfssvc.c | 7 - > include/linux/compat.h | 9 - > include/linux/nfsd/export.h | 2 - > include/linux/sunrpc/cache.h | 9 - > net/sunrpc/svcauth_unix.c | 78 ----- > 14 files changed, 0 insertions(+), 1238 deletions(-) > delete mode 100644 fs/nfsctl.c > > diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt > index 72e2384..04d726f 100644 > --- a/Documentation/feature-removal-schedule.txt > +++ b/Documentation/feature-removal-schedule.txt > @@ -491,16 +491,6 @@ Who: Wey-Yi Guy <wey-yi.w.guy@xxxxxxxxx> > > ---------------------------- > > -What: access to nfsd auth cache through sys_nfsservctl or '.' files > - in the 'nfsd' filesystem. > -When: 2.6.40 > -Why: This is a legacy interface which have been replaced by a more > - dynamic cache. Continuing to maintain this interface is an > - unnecessary burden. > -Who: NeilBrown <neilb@xxxxxxx> > - > ----------------------------- > - > What: cancel_rearming_delayed_work[queue]() > When: 2.6.39 > > diff --git a/arch/tile/configs/tilegx_defconfig b/arch/tile/configs/tilegx_defconfig > index 09f1c7f..2ad73fb 100644 > --- a/arch/tile/configs/tilegx_defconfig > +++ b/arch/tile/configs/tilegx_defconfig > @@ -1479,7 +1479,6 @@ CONFIG_NFS_FSCACHE=y > CONFIG_NFS_USE_KERNEL_DNS=y > # CONFIG_NFS_USE_NEW_IDMAPPER is not set > CONFIG_NFSD=m > -CONFIG_NFSD_DEPRECATED=y > CONFIG_NFSD_V2_ACL=y > CONFIG_NFSD_V3=y > CONFIG_NFSD_V3_ACL=y > diff --git a/fs/Makefile b/fs/Makefile > index fb68c2b..afc1096 100644 > --- a/fs/Makefile > +++ b/fs/Makefile > @@ -29,7 +29,6 @@ obj-$(CONFIG_EVENTFD) += eventfd.o > obj-$(CONFIG_AIO) += aio.o > obj-$(CONFIG_FILE_LOCKING) += locks.o > obj-$(CONFIG_COMPAT) += compat.o compat_ioctl.o > -obj-$(CONFIG_NFSD_DEPRECATED) += nfsctl.o > obj-$(CONFIG_BINFMT_AOUT) += binfmt_aout.o > obj-$(CONFIG_BINFMT_EM86) += binfmt_em86.o > obj-$(CONFIG_BINFMT_MISC) += binfmt_misc.o > diff --git a/fs/compat.c b/fs/compat.c > index 0ea0083..0b48d01 100644 > --- a/fs/compat.c > +++ b/fs/compat.c > @@ -1675,256 +1675,10 @@ asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds, > } > #endif /* HAVE_SET_RESTORE_SIGMASK */ > > -#if (defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE)) && !defined(CONFIG_NFSD_DEPRECATED) > -/* Stuff for NFS server syscalls... */ > -struct compat_nfsctl_svc { > - u16 svc32_port; > - s32 svc32_nthreads; > -}; > - > -struct compat_nfsctl_client { > - s8 cl32_ident[NFSCLNT_IDMAX+1]; > - s32 cl32_naddr; > - struct in_addr cl32_addrlist[NFSCLNT_ADDRMAX]; > - s32 cl32_fhkeytype; > - s32 cl32_fhkeylen; > - u8 cl32_fhkey[NFSCLNT_KEYMAX]; > -}; > - > -struct compat_nfsctl_export { > - char ex32_client[NFSCLNT_IDMAX+1]; > - char ex32_path[NFS_MAXPATHLEN+1]; > - compat_dev_t ex32_dev; > - compat_ino_t ex32_ino; > - compat_int_t ex32_flags; > - __compat_uid_t ex32_anon_uid; > - __compat_gid_t ex32_anon_gid; > -}; > - > -struct compat_nfsctl_fdparm { > - struct sockaddr gd32_addr; > - s8 gd32_path[NFS_MAXPATHLEN+1]; > - compat_int_t gd32_version; > -}; > - > -struct compat_nfsctl_fsparm { > - struct sockaddr gd32_addr; > - s8 gd32_path[NFS_MAXPATHLEN+1]; > - compat_int_t gd32_maxlen; > -}; > - > -struct compat_nfsctl_arg { > - compat_int_t ca32_version; /* safeguard */ > - union { > - struct compat_nfsctl_svc u32_svc; > - struct compat_nfsctl_client u32_client; > - struct compat_nfsctl_export u32_export; > - struct compat_nfsctl_fdparm u32_getfd; > - struct compat_nfsctl_fsparm u32_getfs; > - } u; > -#define ca32_svc u.u32_svc > -#define ca32_client u.u32_client > -#define ca32_export u.u32_export > -#define ca32_getfd u.u32_getfd > -#define ca32_getfs u.u32_getfs > -}; > - > -union compat_nfsctl_res { > - __u8 cr32_getfh[NFS_FHSIZE]; > - struct knfsd_fh cr32_getfs; > -}; > - > -static int compat_nfs_svc_trans(struct nfsctl_arg *karg, > - struct compat_nfsctl_arg __user *arg) > -{ > - if (!access_ok(VERIFY_READ, &arg->ca32_svc, sizeof(arg->ca32_svc)) || > - get_user(karg->ca_version, &arg->ca32_version) || > - __get_user(karg->ca_svc.svc_port, &arg->ca32_svc.svc32_port) || > - __get_user(karg->ca_svc.svc_nthreads, > - &arg->ca32_svc.svc32_nthreads)) > - return -EFAULT; > - return 0; > -} > - > -static int compat_nfs_clnt_trans(struct nfsctl_arg *karg, > - struct compat_nfsctl_arg __user *arg) > -{ > - if (!access_ok(VERIFY_READ, &arg->ca32_client, > - sizeof(arg->ca32_client)) || > - get_user(karg->ca_version, &arg->ca32_version) || > - __copy_from_user(&karg->ca_client.cl_ident[0], > - &arg->ca32_client.cl32_ident[0], > - NFSCLNT_IDMAX) || > - __get_user(karg->ca_client.cl_naddr, > - &arg->ca32_client.cl32_naddr) || > - __copy_from_user(&karg->ca_client.cl_addrlist[0], > - &arg->ca32_client.cl32_addrlist[0], > - (sizeof(struct in_addr) * NFSCLNT_ADDRMAX)) || > - __get_user(karg->ca_client.cl_fhkeytype, > - &arg->ca32_client.cl32_fhkeytype) || > - __get_user(karg->ca_client.cl_fhkeylen, > - &arg->ca32_client.cl32_fhkeylen) || > - __copy_from_user(&karg->ca_client.cl_fhkey[0], > - &arg->ca32_client.cl32_fhkey[0], > - NFSCLNT_KEYMAX)) > - return -EFAULT; > - > - return 0; > -} > - > -static int compat_nfs_exp_trans(struct nfsctl_arg *karg, > - struct compat_nfsctl_arg __user *arg) > -{ > - if (!access_ok(VERIFY_READ, &arg->ca32_export, > - sizeof(arg->ca32_export)) || > - get_user(karg->ca_version, &arg->ca32_version) || > - __copy_from_user(&karg->ca_export.ex_client[0], > - &arg->ca32_export.ex32_client[0], > - NFSCLNT_IDMAX) || > - __copy_from_user(&karg->ca_export.ex_path[0], > - &arg->ca32_export.ex32_path[0], > - NFS_MAXPATHLEN) || > - __get_user(karg->ca_export.ex_dev, > - &arg->ca32_export.ex32_dev) || > - __get_user(karg->ca_export.ex_ino, > - &arg->ca32_export.ex32_ino) || > - __get_user(karg->ca_export.ex_flags, > - &arg->ca32_export.ex32_flags) || > - __get_user(karg->ca_export.ex_anon_uid, > - &arg->ca32_export.ex32_anon_uid) || > - __get_user(karg->ca_export.ex_anon_gid, > - &arg->ca32_export.ex32_anon_gid)) > - return -EFAULT; > - SET_UID(karg->ca_export.ex_anon_uid, karg->ca_export.ex_anon_uid); > - SET_GID(karg->ca_export.ex_anon_gid, karg->ca_export.ex_anon_gid); > - > - return 0; > -} > - > -static int compat_nfs_getfd_trans(struct nfsctl_arg *karg, > - struct compat_nfsctl_arg __user *arg) > -{ > - if (!access_ok(VERIFY_READ, &arg->ca32_getfd, > - sizeof(arg->ca32_getfd)) || > - get_user(karg->ca_version, &arg->ca32_version) || > - __copy_from_user(&karg->ca_getfd.gd_addr, > - &arg->ca32_getfd.gd32_addr, > - (sizeof(struct sockaddr))) || > - __copy_from_user(&karg->ca_getfd.gd_path, > - &arg->ca32_getfd.gd32_path, > - (NFS_MAXPATHLEN+1)) || > - __get_user(karg->ca_getfd.gd_version, > - &arg->ca32_getfd.gd32_version)) > - return -EFAULT; > - > - return 0; > -} > - > -static int compat_nfs_getfs_trans(struct nfsctl_arg *karg, > - struct compat_nfsctl_arg __user *arg) > -{ > - if (!access_ok(VERIFY_READ,&arg->ca32_getfs,sizeof(arg->ca32_getfs)) || > - get_user(karg->ca_version, &arg->ca32_version) || > - __copy_from_user(&karg->ca_getfs.gd_addr, > - &arg->ca32_getfs.gd32_addr, > - (sizeof(struct sockaddr))) || > - __copy_from_user(&karg->ca_getfs.gd_path, > - &arg->ca32_getfs.gd32_path, > - (NFS_MAXPATHLEN+1)) || > - __get_user(karg->ca_getfs.gd_maxlen, > - &arg->ca32_getfs.gd32_maxlen)) > - return -EFAULT; > - > - return 0; > -} > - > -/* This really doesn't need translations, we are only passing > - * back a union which contains opaque nfs file handle data. > - */ > -static int compat_nfs_getfh_res_trans(union nfsctl_res *kres, > - union compat_nfsctl_res __user *res) > -{ > - int err; > - > - err = copy_to_user(res, kres, sizeof(*res)); > - > - return (err) ? -EFAULT : 0; > -} > - > -asmlinkage long compat_sys_nfsservctl(int cmd, > - struct compat_nfsctl_arg __user *arg, > - union compat_nfsctl_res __user *res) > -{ > - struct nfsctl_arg *karg; > - union nfsctl_res *kres; > - mm_segment_t oldfs; > - int err; > - > - karg = kmalloc(sizeof(*karg), GFP_USER); > - kres = kmalloc(sizeof(*kres), GFP_USER); > - if(!karg || !kres) { > - err = -ENOMEM; > - goto done; > - } > - > - switch(cmd) { > - case NFSCTL_SVC: > - err = compat_nfs_svc_trans(karg, arg); > - break; > - > - case NFSCTL_ADDCLIENT: > - err = compat_nfs_clnt_trans(karg, arg); > - break; > - > - case NFSCTL_DELCLIENT: > - err = compat_nfs_clnt_trans(karg, arg); > - break; > - > - case NFSCTL_EXPORT: > - case NFSCTL_UNEXPORT: > - err = compat_nfs_exp_trans(karg, arg); > - break; > - > - case NFSCTL_GETFD: > - err = compat_nfs_getfd_trans(karg, arg); > - break; > - > - case NFSCTL_GETFS: > - err = compat_nfs_getfs_trans(karg, arg); > - break; > - > - default: > - err = -EINVAL; > - break; > - } > - > - if (err) > - goto done; > - > - oldfs = get_fs(); > - set_fs(KERNEL_DS); > - /* The __user pointer casts are valid because of the set_fs() */ > - err = sys_nfsservctl(cmd, (void __user *) karg, (void __user *) kres); > - set_fs(oldfs); > - > - if (err) > - goto done; > - > - if((cmd == NFSCTL_GETFD) || > - (cmd == NFSCTL_GETFS)) > - err = compat_nfs_getfh_res_trans(kres, res); > - > -done: > - kfree(karg); > - kfree(kres); > - return err; > -} > -#else /* !NFSD */ > long asmlinkage compat_sys_nfsservctl(int cmd, void *notused, void *notused2) > { > return sys_ni_syscall(); > } > -#endif > > #ifdef CONFIG_EPOLL > > diff --git a/fs/nfsctl.c b/fs/nfsctl.c > deleted file mode 100644 > index 124e8fc..0000000 > --- a/fs/nfsctl.c > +++ /dev/null > @@ -1,100 +0,0 @@ > -/* > - * fs/nfsctl.c > - * > - * This should eventually move to userland. > - * > - */ > -#include <linux/types.h> > -#include <linux/file.h> > -#include <linux/fs.h> > -#include <linux/nfsd/syscall.h> > -#include <linux/cred.h> > -#include <linux/sched.h> > -#include <linux/linkage.h> > -#include <linux/namei.h> > -#include <linux/mount.h> > -#include <linux/syscalls.h> > -#include <asm/uaccess.h> > - > -/* > - * open a file on nfsd fs > - */ > - > -static struct file *do_open(char *name, int flags) > -{ > - struct vfsmount *mnt; > - struct file *file; > - > - mnt = do_kern_mount("nfsd", 0, "nfsd", NULL); > - if (IS_ERR(mnt)) > - return (struct file *)mnt; > - > - file = file_open_root(mnt->mnt_root, mnt, name, flags); > - > - mntput(mnt); /* drop do_kern_mount reference */ > - return file; > -} > - > -static struct { > - char *name; int wsize; int rsize; > -} map[] = { > - [NFSCTL_SVC] = { > - .name = ".svc", > - .wsize = sizeof(struct nfsctl_svc) > - }, > - [NFSCTL_ADDCLIENT] = { > - .name = ".add", > - .wsize = sizeof(struct nfsctl_client) > - }, > - [NFSCTL_DELCLIENT] = { > - .name = ".del", > - .wsize = sizeof(struct nfsctl_client) > - }, > - [NFSCTL_EXPORT] = { > - .name = ".export", > - .wsize = sizeof(struct nfsctl_export) > - }, > - [NFSCTL_UNEXPORT] = { > - .name = ".unexport", > - .wsize = sizeof(struct nfsctl_export) > - }, > - [NFSCTL_GETFD] = { > - .name = ".getfd", > - .wsize = sizeof(struct nfsctl_fdparm), > - .rsize = NFS_FHSIZE > - }, > - [NFSCTL_GETFS] = { > - .name = ".getfs", > - .wsize = sizeof(struct nfsctl_fsparm), > - .rsize = sizeof(struct knfsd_fh) > - }, > -}; > - > -SYSCALL_DEFINE3(nfsservctl, int, cmd, struct nfsctl_arg __user *, arg, > - void __user *, res) > -{ > - struct file *file; > - void __user *p = &arg->u; > - int version; > - int err; > - > - if (copy_from_user(&version, &arg->ca_version, sizeof(int))) > - return -EFAULT; > - > - if (version != NFSCTL_VERSION) > - return -EINVAL; > - > - if (cmd < 0 || cmd >= ARRAY_SIZE(map) || !map[cmd].name) > - return -EINVAL; > - > - file = do_open(map[cmd].name, map[cmd].rsize ? O_RDWR : O_WRONLY); > - if (IS_ERR(file)) > - return PTR_ERR(file); > - err = file->f_op->write(file, p, map[cmd].wsize, &file->f_pos); > - if (err >= 0 && map[cmd].rsize) > - err = file->f_op->read(file, res, map[cmd].rsize, &file->f_pos); > - if (err >= 0) > - err = 0; > - fput(file); > - return err; > -} > diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig > index 18b3e89..4264377 100644 > --- a/fs/nfsd/Kconfig > +++ b/fs/nfsd/Kconfig > @@ -28,18 +28,6 @@ config NFSD > > If unsure, say N. > > -config NFSD_DEPRECATED > - bool "Include support for deprecated syscall interface to NFSD" > - depends on NFSD > - default y > - help > - The syscall interface to nfsd was obsoleted in 2.6.0 by a new > - filesystem based interface. The old interface is due for removal > - in 2.6.40. If you wish to remove the interface before then > - say N. > - > - In unsure, say Y. > - > config NFSD_V2_ACL > bool > depends on NFSD > diff --git a/fs/nfsd/export.c b/fs/nfsd/export.c > index b9566e4..f4cc1e2 100644 > --- a/fs/nfsd/export.c > +++ b/fs/nfsd/export.c > @@ -797,58 +797,6 @@ exp_find_key(svc_client *clp, int fsid_type, u32 *fsidv, struct cache_req *reqp) > return ek; > } > > -#ifdef CONFIG_NFSD_DEPRECATED > -static int exp_set_key(svc_client *clp, int fsid_type, u32 *fsidv, > - struct svc_export *exp) > -{ > - struct svc_expkey key, *ek; > - > - key.ek_client = clp; > - key.ek_fsidtype = fsid_type; > - memcpy(key.ek_fsid, fsidv, key_len(fsid_type)); > - key.ek_path = exp->ex_path; > - key.h.expiry_time = NEVER; > - key.h.flags = 0; > - > - ek = svc_expkey_lookup(&key); > - if (ek) > - ek = svc_expkey_update(&key,ek); > - if (ek) { > - cache_put(&ek->h, &svc_expkey_cache); > - return 0; > - } > - return -ENOMEM; > -} > - > -/* > - * Find the client's export entry matching xdev/xino. > - */ > -static inline struct svc_expkey * > -exp_get_key(svc_client *clp, dev_t dev, ino_t ino) > -{ > - u32 fsidv[3]; > - > - if (old_valid_dev(dev)) { > - mk_fsid(FSID_DEV, fsidv, dev, ino, 0, NULL); > - return exp_find_key(clp, FSID_DEV, fsidv, NULL); > - } > - mk_fsid(FSID_ENCODE_DEV, fsidv, dev, ino, 0, NULL); > - return exp_find_key(clp, FSID_ENCODE_DEV, fsidv, NULL); > -} > - > -/* > - * Find the client's export entry matching fsid > - */ > -static inline struct svc_expkey * > -exp_get_fsid_key(svc_client *clp, int fsid) > -{ > - u32 fsidv[2]; > - > - mk_fsid(FSID_NUM, fsidv, 0, 0, fsid, NULL); > - > - return exp_find_key(clp, FSID_NUM, fsidv, NULL); > -} > -#endif > > static svc_export *exp_get_by_name(svc_client *clp, const struct path *path, > struct cache_req *reqp) > @@ -890,275 +838,7 @@ static struct svc_export *exp_parent(svc_client *clp, struct path *path) > return exp; > } > > -#ifdef CONFIG_NFSD_DEPRECATED > -/* > - * Hashtable locking. Write locks are placed only by user processes > - * wanting to modify export information. > - * Write locking only done in this file. Read locking > - * needed externally. > - */ > - > -static DECLARE_RWSEM(hash_sem); > - > -void > -exp_readlock(void) > -{ > - down_read(&hash_sem); > -} > - > -static inline void > -exp_writelock(void) > -{ > - down_write(&hash_sem); > -} > - > -void > -exp_readunlock(void) > -{ > - up_read(&hash_sem); > -} > - > -static inline void > -exp_writeunlock(void) > -{ > - up_write(&hash_sem); > -} > -#else > - > -/* hash_sem not needed once deprecated interface is removed */ > -void exp_readlock(void) {} > -static inline void exp_writelock(void){} > -void exp_readunlock(void) {} > -static inline void exp_writeunlock(void){} > - > -#endif > - > -#ifdef CONFIG_NFSD_DEPRECATED > -static void exp_do_unexport(svc_export *unexp); > -static int exp_verify_string(char *cp, int max); > - > -static void exp_fsid_unhash(struct svc_export *exp) > -{ > - struct svc_expkey *ek; > - > - if ((exp->ex_flags & NFSEXP_FSID) == 0) > - return; > - > - ek = exp_get_fsid_key(exp->ex_client, exp->ex_fsid); > - if (!IS_ERR(ek)) { > - sunrpc_invalidate(&ek->h, &svc_expkey_cache); > - cache_put(&ek->h, &svc_expkey_cache); > - } > -} > - > -static int exp_fsid_hash(svc_client *clp, struct svc_export *exp) > -{ > - u32 fsid[2]; > - > - if ((exp->ex_flags & NFSEXP_FSID) == 0) > - return 0; > - > - mk_fsid(FSID_NUM, fsid, 0, 0, exp->ex_fsid, NULL); > - return exp_set_key(clp, FSID_NUM, fsid, exp); > -} > - > -static int exp_hash(struct auth_domain *clp, struct svc_export *exp) > -{ > - u32 fsid[2]; > - struct inode *inode = exp->ex_path.dentry->d_inode; > - dev_t dev = inode->i_sb->s_dev; > - > - if (old_valid_dev(dev)) { > - mk_fsid(FSID_DEV, fsid, dev, inode->i_ino, 0, NULL); > - return exp_set_key(clp, FSID_DEV, fsid, exp); > - } > - mk_fsid(FSID_ENCODE_DEV, fsid, dev, inode->i_ino, 0, NULL); > - return exp_set_key(clp, FSID_ENCODE_DEV, fsid, exp); > -} > > -static void exp_unhash(struct svc_export *exp) > -{ > - struct svc_expkey *ek; > - struct inode *inode = exp->ex_path.dentry->d_inode; > - > - ek = exp_get_key(exp->ex_client, inode->i_sb->s_dev, inode->i_ino); > - if (!IS_ERR(ek)) { > - sunrpc_invalidate(&ek->h, &svc_expkey_cache); > - cache_put(&ek->h, &svc_expkey_cache); > - } > -} > - > -/* > - * Export a file system. > - */ > -int > -exp_export(struct nfsctl_export *nxp) > -{ > - svc_client *clp; > - struct svc_export *exp = NULL; > - struct svc_export new; > - struct svc_expkey *fsid_key = NULL; > - struct path path; > - int err; > - > - /* Consistency check */ > - err = -EINVAL; > - if (!exp_verify_string(nxp->ex_path, NFS_MAXPATHLEN) || > - !exp_verify_string(nxp->ex_client, NFSCLNT_IDMAX)) > - goto out; > - > - dprintk("exp_export called for %s:%s (%x/%ld fl %x).\n", > - nxp->ex_client, nxp->ex_path, > - (unsigned)nxp->ex_dev, (long)nxp->ex_ino, > - nxp->ex_flags); > - > - /* Try to lock the export table for update */ > - exp_writelock(); > - > - /* Look up client info */ > - if (!(clp = auth_domain_find(nxp->ex_client))) > - goto out_unlock; > - > - > - /* Look up the dentry */ > - err = kern_path(nxp->ex_path, 0, &path); > - if (err) > - goto out_put_clp; > - err = -EINVAL; > - > - exp = exp_get_by_name(clp, &path, NULL); > - > - memset(&new, 0, sizeof(new)); > - > - /* must make sure there won't be an ex_fsid clash */ > - if ((nxp->ex_flags & NFSEXP_FSID) && > - (!IS_ERR(fsid_key = exp_get_fsid_key(clp, nxp->ex_dev))) && > - fsid_key->ek_path.mnt && > - (fsid_key->ek_path.mnt != path.mnt || > - fsid_key->ek_path.dentry != path.dentry)) > - goto finish; > - > - if (!IS_ERR(exp)) { > - /* just a flags/id/fsid update */ > - > - exp_fsid_unhash(exp); > - exp->ex_flags = nxp->ex_flags; > - exp->ex_anon_uid = nxp->ex_anon_uid; > - exp->ex_anon_gid = nxp->ex_anon_gid; > - exp->ex_fsid = nxp->ex_dev; > - > - err = exp_fsid_hash(clp, exp); > - goto finish; > - } > - > - err = check_export(path.dentry->d_inode, &nxp->ex_flags, NULL); > - if (err) goto finish; > - > - err = -ENOMEM; > - > - dprintk("nfsd: creating export entry %p for client %p\n", exp, clp); > - > - new.h.expiry_time = NEVER; > - new.h.flags = 0; > - new.ex_pathname = kstrdup(nxp->ex_path, GFP_KERNEL); > - if (!new.ex_pathname) > - goto finish; > - new.ex_client = clp; > - new.ex_path = path; > - new.ex_flags = nxp->ex_flags; > - new.ex_anon_uid = nxp->ex_anon_uid; > - new.ex_anon_gid = nxp->ex_anon_gid; > - new.ex_fsid = nxp->ex_dev; > - > - exp = svc_export_lookup(&new); > - if (exp) > - exp = svc_export_update(&new, exp); > - > - if (!exp) > - goto finish; > - > - if (exp_hash(clp, exp) || > - exp_fsid_hash(clp, exp)) { > - /* failed to create at least one index */ > - exp_do_unexport(exp); > - cache_flush(); > - } else > - err = 0; > -finish: > - kfree(new.ex_pathname); > - if (!IS_ERR_OR_NULL(exp)) > - exp_put(exp); > - if (!IS_ERR_OR_NULL(fsid_key)) > - cache_put(&fsid_key->h, &svc_expkey_cache); > - path_put(&path); > -out_put_clp: > - auth_domain_put(clp); > -out_unlock: > - exp_writeunlock(); > -out: > - return err; > -} > - > -/* > - * Unexport a file system. The export entry has already > - * been removed from the client's list of exported fs's. > - */ > -static void > -exp_do_unexport(svc_export *unexp) > -{ > - sunrpc_invalidate(&unexp->h, &svc_export_cache); > - exp_unhash(unexp); > - exp_fsid_unhash(unexp); > -} > - > - > -/* > - * unexport syscall. > - */ > -int > -exp_unexport(struct nfsctl_export *nxp) > -{ > - struct auth_domain *dom; > - svc_export *exp; > - struct path path; > - int err; > - > - /* Consistency check */ > - if (!exp_verify_string(nxp->ex_path, NFS_MAXPATHLEN) || > - !exp_verify_string(nxp->ex_client, NFSCLNT_IDMAX)) > - return -EINVAL; > - > - exp_writelock(); > - > - err = -EINVAL; > - dom = auth_domain_find(nxp->ex_client); > - if (!dom) { > - dprintk("nfsd: unexport couldn't find %s\n", nxp->ex_client); > - goto out_unlock; > - } > - > - err = kern_path(nxp->ex_path, 0, &path); > - if (err) > - goto out_domain; > - > - err = -EINVAL; > - exp = exp_get_by_name(dom, &path, NULL); > - path_put(&path); > - if (IS_ERR(exp)) > - goto out_domain; > - > - exp_do_unexport(exp); > - exp_put(exp); > - err = 0; > - > -out_domain: > - auth_domain_put(dom); > - cache_flush(); > -out_unlock: > - exp_writeunlock(); > - return err; > -} > -#endif /* CONFIG_NFSD_DEPRECATED */ > > /* > * Obtain the root fh on behalf of a client. > @@ -1367,7 +1047,6 @@ static void *e_start(struct seq_file *m, loff_t *pos) > unsigned hash, export; > struct cache_head *ch; > > - exp_readlock(); > read_lock(&svc_export_cache.hash_lock); > if (!n--) > return SEQ_START_TOKEN; > @@ -1418,7 +1097,6 @@ static void e_stop(struct seq_file *m, void *p) > __releases(svc_export_cache.hash_lock) > { > read_unlock(&svc_export_cache.hash_lock); > - exp_readunlock(); > } > > static struct flags { > @@ -1550,97 +1228,6 @@ const struct seq_operations nfs_exports_op = { > .show = e_show, > }; > > -#ifdef CONFIG_NFSD_DEPRECATED > -/* > - * Add or modify a client. > - * Change requests may involve the list of host addresses. The list of > - * exports and possibly existing uid maps are left untouched. > - */ > -int > -exp_addclient(struct nfsctl_client *ncp) > -{ > - struct auth_domain *dom; > - int i, err; > - struct in6_addr addr6; > - > - /* First, consistency check. */ > - err = -EINVAL; > - if (! exp_verify_string(ncp->cl_ident, NFSCLNT_IDMAX)) > - goto out; > - if (ncp->cl_naddr > NFSCLNT_ADDRMAX) > - goto out; > - > - /* Lock the hashtable */ > - exp_writelock(); > - > - dom = unix_domain_find(ncp->cl_ident); > - > - err = -ENOMEM; > - if (!dom) > - goto out_unlock; > - > - /* Insert client into hashtable. */ > - for (i = 0; i < ncp->cl_naddr; i++) { > - ipv6_addr_set_v4mapped(ncp->cl_addrlist[i].s_addr, &addr6); > - auth_unix_add_addr(&init_net, &addr6, dom); > - } > - auth_unix_forget_old(dom); > - auth_domain_put(dom); > - > - err = 0; > - > -out_unlock: > - exp_writeunlock(); > -out: > - return err; > -} > - > -/* > - * Delete a client given an identifier. > - */ > -int > -exp_delclient(struct nfsctl_client *ncp) > -{ > - int err; > - struct auth_domain *dom; > - > - err = -EINVAL; > - if (!exp_verify_string(ncp->cl_ident, NFSCLNT_IDMAX)) > - goto out; > - > - /* Lock the hashtable */ > - exp_writelock(); > - > - dom = auth_domain_find(ncp->cl_ident); > - /* just make sure that no addresses work > - * and that it will expire soon > - */ > - if (dom) { > - err = auth_unix_forget_old(dom); > - auth_domain_put(dom); > - } > - > - exp_writeunlock(); > -out: > - return err; > -} > - > -/* > - * Verify that string is non-empty and does not exceed max length. > - */ > -static int > -exp_verify_string(char *cp, int max) > -{ > - int i; > - > - for (i = 0; i < max; i++) > - if (!cp[i]) > - return i; > - cp[i] = 0; > - printk(KERN_NOTICE "nfsd: couldn't validate string %s\n", cp); > - return 0; > -} > -#endif /* CONFIG_NFSD_DEPRECATED */ > > /* > * Initialize the exports module. > @@ -1667,10 +1254,8 @@ nfsd_export_init(void) > void > nfsd_export_flush(void) > { > - exp_writelock(); > cache_purge(&svc_expkey_cache); > cache_purge(&svc_export_cache); > - exp_writeunlock(); > } > > /* > @@ -1682,12 +1267,9 @@ nfsd_export_shutdown(void) > > dprintk("nfsd: shutting down export module.\n"); > > - exp_writelock(); > - > cache_unregister(&svc_expkey_cache); > cache_unregister(&svc_export_cache); > svcauth_unix_purge(); > > - exp_writeunlock(); > dprintk("nfsd: export shutdown complete.\n"); > } > diff --git a/fs/nfsd/lockd.c b/fs/nfsd/lockd.c > index 7c831a2..77e7a5c 100644 > --- a/fs/nfsd/lockd.c > +++ b/fs/nfsd/lockd.c > @@ -35,10 +35,8 @@ nlm_fopen(struct svc_rqst *rqstp, struct nfs_fh *f, struct file **filp) > memcpy((char*)&fh.fh_handle.fh_base, f->data, f->size); > fh.fh_export = NULL; > > - exp_readlock(); > nfserr = nfsd_open(rqstp, &fh, S_IFREG, NFSD_MAY_LOCK, filp); > fh_put(&fh); > - exp_readunlock(); > /* We return nlm error codes as nlm doesn't know > * about nfsd, but nfsd does know about nlm.. > */ > diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c > index 1f5eae4..5d155c1 100644 > --- a/fs/nfsd/nfsctl.c > +++ b/fs/nfsd/nfsctl.c > @@ -23,15 +23,6 @@ > */ > enum { > NFSD_Root = 1, > -#ifdef CONFIG_NFSD_DEPRECATED > - NFSD_Svc, > - NFSD_Add, > - NFSD_Del, > - NFSD_Export, > - NFSD_Unexport, > - NFSD_Getfd, > - NFSD_Getfs, > -#endif > NFSD_List, > NFSD_Export_features, > NFSD_Fh, > @@ -58,15 +49,6 @@ enum { > /* > * write() for these nodes. > */ > -#ifdef CONFIG_NFSD_DEPRECATED > -static ssize_t write_svc(struct file *file, char *buf, size_t size); > -static ssize_t write_add(struct file *file, char *buf, size_t size); > -static ssize_t write_del(struct file *file, char *buf, size_t size); > -static ssize_t write_export(struct file *file, char *buf, size_t size); > -static ssize_t write_unexport(struct file *file, char *buf, size_t size); > -static ssize_t write_getfd(struct file *file, char *buf, size_t size); > -static ssize_t write_getfs(struct file *file, char *buf, size_t size); > -#endif > static ssize_t write_filehandle(struct file *file, char *buf, size_t size); > static ssize_t write_unlock_ip(struct file *file, char *buf, size_t size); > static ssize_t write_unlock_fs(struct file *file, char *buf, size_t size); > @@ -82,15 +64,6 @@ static ssize_t write_recoverydir(struct file *file, char *buf, size_t size); > #endif > > static ssize_t (*write_op[])(struct file *, char *, size_t) = { > -#ifdef CONFIG_NFSD_DEPRECATED > - [NFSD_Svc] = write_svc, > - [NFSD_Add] = write_add, > - [NFSD_Del] = write_del, > - [NFSD_Export] = write_export, > - [NFSD_Unexport] = write_unexport, > - [NFSD_Getfd] = write_getfd, > - [NFSD_Getfs] = write_getfs, > -#endif > [NFSD_Fh] = write_filehandle, > [NFSD_FO_UnlockIP] = write_unlock_ip, > [NFSD_FO_UnlockFS] = write_unlock_fs, > @@ -129,16 +102,6 @@ static ssize_t nfsctl_transaction_write(struct file *file, const char __user *bu > > static ssize_t nfsctl_transaction_read(struct file *file, char __user *buf, size_t size, loff_t *pos) > { > -#ifdef CONFIG_NFSD_DEPRECATED > - static int warned; > - if (file->f_dentry->d_name.name[0] == '.' && !warned) { > - printk(KERN_INFO > - "Warning: \"%s\" uses deprecated NFSD interface: %s." > - " This will be removed in 2.6.40\n", > - current->comm, file->f_dentry->d_name.name); > - warned = 1; > - } > -#endif > if (! file->private_data) { > /* An attempt to read a transaction file without writing > * causes a 0-byte write so that the file can return > @@ -233,303 +196,6 @@ static const struct file_operations pool_stats_operations = { > * payload - write methods > */ > > -#ifdef CONFIG_NFSD_DEPRECATED > -/** > - * write_svc - Start kernel's NFSD server > - * > - * Deprecated. /proc/fs/nfsd/threads is preferred. > - * Function remains to support old versions of nfs-utils. > - * > - * Input: > - * buf: struct nfsctl_svc > - * svc_port: port number of this > - * server's listener > - * svc_nthreads: number of threads to start > - * size: size in bytes of passed in nfsctl_svc > - * Output: > - * On success: returns zero > - * On error: return code is negative errno value > - */ > -static ssize_t write_svc(struct file *file, char *buf, size_t size) > -{ > - struct nfsctl_svc *data; > - int err; > - if (size < sizeof(*data)) > - return -EINVAL; > - data = (struct nfsctl_svc*) buf; > - err = nfsd_svc(data->svc_port, data->svc_nthreads); > - if (err < 0) > - return err; > - return 0; > -} > - > -/** > - * write_add - Add or modify client entry in auth unix cache > - * > - * Deprecated. /proc/net/rpc/auth.unix.ip is preferred. > - * Function remains to support old versions of nfs-utils. > - * > - * Input: > - * buf: struct nfsctl_client > - * cl_ident: '\0'-terminated C string > - * containing domain name > - * of client > - * cl_naddr: no. of items in cl_addrlist > - * cl_addrlist: array of client addresses > - * cl_fhkeytype: ignored > - * cl_fhkeylen: ignored > - * cl_fhkey: ignored > - * size: size in bytes of passed in nfsctl_client > - * Output: > - * On success: returns zero > - * On error: return code is negative errno value > - * > - * Note: Only AF_INET client addresses are passed in, since > - * nfsctl_client.cl_addrlist contains only in_addr fields for addresses. > - */ > -static ssize_t write_add(struct file *file, char *buf, size_t size) > -{ > - struct nfsctl_client *data; > - if (size < sizeof(*data)) > - return -EINVAL; > - data = (struct nfsctl_client *)buf; > - return exp_addclient(data); > -} > - > -/** > - * write_del - Remove client from auth unix cache > - * > - * Deprecated. /proc/net/rpc/auth.unix.ip is preferred. > - * Function remains to support old versions of nfs-utils. > - * > - * Input: > - * buf: struct nfsctl_client > - * cl_ident: '\0'-terminated C string > - * containing domain name > - * of client > - * cl_naddr: ignored > - * cl_addrlist: ignored > - * cl_fhkeytype: ignored > - * cl_fhkeylen: ignored > - * cl_fhkey: ignored > - * size: size in bytes of passed in nfsctl_client > - * Output: > - * On success: returns zero > - * On error: return code is negative errno value > - * > - * Note: Only AF_INET client addresses are passed in, since > - * nfsctl_client.cl_addrlist contains only in_addr fields for addresses. > - */ > -static ssize_t write_del(struct file *file, char *buf, size_t size) > -{ > - struct nfsctl_client *data; > - if (size < sizeof(*data)) > - return -EINVAL; > - data = (struct nfsctl_client *)buf; > - return exp_delclient(data); > -} > - > -/** > - * write_export - Export part or all of a local file system > - * > - * Deprecated. /proc/net/rpc/{nfsd.export,nfsd.fh} are preferred. > - * Function remains to support old versions of nfs-utils. > - * > - * Input: > - * buf: struct nfsctl_export > - * ex_client: '\0'-terminated C string > - * containing domain name > - * of client allowed to access > - * this export > - * ex_path: '\0'-terminated C string > - * containing pathname of > - * directory in local file system > - * ex_dev: fsid to use for this export > - * ex_ino: ignored > - * ex_flags: export flags for this export > - * ex_anon_uid: UID to use for anonymous > - * requests > - * ex_anon_gid: GID to use for anonymous > - * requests > - * size: size in bytes of passed in nfsctl_export > - * Output: > - * On success: returns zero > - * On error: return code is negative errno value > - */ > -static ssize_t write_export(struct file *file, char *buf, size_t size) > -{ > - struct nfsctl_export *data; > - if (size < sizeof(*data)) > - return -EINVAL; > - data = (struct nfsctl_export*)buf; > - return exp_export(data); > -} > - > -/** > - * write_unexport - Unexport a previously exported file system > - * > - * Deprecated. /proc/net/rpc/{nfsd.export,nfsd.fh} are preferred. > - * Function remains to support old versions of nfs-utils. > - * > - * Input: > - * buf: struct nfsctl_export > - * ex_client: '\0'-terminated C string > - * containing domain name > - * of client no longer allowed > - * to access this export > - * ex_path: '\0'-terminated C string > - * containing pathname of > - * directory in local file system > - * ex_dev: ignored > - * ex_ino: ignored > - * ex_flags: ignored > - * ex_anon_uid: ignored > - * ex_anon_gid: ignored > - * size: size in bytes of passed in nfsctl_export > - * Output: > - * On success: returns zero > - * On error: return code is negative errno value > - */ > -static ssize_t write_unexport(struct file *file, char *buf, size_t size) > -{ > - struct nfsctl_export *data; > - > - if (size < sizeof(*data)) > - return -EINVAL; > - data = (struct nfsctl_export*)buf; > - return exp_unexport(data); > -} > - > -/** > - * write_getfs - Get a variable-length NFS file handle by path > - * > - * Deprecated. /proc/fs/nfsd/filehandle is preferred. > - * Function remains to support old versions of nfs-utils. > - * > - * Input: > - * buf: struct nfsctl_fsparm > - * gd_addr: socket address of client > - * gd_path: '\0'-terminated C string > - * containing pathname of > - * directory in local file system > - * gd_maxlen: maximum size of returned file > - * handle > - * size: size in bytes of passed in nfsctl_fsparm > - * Output: > - * On success: passed-in buffer filled with a knfsd_fh structure > - * (a variable-length raw NFS file handle); > - * return code is the size in bytes of the file handle > - * On error: return code is negative errno value > - * > - * Note: Only AF_INET client addresses are passed in, since gd_addr > - * is the same size as a struct sockaddr_in. > - */ > -static ssize_t write_getfs(struct file *file, char *buf, size_t size) > -{ > - struct nfsctl_fsparm *data; > - struct sockaddr_in *sin; > - struct auth_domain *clp; > - int err = 0; > - struct knfsd_fh *res; > - struct in6_addr in6; > - > - if (size < sizeof(*data)) > - return -EINVAL; > - data = (struct nfsctl_fsparm*)buf; > - err = -EPROTONOSUPPORT; > - if (data->gd_addr.sa_family != AF_INET) > - goto out; > - sin = (struct sockaddr_in *)&data->gd_addr; > - if (data->gd_maxlen > NFS3_FHSIZE) > - data->gd_maxlen = NFS3_FHSIZE; > - > - res = (struct knfsd_fh*)buf; > - > - exp_readlock(); > - > - ipv6_addr_set_v4mapped(sin->sin_addr.s_addr, &in6); > - > - clp = auth_unix_lookup(&init_net, &in6); > - if (!clp) > - err = -EPERM; > - else { > - err = exp_rootfh(clp, data->gd_path, res, data->gd_maxlen); > - auth_domain_put(clp); > - } > - exp_readunlock(); > - if (err == 0) > - err = res->fh_size + offsetof(struct knfsd_fh, fh_base); > - out: > - return err; > -} > - > -/** > - * write_getfd - Get a fixed-length NFS file handle by path (used by mountd) > - * > - * Deprecated. /proc/fs/nfsd/filehandle is preferred. > - * Function remains to support old versions of nfs-utils. > - * > - * Input: > - * buf: struct nfsctl_fdparm > - * gd_addr: socket address of client > - * gd_path: '\0'-terminated C string > - * containing pathname of > - * directory in local file system > - * gd_version: fdparm structure version > - * size: size in bytes of passed in nfsctl_fdparm > - * Output: > - * On success: passed-in buffer filled with nfsctl_res > - * (a fixed-length raw NFS file handle); > - * return code is the size in bytes of the file handle > - * On error: return code is negative errno value > - * > - * Note: Only AF_INET client addresses are passed in, since gd_addr > - * is the same size as a struct sockaddr_in. > - */ > -static ssize_t write_getfd(struct file *file, char *buf, size_t size) > -{ > - struct nfsctl_fdparm *data; > - struct sockaddr_in *sin; > - struct auth_domain *clp; > - int err = 0; > - struct knfsd_fh fh; > - char *res; > - struct in6_addr in6; > - > - if (size < sizeof(*data)) > - return -EINVAL; > - data = (struct nfsctl_fdparm*)buf; > - err = -EPROTONOSUPPORT; > - if (data->gd_addr.sa_family != AF_INET) > - goto out; > - err = -EINVAL; > - if (data->gd_version < 2 || data->gd_version > NFSSVC_MAXVERS) > - goto out; > - > - res = buf; > - sin = (struct sockaddr_in *)&data->gd_addr; > - exp_readlock(); > - > - ipv6_addr_set_v4mapped(sin->sin_addr.s_addr, &in6); > - > - clp = auth_unix_lookup(&init_net, &in6); > - if (!clp) > - err = -EPERM; > - else { > - err = exp_rootfh(clp, data->gd_path, &fh, NFS_FHSIZE); > - auth_domain_put(clp); > - } > - exp_readunlock(); > - > - if (err == 0) { > - memset(res,0, NFS_FHSIZE); > - memcpy(res, &fh.fh_base, fh.fh_size); > - err = NFS_FHSIZE; > - } > - out: > - return err; > -} > -#endif /* CONFIG_NFSD_DEPRECATED */ > > /** > * write_unlock_ip - Release all locks used by a client > @@ -1404,15 +1070,6 @@ static ssize_t write_recoverydir(struct file *file, char *buf, size_t size) > static int nfsd_fill_super(struct super_block * sb, void * data, int silent) > { > static struct tree_descr nfsd_files[] = { > -#ifdef CONFIG_NFSD_DEPRECATED > - [NFSD_Svc] = {".svc", &transaction_ops, S_IWUSR}, > - [NFSD_Add] = {".add", &transaction_ops, S_IWUSR}, > - [NFSD_Del] = {".del", &transaction_ops, S_IWUSR}, > - [NFSD_Export] = {".export", &transaction_ops, S_IWUSR}, > - [NFSD_Unexport] = {".unexport", &transaction_ops, S_IWUSR}, > - [NFSD_Getfd] = {".getfd", &transaction_ops, S_IWUSR|S_IRUSR}, > - [NFSD_Getfs] = {".getfs", &transaction_ops, S_IWUSR|S_IRUSR}, > -#endif > [NFSD_List] = {"exports", &exports_operations, S_IRUGO}, > [NFSD_Export_features] = {"export_features", > &export_features_operations, S_IRUGO}, > diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c > index 18743c4..bb8397f 100644 > --- a/fs/nfsd/nfssvc.c > +++ b/fs/nfsd/nfssvc.c > @@ -528,16 +528,9 @@ nfsd(void *vrqstp) > continue; > } > > - > - /* Lock the export hash tables for reading. */ > - exp_readlock(); > - > validate_process_creds(); > svc_process(rqstp); > validate_process_creds(); > - > - /* Unlock export hash tables */ > - exp_readunlock(); > } > > /* Clear signals before calling svc_exit_thread() */ > diff --git a/include/linux/compat.h b/include/linux/compat.h > index ddcb7db..851afdf 100644 > --- a/include/linux/compat.h > +++ b/include/linux/compat.h > @@ -438,16 +438,7 @@ asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds, > struct compat_timespec __user *tsp, > const compat_sigset_t __user *sigmask, > compat_size_t sigsetsize); > -#if (defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE)) && \ > - !defined(CONFIG_NFSD_DEPRECATED) > -union compat_nfsctl_res; > -struct compat_nfsctl_arg; > -asmlinkage long compat_sys_nfsservctl(int cmd, > - struct compat_nfsctl_arg __user *arg, > - union compat_nfsctl_res __user *res); > -#else > asmlinkage long compat_sys_nfsservctl(int cmd, void *notused, void *notused2); > -#endif > asmlinkage long compat_sys_signalfd4(int ufd, > const compat_sigset_t __user *sigmask, > compat_size_t sigsetsize, int flags); > diff --git a/include/linux/nfsd/export.h b/include/linux/nfsd/export.h > index 84058ec..8a31a20 100644 > --- a/include/linux/nfsd/export.h > +++ b/include/linux/nfsd/export.h > @@ -133,8 +133,6 @@ __be32 check_nfsd_access(struct svc_export *exp, struct svc_rqst *rqstp); > int nfsd_export_init(void); > void nfsd_export_shutdown(void); > void nfsd_export_flush(void); > -void exp_readlock(void); > -void exp_readunlock(void); > struct svc_export * rqst_exp_get_by_name(struct svc_rqst *, > struct path *); > struct svc_export * rqst_exp_parent(struct svc_rqst *, > diff --git a/include/linux/sunrpc/cache.h b/include/linux/sunrpc/cache.h > index 8d2eef1..d1c79a9 100644 > --- a/include/linux/sunrpc/cache.h > +++ b/include/linux/sunrpc/cache.h > @@ -256,13 +256,4 @@ static inline time_t get_expiry(char **bpp) > return rv - boot.tv_sec; > } > > -#ifdef CONFIG_NFSD_DEPRECATED > -static inline void sunrpc_invalidate(struct cache_head *h, > - struct cache_detail *detail) > -{ > - h->expiry_time = seconds_since_boot() - 1; > - detail->nextcheck = seconds_since_boot(); > -} > -#endif /* CONFIG_NFSD_DEPRECATED */ > - > #endif /* _LINUX_SUNRPC_CACHE_H_ */ > diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c > index c8e1021..31b9dea 100644 > --- a/net/sunrpc/svcauth_unix.c > +++ b/net/sunrpc/svcauth_unix.c > @@ -30,9 +30,6 @@ > > struct unix_domain { > struct auth_domain h; > -#ifdef CONFIG_NFSD_DEPRECATED > - int addr_changes; > -#endif /* CONFIG_NFSD_DEPRECATED */ > /* other stuff later */ > }; > > @@ -74,9 +71,6 @@ struct auth_domain *unix_domain_find(char *name) > return NULL; > } > new->h.flavour = &svcauth_unix; > -#ifdef CONFIG_NFSD_DEPRECATED > - new->addr_changes = 0; > -#endif /* CONFIG_NFSD_DEPRECATED */ > rv = auth_domain_lookup(name, &new->h); > } > } > @@ -95,9 +89,6 @@ struct ip_map { > char m_class[8]; /* e.g. "nfsd" */ > struct in6_addr m_addr; > struct unix_domain *m_client; > -#ifdef CONFIG_NFSD_DEPRECATED > - int m_add_change; > -#endif /* CONFIG_NFSD_DEPRECATED */ > }; > > static void ip_map_put(struct kref *kref) > @@ -151,9 +142,6 @@ static void update(struct cache_head *cnew, struct cache_head *citem) > > kref_get(&item->m_client->h.ref); > new->m_client = item->m_client; > -#ifdef CONFIG_NFSD_DEPRECATED > - new->m_add_change = item->m_add_change; > -#endif /* CONFIG_NFSD_DEPRECATED */ > } > static struct cache_head *ip_map_alloc(void) > { > @@ -338,16 +326,6 @@ static int __ip_map_update(struct cache_detail *cd, struct ip_map *ipm, > ip.h.flags = 0; > if (!udom) > set_bit(CACHE_NEGATIVE, &ip.h.flags); > -#ifdef CONFIG_NFSD_DEPRECATED > - else { > - ip.m_add_change = udom->addr_changes; > - /* if this is from the legacy set_client system call, > - * we need m_add_change to be one higher > - */ > - if (expiry == NEVER) > - ip.m_add_change++; > - } > -#endif /* CONFIG_NFSD_DEPRECATED */ > ip.h.expiry_time = expiry; > ch = sunrpc_cache_update(cd, &ip.h, &ipm->h, > hash_str(ipm->m_class, IP_HASHBITS) ^ > @@ -367,62 +345,6 @@ static inline int ip_map_update(struct net *net, struct ip_map *ipm, > return __ip_map_update(sn->ip_map_cache, ipm, udom, expiry); > } > > -#ifdef CONFIG_NFSD_DEPRECATED > -int auth_unix_add_addr(struct net *net, struct in6_addr *addr, struct auth_domain *dom) > -{ > - struct unix_domain *udom; > - struct ip_map *ipmp; > - > - if (dom->flavour != &svcauth_unix) > - return -EINVAL; > - udom = container_of(dom, struct unix_domain, h); > - ipmp = ip_map_lookup(net, "nfsd", addr); > - > - if (ipmp) > - return ip_map_update(net, ipmp, udom, NEVER); > - else > - return -ENOMEM; > -} > -EXPORT_SYMBOL_GPL(auth_unix_add_addr); > - > -int auth_unix_forget_old(struct auth_domain *dom) > -{ > - struct unix_domain *udom; > - > - if (dom->flavour != &svcauth_unix) > - return -EINVAL; > - udom = container_of(dom, struct unix_domain, h); > - udom->addr_changes++; > - return 0; > -} > -EXPORT_SYMBOL_GPL(auth_unix_forget_old); > - > -struct auth_domain *auth_unix_lookup(struct net *net, struct in6_addr *addr) > -{ > - struct ip_map *ipm; > - struct auth_domain *rv; > - struct sunrpc_net *sn; > - > - sn = net_generic(net, sunrpc_net_id); > - ipm = ip_map_lookup(net, "nfsd", addr); > - > - if (!ipm) > - return NULL; > - if (cache_check(sn->ip_map_cache, &ipm->h, NULL)) > - return NULL; > - > - if ((ipm->m_client->addr_changes - ipm->m_add_change) >0) { > - sunrpc_invalidate(&ipm->h, sn->ip_map_cache); > - rv = NULL; > - } else { > - rv = &ipm->m_client->h; > - kref_get(&rv->ref); > - } > - cache_put(&ipm->h, sn->ip_map_cache); > - return rv; > -} > -EXPORT_SYMBOL_GPL(auth_unix_lookup); > -#endif /* CONFIG_NFSD_DEPRECATED */ > > void svcauth_unix_purge(void) > { > -- > 1.7.3.4 > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html