don't pass nameidata to ->follow_link()
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 2 May 2015 17:37:52 +0000 (13:37 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 11 May 2015 02:20:15 +0000 (22:20 -0400)
its only use is getting passed to nd_jump_link(), which can obtain
it from current->nameidata

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
31 files changed:
Documentation/filesystems/Locking
Documentation/filesystems/vfs.txt
drivers/staging/lustre/lustre/llite/symlink.c
fs/9p/vfs_inode.c
fs/9p/vfs_inode_dotl.c
fs/autofs4/symlink.c
fs/befs/linuxvfs.c
fs/cifs/cifsfs.h
fs/cifs/link.c
fs/configfs/symlink.c
fs/ecryptfs/inode.c
fs/ext4/symlink.c
fs/f2fs/namei.c
fs/fuse/dir.c
fs/gfs2/inode.c
fs/hostfs/hostfs_kern.c
fs/hppfs/hppfs.c
fs/kernfs/symlink.c
fs/libfs.c
fs/namei.c
fs/nfs/symlink.c
fs/overlayfs/inode.c
fs/proc/base.c
fs/proc/inode.c
fs/proc/namespaces.c
fs/proc/self.c
fs/proc/thread_self.c
fs/xfs/xfs_iops.c
include/linux/fs.h
include/linux/namei.h
mm/shmem.c

index 7fa6c4ac858c537b4172134f5206b8b5a76616bd..5b5b4f54c033529aada7cdb6c085fd0accdd0c7f 100644 (file)
@@ -50,7 +50,7 @@ prototypes:
        int (*rename2) (struct inode *, struct dentry *,
                        struct inode *, struct dentry *, unsigned int);
        int (*readlink) (struct dentry *, char __user *,int);
-       const char *(*follow_link) (struct dentry *, void **, struct nameidata *);
+       const char *(*follow_link) (struct dentry *, void **);
        void (*put_link) (struct dentry *, void *);
        void (*truncate) (struct inode *);
        int (*permission) (struct inode *, int, unsigned int);
index 1c6b03ac2e5a0305a828ec5f9011c385112d3e20..0dec8c880be631c6812c228281459fb3c40cd44c 100644 (file)
@@ -350,7 +350,7 @@ struct inode_operations {
        int (*rename2) (struct inode *, struct dentry *,
                        struct inode *, struct dentry *, unsigned int);
        int (*readlink) (struct dentry *, char __user *,int);
-       const char *(*follow_link) (struct dentry *, void **, struct nameidata *);
+       const char *(*follow_link) (struct dentry *, void **);
        void (*put_link) (struct dentry *, void *);
        int (*permission) (struct inode *, int);
        int (*get_acl)(struct inode *, int);
index da6d9d17c50dabf4a7e9baa522ba186e022406ad..f3be3bf0f66f0921b6167cb0fe6aef4b05376c3a 100644 (file)
@@ -118,7 +118,7 @@ failed:
        return rc;
 }
 
-static const char *ll_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *ll_follow_link(struct dentry *dentry, void **cookie)
 {
        struct inode *inode = d_inode(dentry);
        struct ptlrpc_request *request = NULL;
index 7cc70a39a1d83027b7c731058aa3d6efe2cff13f..271f51af2f75c0ae4412201c0654141fbc68382f 100644 (file)
@@ -1230,7 +1230,7 @@ ino_t v9fs_qid2ino(struct p9_qid *qid)
  *
  */
 
-static const char *v9fs_vfs_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *v9fs_vfs_follow_link(struct dentry *dentry, void **cookie)
 {
        struct v9fs_session_info *v9ses = v9fs_dentry2v9ses(dentry);
        struct p9_fid *fid = v9fs_fid_lookup(dentry);
index ae062ffa0f1fffc91e1ce2923fa5afecc34b1306..16658ed677c9180bfd27ff3940b10999ba8e75f4 100644 (file)
@@ -910,7 +910,7 @@ error:
  */
 
 static const char *
-v9fs_vfs_follow_link_dotl(struct dentry *dentry, void **cookie, struct nameidata *nd)
+v9fs_vfs_follow_link_dotl(struct dentry *dentry, void **cookie)
 {
        struct p9_fid *fid = v9fs_fid_lookup(dentry);
        char *target;
index 9c6a07739c9b9746177836ba1cc3cf87c7f38193..da0c33481bc0387788bcf4ce1792b38e141804e4 100644 (file)
@@ -12,7 +12,7 @@
 
 #include "autofs_i.h"
 
-static const char *autofs4_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *autofs4_follow_link(struct dentry *dentry, void **cookie)
 {
        struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);
        struct autofs_info *ino = autofs4_dentry_ino(dentry);
index 3a1aefb86a11ef063a984c59e129891f64d8f748..46aedacfa6a8d4131563a83a8402daf89d590ddb 100644 (file)
@@ -42,7 +42,7 @@ static struct inode *befs_iget(struct super_block *, unsigned long);
 static struct inode *befs_alloc_inode(struct super_block *sb);
 static void befs_destroy_inode(struct inode *inode);
 static void befs_destroy_inodecache(void);
-static const char *befs_follow_link(struct dentry *, void **, struct nameidata *nd);
+static const char *befs_follow_link(struct dentry *, void **);
 static int befs_utf2nls(struct super_block *sb, const char *in, int in_len,
                        char **out, int *out_len);
 static int befs_nls2utf(struct super_block *sb, const char *in, int in_len,
@@ -464,7 +464,7 @@ befs_destroy_inodecache(void)
  * flag is set.
  */
 static const char *
-befs_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+befs_follow_link(struct dentry *dentry, void **cookie)
 {
        struct super_block *sb = dentry->d_sb;
        struct befs_inode_info *befs_ino = BEFS_I(d_inode(dentry));
index 61012da7e9d87f4f76337485608429be0353d908..a782b22904e40b71387d844a6a7879bab8191a88 100644 (file)
@@ -120,7 +120,7 @@ extern struct vfsmount *cifs_dfs_d_automount(struct path *path);
 #endif
 
 /* Functions related to symlinks */
-extern const char *cifs_follow_link(struct dentry *direntry, void **cookie, struct nameidata *nd);
+extern const char *cifs_follow_link(struct dentry *direntry, void **cookie);
 extern int cifs_readlink(struct dentry *direntry, char __user *buffer,
                         int buflen);
 extern int cifs_symlink(struct inode *inode, struct dentry *direntry,
index 4a439c2c0c7f49956e893ee16a3ac676de01ff95..546f86ab09aa838bd01fefe8ebc0101de11f3163 100644 (file)
@@ -627,7 +627,7 @@ cifs_hl_exit:
 }
 
 const char *
-cifs_follow_link(struct dentry *direntry, void **cookie, struct nameidata *nd)
+cifs_follow_link(struct dentry *direntry, void **cookie)
 {
        struct inode *inode = d_inode(direntry);
        int rc = -ENOMEM;
index fac8e8517f3345a5b6431cb1a4d398fbf73eca3b..0ace756490090ef2ea12400125d0fa6ec358954a 100644 (file)
@@ -279,7 +279,7 @@ static int configfs_getlink(struct dentry *dentry, char * path)
 
 }
 
-static const char *configfs_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *configfs_follow_link(struct dentry *dentry, void **cookie)
 {
        unsigned long page = get_zeroed_page(GFP_KERNEL);
        int error;
index cdb9d6c4532d33e012ebcfa5b4a1dbf72219fa67..73d20ae924787781ff4f24da7251c30dbbf5abc8 100644 (file)
@@ -675,7 +675,7 @@ out:
        return rc ? ERR_PTR(rc) : buf;
 }
 
-static const char *ecryptfs_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *ecryptfs_follow_link(struct dentry *dentry, void **cookie)
 {
        size_t len;
        char *buf = ecryptfs_readlink_lower(dentry, &len);
index afec475aaf5c5d4a57a47bffe9a26c866fde7dce..ba5bd18a9825242fdfc9e8ee4cb05f1cc7cd05f7 100644 (file)
@@ -23,7 +23,7 @@
 #include "xattr.h"
 
 #ifdef CONFIG_EXT4_FS_ENCRYPTION
-static const char *ext4_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *ext4_follow_link(struct dentry *dentry, void **cookie)
 {
        struct page *cpage = NULL;
        char *caddr, *paddr = NULL;
index d2947937515eedce54ac756a3e21080b7deeb143..cd05a7c915339776f3be78eba70f238eccc8422f 100644 (file)
@@ -296,9 +296,9 @@ fail:
        return err;
 }
 
-static const char *f2fs_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *f2fs_follow_link(struct dentry *dentry, void **cookie)
 {
-       const char *link = page_follow_link_light(dentry, cookie, nd);
+       const char *link = page_follow_link_light(dentry, cookie);
        if (!IS_ERR(link) && !*link) {
                /* this is broken symlink case */
                page_put_link(dentry, *cookie);
index f9cb260375cf91bb268826b478e13c0a0844d9ea..d5cdef8b7f3a0d24a9155abf6d625c6f6a3e096a 100644 (file)
@@ -1365,7 +1365,7 @@ static int fuse_readdir(struct file *file, struct dir_context *ctx)
        return err;
 }
 
-static const char *fuse_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *fuse_follow_link(struct dentry *dentry, void **cookie)
 {
        struct inode *inode = d_inode(dentry);
        struct fuse_conn *fc = get_fuse_conn(inode);
index f59390aebffb94b2d094b3b963e3b59f38264d30..3a1461de1551d5765b7334747e69d2909ffb8d00 100644 (file)
@@ -1548,7 +1548,7 @@ out:
  * Returns: 0 on success or error code
  */
 
-static const char *gfs2_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *gfs2_follow_link(struct dentry *dentry, void **cookie)
 {
        struct gfs2_inode *ip = GFS2_I(d_inode(dentry));
        struct gfs2_holder i_gh;
index f650ed661fab6808545808b65cf492b7fcedd983..7b6ed7a908f66551d95ede7fc069b711d26b8223 100644 (file)
@@ -892,7 +892,7 @@ static const struct inode_operations hostfs_dir_iops = {
        .setattr        = hostfs_setattr,
 };
 
-static const char *hostfs_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *hostfs_follow_link(struct dentry *dentry, void **cookie)
 {
        char *link = __getname();
        if (link) {
index b8f24d3b04eef776c738d61db9d9996f075cc1f6..15a774eb5bbf2e35e7c85cc01c520a635b76d72d 100644 (file)
@@ -642,11 +642,11 @@ static int hppfs_readlink(struct dentry *dentry, char __user *buffer,
                                                    buflen);
 }
 
-static const char *hppfs_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *hppfs_follow_link(struct dentry *dentry, void **cookie)
 {
        struct dentry *proc_dentry = HPPFS_I(d_inode(dentry))->proc_dentry;
 
-       return d_inode(proc_dentry)->i_op->follow_link(proc_dentry, cookie, nd);
+       return d_inode(proc_dentry)->i_op->follow_link(proc_dentry, cookie);
 }
 
 static void hppfs_put_link(struct dentry *dentry, void *cookie)
index 3c7e799974a2a1411c3f5fd742e365662b019e88..366c5a17475e5d0a1ecab138ec04e8e6fcfe861d 100644 (file)
@@ -112,7 +112,7 @@ static int kernfs_getlink(struct dentry *dentry, char *path)
        return error;
 }
 
-static const char *kernfs_iop_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *kernfs_iop_follow_link(struct dentry *dentry, void **cookie)
 {
        int error = -ENOMEM;
        unsigned long page = get_zeroed_page(GFP_KERNEL);
index 0c83fde20dbdd78b82ce199c5da1465791ea33d8..c5f3373e326beaca2ee6246cdb17acde1a8c1102 100644 (file)
@@ -1091,7 +1091,7 @@ simple_nosetlease(struct file *filp, long arg, struct file_lock **flp,
 }
 EXPORT_SYMBOL(simple_nosetlease);
 
-const char *simple_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+const char *simple_follow_link(struct dentry *dentry, void **cookie)
 {
        return d_inode(dentry)->i_link;
 }
index b57400ca6a0fc609b8f5024e3dd45d7d8b798f43..f311f0369e3cd34dc810486d3cff55f158e3ffaf 100644 (file)
@@ -753,8 +753,9 @@ static inline void path_to_nameidata(const struct path *path,
  * Helper to directly jump to a known parsed path from ->follow_link,
  * caller must have taken a reference to path beforehand.
  */
-void nd_jump_link(struct nameidata *nd, struct path *path)
+void nd_jump_link(struct path *path)
 {
+       struct nameidata *nd = current->nameidata;
        path_put(&nd->path);
 
        nd->path = *path;
@@ -916,7 +917,7 @@ const char *get_link(struct nameidata *nd)
        nd->last_type = LAST_BIND;
        res = inode->i_link;
        if (!res) {
-               res = inode->i_op->follow_link(dentry, &last->cookie, nd);
+               res = inode->i_op->follow_link(dentry, &last->cookie);
                if (IS_ERR(res)) {
 out:
                        path_put(&last->link);
@@ -4485,12 +4486,12 @@ int generic_readlink(struct dentry *dentry, char __user *buffer, int buflen)
        int res;
 
        if (!link) {
-               link = dentry->d_inode->i_op->follow_link(dentry, &cookie, NULL);
+               link = dentry->d_inode->i_op->follow_link(dentry, &cookie);
                if (IS_ERR(link))
                        return PTR_ERR(link);
        }
        res = readlink_copy(buffer, buflen, link);
-       if (cookie && dentry->d_inode->i_op->put_link)
+       if (dentry->d_inode->i_op->put_link)
                dentry->d_inode->i_op->put_link(dentry, cookie);
        return res;
 }
@@ -4523,7 +4524,7 @@ int page_readlink(struct dentry *dentry, char __user *buffer, int buflen)
 }
 EXPORT_SYMBOL(page_readlink);
 
-const char *page_follow_link_light(struct dentry *dentry, void **cookie, struct nameidata *nd)
+const char *page_follow_link_light(struct dentry *dentry, void **cookie)
 {
        struct page *page = NULL;
        char *res = page_getlink(dentry, &page);
index c992b200ae7e10f02a93f8369d22c4c65234ca76..b6de433da5db14ab788ba358ce94b5952d5c601f 100644 (file)
@@ -42,7 +42,7 @@ error:
        return -EIO;
 }
 
-static const char *nfs_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *nfs_follow_link(struct dentry *dentry, void **cookie)
 {
        struct inode *inode = d_inode(dentry);
        struct page *page;
index 235ad42afb5787f5da1bee9d98a81d9639f62232..9986833c9fcc640db0f06e88e1148c7114ec33d1 100644 (file)
@@ -140,7 +140,7 @@ struct ovl_link_data {
        void *cookie;
 };
 
-static const char *ovl_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *ovl_follow_link(struct dentry *dentry, void **cookie)
 {
        struct dentry *realdentry;
        struct inode *realinode;
@@ -160,7 +160,7 @@ static const char *ovl_follow_link(struct dentry *dentry, void **cookie, struct
                data->realdentry = realdentry;
        }
 
-       ret = realinode->i_op->follow_link(realdentry, cookie, nd);
+       ret = realinode->i_op->follow_link(realdentry, cookie);
        if (IS_ERR_OR_NULL(ret)) {
                kfree(data);
                return ret;
index 52652f86b187f7fb50682e87a9ad238206777c1b..286a422f440e9ed8a6c4b9c54ad7b7c85d28d6f2 100644 (file)
@@ -1380,7 +1380,7 @@ static int proc_exe_link(struct dentry *dentry, struct path *exe_path)
                return -ENOENT;
 }
 
-static const char *proc_pid_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *proc_pid_follow_link(struct dentry *dentry, void **cookie)
 {
        struct inode *inode = d_inode(dentry);
        struct path path;
@@ -1394,7 +1394,7 @@ static const char *proc_pid_follow_link(struct dentry *dentry, void **cookie, st
        if (error)
                goto out;
 
-       nd_jump_link(nd, &path);
+       nd_jump_link(&path);
        return NULL;
 out:
        return ERR_PTR(error);
index acd51d75387de41689060c5cdd457112cff3dc2a..eb35874fe09c40dceb23f357e02f074becbd76ce 100644 (file)
@@ -393,7 +393,7 @@ static const struct file_operations proc_reg_file_ops_no_compat = {
 };
 #endif
 
-static const char *proc_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *proc_follow_link(struct dentry *dentry, void **cookie)
 {
        struct proc_dir_entry *pde = PDE(d_inode(dentry));
        if (unlikely(!use_pde(pde)))
index 10d24dd096e80ac798f3204acd7ec8d9c1626a42..f6e8354b8cea20a936f6a4f8ae0335fd7fa36bd4 100644 (file)
@@ -30,7 +30,7 @@ static const struct proc_ns_operations *ns_entries[] = {
        &mntns_operations,
 };
 
-static const char *proc_ns_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *proc_ns_follow_link(struct dentry *dentry, void **cookie)
 {
        struct inode *inode = d_inode(dentry);
        const struct proc_ns_operations *ns_ops = PROC_I(inode)->ns_ops;
@@ -45,7 +45,7 @@ static const char *proc_ns_follow_link(struct dentry *dentry, void **cookie, str
        if (ptrace_may_access(task, PTRACE_MODE_READ)) {
                error = ns_get_path(&ns_path, task, ns_ops);
                if (!error)
-                       nd_jump_link(nd, &ns_path);
+                       nd_jump_link(&ns_path);
        }
        put_task_struct(task);
        return error;
index ad333946b53acd9bea63cb159f2526b05ca9fc0b..113b8d061fc023858ab152a5033e029d085f27a6 100644 (file)
@@ -18,7 +18,7 @@ static int proc_self_readlink(struct dentry *dentry, char __user *buffer,
        return readlink_copy(buffer, buflen, tmp);
 }
 
-static const char *proc_self_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *proc_self_follow_link(struct dentry *dentry, void **cookie)
 {
        struct pid_namespace *ns = dentry->d_sb->s_fs_info;
        pid_t tgid = task_tgid_nr_ns(current, ns);
index 85c96e0d7aaa6276d44a7610a1a2fbb1566e1d8d..947b0f4fd0a194057334762bafeff3548c276568 100644 (file)
@@ -19,7 +19,7 @@ static int proc_thread_self_readlink(struct dentry *dentry, char __user *buffer,
        return readlink_copy(buffer, buflen, tmp);
 }
 
-static const char *proc_thread_self_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *proc_thread_self_follow_link(struct dentry *dentry, void **cookie)
 {
        struct pid_namespace *ns = dentry->d_sb->s_fs_info;
        pid_t tgid = task_tgid_nr_ns(current, ns);
index 26c4dcb1ef56e0a1b131a6141aa43709091606b4..7f51f39f8acc0a2fd407a7be57c1477439213a0f 100644 (file)
@@ -416,8 +416,7 @@ xfs_vn_rename(
 STATIC const char *
 xfs_vn_follow_link(
        struct dentry           *dentry,
-       void                    **cookie,
-       struct nameidata        *nd)
+       void                    **cookie)
 {
        char                    *link;
        int                     error = -ENOMEM;
index 9ab934113a289bafa800a5de98ba5f0fc6cdcedc..ed7c9f2987598c07a77d8325fc66ffc0f65b9d96 100644 (file)
@@ -1608,7 +1608,7 @@ struct file_operations {
 
 struct inode_operations {
        struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
-       const char * (*follow_link) (struct dentry *, void **, struct nameidata *);
+       const char * (*follow_link) (struct dentry *, void **);
        int (*permission) (struct inode *, int);
        struct posix_acl * (*get_acl)(struct inode *, int);
 
@@ -2705,7 +2705,7 @@ extern const struct file_operations generic_ro_fops;
 
 extern int readlink_copy(char __user *, int, const char *);
 extern int page_readlink(struct dentry *, char __user *, int);
-extern const char *page_follow_link_light(struct dentry *, void **, struct nameidata *);
+extern const char *page_follow_link_light(struct dentry *, void **);
 extern void page_put_link(struct dentry *, void *);
 extern int __page_symlink(struct inode *inode, const char *symname, int len,
                int nofs);
@@ -2722,7 +2722,7 @@ void __inode_sub_bytes(struct inode *inode, loff_t bytes);
 void inode_sub_bytes(struct inode *inode, loff_t bytes);
 loff_t inode_get_bytes(struct inode *inode);
 void inode_set_bytes(struct inode *inode, loff_t bytes);
-const char *simple_follow_link(struct dentry *, void **, struct nameidata *);
+const char *simple_follow_link(struct dentry *, void **);
 extern const struct inode_operations simple_symlink_inode_operations;
 
 extern int iterate_dir(struct file *, struct dir_context *);
index 3a6cc9651712329b0e42c17aea449a489703139e..d756304aa09bc415adede6b30a2f18b28207d0aa 100644 (file)
@@ -72,7 +72,7 @@ extern int follow_up(struct path *);
 extern struct dentry *lock_rename(struct dentry *, struct dentry *);
 extern void unlock_rename(struct dentry *, struct dentry *);
 
-extern void nd_jump_link(struct nameidata *nd, struct path *path);
+extern void nd_jump_link(struct path *path);
 
 static inline void nd_terminate_link(void *name, size_t len, size_t maxlen)
 {
index d1693dcb4285efc4eba47ac6cd402248f0168dda..e0268226704652617a853656dfca98b592f78fe1 100644 (file)
@@ -2475,7 +2475,7 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s
        return 0;
 }
 
-static const char *shmem_follow_link(struct dentry *dentry, void **cookie, struct nameidata *nd)
+static const char *shmem_follow_link(struct dentry *dentry, void **cookie)
 {
        struct page *page = NULL;
        int error = shmem_getpage(d_inode(dentry), 0, &page, SGP_READ, NULL);