switch vfs_getattr() to struct path
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 24 Jan 2013 07:18:08 +0000 (02:18 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 26 Feb 2013 07:46:08 +0000 (02:46 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
14 files changed:
drivers/base/devtmpfs.c
drivers/base/firmware_class.c
drivers/block/loop.c
fs/ecryptfs/ecryptfs_kernel.h
fs/ecryptfs/inode.c
fs/nfsd/nfs3proc.c
fs/nfsd/nfs3xdr.c
fs/nfsd/nfs4xdr.c
fs/nfsd/nfsproc.c
fs/nfsd/nfsxdr.c
fs/nfsd/vfs.h
fs/stat.c
include/linux/fs.h
kernel/module.c

index 17cf7cad601e56840adefbd1b16a8d0cd5c8a5d8..01fc5b07f951f81e6521e9c89af797f9838d165b 100644 (file)
@@ -302,7 +302,8 @@ static int handle_remove(const char *nodename, struct device *dev)
 
        if (dentry->d_inode) {
                struct kstat stat;
-               err = vfs_getattr(parent.mnt, dentry, &stat);
+               struct path p = {.mnt = parent.mnt, .dentry = dentry};
+               err = vfs_getattr(&p, &stat);
                if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {
                        struct iattr newattrs;
                        /*
index b392b353be39016818abd096da01fb4a18839450..a2be09dd7771455c64493fe8cee44fdba1433f22 100644 (file)
@@ -290,7 +290,7 @@ MODULE_PARM_DESC(path, "customized firmware image search path with a higher prio
 static noinline_for_stack long fw_file_size(struct file *file)
 {
        struct kstat st;
-       if (vfs_getattr(file->f_path.mnt, file->f_path.dentry, &st))
+       if (vfs_getattr(&file->f_path, &st))
                return -1;
        if (!S_ISREG(st.mode))
                return -1;
index ae125127062487f0bdbdb2f2463dce6047a2bb04..8031a8cdd6984550aeba286d38a05e2c89e3d080 100644 (file)
@@ -1139,7 +1139,7 @@ loop_get_status(struct loop_device *lo, struct loop_info64 *info)
 
        if (lo->lo_state != Lo_bound)
                return -ENXIO;
-       error = vfs_getattr(file->f_path.mnt, file->f_path.dentry, &stat);
+       error = vfs_getattr(&file->f_path, &stat);
        if (error)
                return error;
        memset(info, 0, sizeof(*info));
index cfb4b9fed520144579c9f9de0a59bcfc5ceced34..7e2c6f5d7985ffc3fae9482a6eb952b58621e278 100644 (file)
@@ -509,6 +509,12 @@ ecryptfs_dentry_to_lower_mnt(struct dentry *dentry)
        return ((struct ecryptfs_dentry_info *)dentry->d_fsdata)->lower_path.mnt;
 }
 
+static inline struct path *
+ecryptfs_dentry_to_lower_path(struct dentry *dentry)
+{
+       return &((struct ecryptfs_dentry_info *)dentry->d_fsdata)->lower_path;
+}
+
 static inline void
 ecryptfs_set_dentry_lower_mnt(struct dentry *dentry, struct vfsmount *lower_mnt)
 {
index cc7709e7c508d81a1429ffa25bace9c7a101a832..e0f07fb6d56b65fbca944e52512d3d5239d600bb 100644 (file)
@@ -1027,8 +1027,7 @@ int ecryptfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
        struct kstat lower_stat;
        int rc;
 
-       rc = vfs_getattr(ecryptfs_dentry_to_lower_mnt(dentry),
-                        ecryptfs_dentry_to_lower(dentry), &lower_stat);
+       rc = vfs_getattr(ecryptfs_dentry_to_lower_path(dentry), &lower_stat);
        if (!rc) {
                fsstack_copy_attr_all(dentry->d_inode,
                                      ecryptfs_inode_to_lower(dentry->d_inode));
index 1fc02dfdc5c4354d296c21e814362f8e411e91ee..401289913130841a8547e8be40de716b90af13d6 100644 (file)
@@ -43,7 +43,6 @@ static __be32
 nfsd3_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle  *argp,
                                           struct nfsd3_attrstat *resp)
 {
-       int     err;
        __be32  nfserr;
 
        dprintk("nfsd: GETATTR(3)  %s\n",
@@ -55,9 +54,7 @@ nfsd3_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle  *argp,
        if (nfserr)
                RETURN_STATUS(nfserr);
 
-       err = vfs_getattr(resp->fh.fh_export->ex_path.mnt,
-                         resp->fh.fh_dentry, &resp->stat);
-       nfserr = nfserrno(err);
+       nfserr = fh_getattr(&resp->fh, &resp->stat);
 
        RETURN_STATUS(nfserr);
 }
index 324c0baf7cda30c0f6123417673dc395c8e292ff..7af9417be88dff0fd19f576918d329949c049f74 100644 (file)
@@ -11,6 +11,7 @@
 #include "xdr3.h"
 #include "auth.h"
 #include "netns.h"
+#include "vfs.h"
 
 #define NFSDDBG_FACILITY               NFSDDBG_XDR
 
@@ -204,10 +205,10 @@ encode_post_op_attr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp)
 {
        struct dentry *dentry = fhp->fh_dentry;
        if (dentry && dentry->d_inode) {
-               int err;
+               __be32 err;
                struct kstat stat;
 
-               err = vfs_getattr(fhp->fh_export->ex_path.mnt, dentry, &stat);
+               err = fh_getattr(fhp, &stat);
                if (!err) {
                        *p++ = xdr_one;         /* attributes follow */
                        lease_get_mtime(dentry->d_inode, &stat.mtime);
@@ -254,13 +255,12 @@ encode_wcc_data(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp)
  */
 void fill_post_wcc(struct svc_fh *fhp)
 {
-       int err;
+       __be32 err;
 
        if (fhp->fh_post_saved)
                printk("nfsd: inode locked twice during operation.\n");
 
-       err = vfs_getattr(fhp->fh_export->ex_path.mnt, fhp->fh_dentry,
-                       &fhp->fh_post_attr);
+       err = fh_getattr(fhp, &fhp->fh_post_attr);
        fhp->fh_post_change = fhp->fh_dentry->d_inode->i_version;
        if (err) {
                fhp->fh_post_saved = 0;
index 0dc11586682fd7d93c85790af67bd8d83f6f9002..17e70dabe21caf3b6dfbfa4dc11b2aaf5735cd3f 100644 (file)
@@ -1997,7 +1997,7 @@ static int get_parent_attributes(struct svc_export *exp, struct kstat *stat)
                if (path.dentry != path.mnt->mnt_root)
                        break;
        }
-       err = vfs_getattr(path.mnt, path.dentry, stat);
+       err = vfs_getattr(&path, stat);
        path_put(&path);
        return err;
 }
@@ -2050,7 +2050,7 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
                        goto out;
        }
 
-       err = vfs_getattr(exp->ex_path.mnt, dentry, &stat);
+       err = vfs_getattr(&path, &stat);
        if (err)
                goto out_nfserr;
        if ((bmval0 & (FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL |
index aad6d457b9e8ef75d410d01de3dd6bac692c96fd..54c6b3d3cc79b399071a9d8c279fecb415fd5453 100644 (file)
@@ -26,17 +26,13 @@ static __be32
 nfsd_return_attrs(__be32 err, struct nfsd_attrstat *resp)
 {
        if (err) return err;
-       return nfserrno(vfs_getattr(resp->fh.fh_export->ex_path.mnt,
-                                   resp->fh.fh_dentry,
-                                   &resp->stat));
+       return fh_getattr(&resp->fh, &resp->stat);
 }
 static __be32
 nfsd_return_dirop(__be32 err, struct nfsd_diropres *resp)
 {
        if (err) return err;
-       return nfserrno(vfs_getattr(resp->fh.fh_export->ex_path.mnt,
-                                   resp->fh.fh_dentry,
-                                   &resp->stat));
+       return fh_getattr(&resp->fh, &resp->stat);
 }
 /*
  * Get a file's attributes
@@ -150,9 +146,7 @@ nfsd_proc_read(struct svc_rqst *rqstp, struct nfsd_readargs *argp,
                                  &resp->count);
 
        if (nfserr) return nfserr;
-       return nfserrno(vfs_getattr(resp->fh.fh_export->ex_path.mnt,
-                                   resp->fh.fh_dentry,
-                                   &resp->stat));
+       return fh_getattr(&resp->fh, &resp->stat);
 }
 
 /*
index 979b421069792abe517a5c210dd47d4418723b11..bf6d3bccdd98a2ec842d00922909025c0f106a67 100644 (file)
@@ -4,6 +4,7 @@
  * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
  */
 
+#include "vfs.h"
 #include "xdr.h"
 #include "auth.h"
 
@@ -197,7 +198,7 @@ encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp,
 __be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp)
 {
        struct kstat stat;
-       vfs_getattr(fhp->fh_export->ex_path.mnt, fhp->fh_dentry, &stat);
+       fh_getattr(fhp, &stat); /* BUG */
        return encode_fattr(rqstp, p, fhp, &stat);
 }
 
index 359594c393d273f20b5fe3ef0a9a75379ab1edc2..5b5894159f22a5261ccd0c5f4a583cdfe0325dec 100644 (file)
@@ -6,6 +6,7 @@
 #define LINUX_NFSD_VFS_H
 
 #include "nfsfh.h"
+#include "nfsd.h"
 
 /*
  * Flags for nfsd_permission
@@ -125,4 +126,11 @@ static inline void fh_drop_write(struct svc_fh *fh)
        }
 }
 
+static inline __be32 fh_getattr(struct svc_fh *fh, struct kstat *stat)
+{
+       struct path p = {.mnt = fh->fh_export->ex_path.mnt,
+                        .dentry = fh->fh_dentry};
+       return nfserrno(vfs_getattr(&p, stat));
+}
+
 #endif /* LINUX_NFSD_VFS_H */
index 14f45459c83d650fb09c4069d5dd7db907a67b95..04ce1ac20d20b393d13bdfcd0e24c8ca4cde743e 100644 (file)
--- a/fs/stat.c
+++ b/fs/stat.c
@@ -37,17 +37,17 @@ void generic_fillattr(struct inode *inode, struct kstat *stat)
 
 EXPORT_SYMBOL(generic_fillattr);
 
-int vfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+int vfs_getattr(struct path *path, struct kstat *stat)
 {
-       struct inode *inode = dentry->d_inode;
+       struct inode *inode = path->dentry->d_inode;
        int retval;
 
-       retval = security_inode_getattr(mnt, dentry);
+       retval = security_inode_getattr(path->mnt, path->dentry);
        if (retval)
                return retval;
 
        if (inode->i_op->getattr)
-               return inode->i_op->getattr(mnt, dentry, stat);
+               return inode->i_op->getattr(path->mnt, path->dentry, stat);
 
        generic_fillattr(inode, stat);
        return 0;
@@ -61,8 +61,7 @@ int vfs_fstat(unsigned int fd, struct kstat *stat)
        int error = -EBADF;
 
        if (f.file) {
-               error = vfs_getattr(f.file->f_path.mnt, f.file->f_path.dentry,
-                                   stat);
+               error = vfs_getattr(&f.file->f_path, stat);
                fdput(f);
        }
        return error;
@@ -89,7 +88,7 @@ retry:
        if (error)
                goto out;
 
-       error = vfs_getattr(path.mnt, path.dentry, stat);
+       error = vfs_getattr(&path, stat);
        path_put(&path);
        if (retry_estale(error, lookup_flags)) {
                lookup_flags |= LOOKUP_REVAL;
index 3ab69777b4d8d671461db13e0633497385d1558d..7f471520b88bb5f3bb6affdb07b422a428a0267b 100644 (file)
@@ -2468,7 +2468,7 @@ extern int page_symlink(struct inode *inode, const char *symname, int len);
 extern const struct inode_operations page_symlink_inode_operations;
 extern int generic_readlink(struct dentry *, char __user *, int);
 extern void generic_fillattr(struct inode *, struct kstat *);
-extern int vfs_getattr(struct vfsmount *, struct dentry *, struct kstat *);
+extern int vfs_getattr(struct path *, struct kstat *);
 void __inode_add_bytes(struct inode *inode, loff_t bytes);
 void inode_add_bytes(struct inode *inode, loff_t bytes);
 void inode_sub_bytes(struct inode *inode, loff_t bytes);
index b10b048367e14b0e89f6b7bfc5e740afd666516b..950076eb3273675e39efeb86c5a859c307dfa9ef 100644 (file)
@@ -2519,7 +2519,7 @@ static int copy_module_from_fd(int fd, struct load_info *info)
        if (err)
                goto out;
 
-       err = vfs_getattr(file->f_vfsmnt, file->f_dentry, &stat);
+       err = vfs_getattr(&file->f_path, &stat);
        if (err)
                goto out;