switch vfs_getattr() to struct path
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
					parent
					
						
							
								e72837e3e7
							
						
					
				
			
			
				commit
				
					
						3dadecce20
					
				
			
		
					 14 changed files with 40 additions and 35 deletions
				
			
		| 
						 | 
					@ -302,7 +302,8 @@ static int handle_remove(const char *nodename, struct device *dev)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dentry->d_inode) {
 | 
						if (dentry->d_inode) {
 | 
				
			||||||
		struct kstat stat;
 | 
							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)) {
 | 
							if (!err && dev_mynode(dev, dentry->d_inode, &stat)) {
 | 
				
			||||||
			struct iattr newattrs;
 | 
								struct iattr newattrs;
 | 
				
			||||||
			/*
 | 
								/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
					static noinline_for_stack long fw_file_size(struct file *file)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct kstat st;
 | 
						struct kstat st;
 | 
				
			||||||
	if (vfs_getattr(file->f_path.mnt, file->f_path.dentry, &st))
 | 
						if (vfs_getattr(&file->f_path, &st))
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	if (!S_ISREG(st.mode))
 | 
						if (!S_ISREG(st.mode))
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1139,7 +1139,7 @@ loop_get_status(struct loop_device *lo, struct loop_info64 *info)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (lo->lo_state != Lo_bound)
 | 
						if (lo->lo_state != Lo_bound)
 | 
				
			||||||
		return -ENXIO;
 | 
							return -ENXIO;
 | 
				
			||||||
	error = vfs_getattr(file->f_path.mnt, file->f_path.dentry, &stat);
 | 
						error = vfs_getattr(&file->f_path, &stat);
 | 
				
			||||||
	if (error)
 | 
						if (error)
 | 
				
			||||||
		return error;
 | 
							return error;
 | 
				
			||||||
	memset(info, 0, sizeof(*info));
 | 
						memset(info, 0, sizeof(*info));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -509,6 +509,12 @@ ecryptfs_dentry_to_lower_mnt(struct dentry *dentry)
 | 
				
			||||||
	return ((struct ecryptfs_dentry_info *)dentry->d_fsdata)->lower_path.mnt;
 | 
						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
 | 
					static inline void
 | 
				
			||||||
ecryptfs_set_dentry_lower_mnt(struct dentry *dentry, struct vfsmount *lower_mnt)
 | 
					ecryptfs_set_dentry_lower_mnt(struct dentry *dentry, struct vfsmount *lower_mnt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1027,8 +1027,7 @@ int ecryptfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
 | 
				
			||||||
	struct kstat lower_stat;
 | 
						struct kstat lower_stat;
 | 
				
			||||||
	int rc;
 | 
						int rc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc = vfs_getattr(ecryptfs_dentry_to_lower_mnt(dentry),
 | 
						rc = vfs_getattr(ecryptfs_dentry_to_lower_path(dentry), &lower_stat);
 | 
				
			||||||
			 ecryptfs_dentry_to_lower(dentry), &lower_stat);
 | 
					 | 
				
			||||||
	if (!rc) {
 | 
						if (!rc) {
 | 
				
			||||||
		fsstack_copy_attr_all(dentry->d_inode,
 | 
							fsstack_copy_attr_all(dentry->d_inode,
 | 
				
			||||||
				      ecryptfs_inode_to_lower(dentry->d_inode));
 | 
									      ecryptfs_inode_to_lower(dentry->d_inode));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,7 +43,6 @@ static __be32
 | 
				
			||||||
nfsd3_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle  *argp,
 | 
					nfsd3_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle  *argp,
 | 
				
			||||||
					   struct nfsd3_attrstat *resp)
 | 
										   struct nfsd3_attrstat *resp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int	err;
 | 
					 | 
				
			||||||
	__be32	nfserr;
 | 
						__be32	nfserr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dprintk("nfsd: GETATTR(3)  %s\n",
 | 
						dprintk("nfsd: GETATTR(3)  %s\n",
 | 
				
			||||||
| 
						 | 
					@ -55,9 +54,7 @@ nfsd3_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle  *argp,
 | 
				
			||||||
	if (nfserr)
 | 
						if (nfserr)
 | 
				
			||||||
		RETURN_STATUS(nfserr);
 | 
							RETURN_STATUS(nfserr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = vfs_getattr(resp->fh.fh_export->ex_path.mnt,
 | 
						nfserr = fh_getattr(&resp->fh, &resp->stat);
 | 
				
			||||||
			  resp->fh.fh_dentry, &resp->stat);
 | 
					 | 
				
			||||||
	nfserr = nfserrno(err);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	RETURN_STATUS(nfserr);
 | 
						RETURN_STATUS(nfserr);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,7 @@
 | 
				
			||||||
#include "xdr3.h"
 | 
					#include "xdr3.h"
 | 
				
			||||||
#include "auth.h"
 | 
					#include "auth.h"
 | 
				
			||||||
#include "netns.h"
 | 
					#include "netns.h"
 | 
				
			||||||
 | 
					#include "vfs.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define NFSDDBG_FACILITY		NFSDDBG_XDR
 | 
					#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;
 | 
						struct dentry *dentry = fhp->fh_dentry;
 | 
				
			||||||
	if (dentry && dentry->d_inode) {
 | 
						if (dentry && dentry->d_inode) {
 | 
				
			||||||
	        int err;
 | 
						        __be32 err;
 | 
				
			||||||
		struct kstat stat;
 | 
							struct kstat stat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		err = vfs_getattr(fhp->fh_export->ex_path.mnt, dentry, &stat);
 | 
							err = fh_getattr(fhp, &stat);
 | 
				
			||||||
		if (!err) {
 | 
							if (!err) {
 | 
				
			||||||
			*p++ = xdr_one;		/* attributes follow */
 | 
								*p++ = xdr_one;		/* attributes follow */
 | 
				
			||||||
			lease_get_mtime(dentry->d_inode, &stat.mtime);
 | 
								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)
 | 
					void fill_post_wcc(struct svc_fh *fhp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int err;
 | 
						__be32 err;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (fhp->fh_post_saved)
 | 
						if (fhp->fh_post_saved)
 | 
				
			||||||
		printk("nfsd: inode locked twice during operation.\n");
 | 
							printk("nfsd: inode locked twice during operation.\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = vfs_getattr(fhp->fh_export->ex_path.mnt, fhp->fh_dentry,
 | 
						err = fh_getattr(fhp, &fhp->fh_post_attr);
 | 
				
			||||||
			&fhp->fh_post_attr);
 | 
					 | 
				
			||||||
	fhp->fh_post_change = fhp->fh_dentry->d_inode->i_version;
 | 
						fhp->fh_post_change = fhp->fh_dentry->d_inode->i_version;
 | 
				
			||||||
	if (err) {
 | 
						if (err) {
 | 
				
			||||||
		fhp->fh_post_saved = 0;
 | 
							fhp->fh_post_saved = 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1997,7 +1997,7 @@ static int get_parent_attributes(struct svc_export *exp, struct kstat *stat)
 | 
				
			||||||
		if (path.dentry != path.mnt->mnt_root)
 | 
							if (path.dentry != path.mnt->mnt_root)
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	err = vfs_getattr(path.mnt, path.dentry, stat);
 | 
						err = vfs_getattr(&path, stat);
 | 
				
			||||||
	path_put(&path);
 | 
						path_put(&path);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2050,7 +2050,7 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
 | 
				
			||||||
			goto out;
 | 
								goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = vfs_getattr(exp->ex_path.mnt, dentry, &stat);
 | 
						err = vfs_getattr(&path, &stat);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		goto out_nfserr;
 | 
							goto out_nfserr;
 | 
				
			||||||
	if ((bmval0 & (FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL |
 | 
						if ((bmval0 & (FATTR4_WORD0_FILES_FREE | FATTR4_WORD0_FILES_TOTAL |
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,17 +26,13 @@ static __be32
 | 
				
			||||||
nfsd_return_attrs(__be32 err, struct nfsd_attrstat *resp)
 | 
					nfsd_return_attrs(__be32 err, struct nfsd_attrstat *resp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (err) return err;
 | 
						if (err) return err;
 | 
				
			||||||
	return nfserrno(vfs_getattr(resp->fh.fh_export->ex_path.mnt,
 | 
						return fh_getattr(&resp->fh, &resp->stat);
 | 
				
			||||||
				    resp->fh.fh_dentry,
 | 
					 | 
				
			||||||
				    &resp->stat));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
static __be32
 | 
					static __be32
 | 
				
			||||||
nfsd_return_dirop(__be32 err, struct nfsd_diropres *resp)
 | 
					nfsd_return_dirop(__be32 err, struct nfsd_diropres *resp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (err) return err;
 | 
						if (err) return err;
 | 
				
			||||||
	return nfserrno(vfs_getattr(resp->fh.fh_export->ex_path.mnt,
 | 
						return fh_getattr(&resp->fh, &resp->stat);
 | 
				
			||||||
				    resp->fh.fh_dentry,
 | 
					 | 
				
			||||||
				    &resp->stat));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Get a file's attributes
 | 
					 * Get a file's attributes
 | 
				
			||||||
| 
						 | 
					@ -150,9 +146,7 @@ nfsd_proc_read(struct svc_rqst *rqstp, struct nfsd_readargs *argp,
 | 
				
			||||||
				  &resp->count);
 | 
									  &resp->count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (nfserr) return nfserr;
 | 
						if (nfserr) return nfserr;
 | 
				
			||||||
	return nfserrno(vfs_getattr(resp->fh.fh_export->ex_path.mnt,
 | 
						return fh_getattr(&resp->fh, &resp->stat);
 | 
				
			||||||
				    resp->fh.fh_dentry,
 | 
					 | 
				
			||||||
				    &resp->stat));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@
 | 
				
			||||||
 * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
 | 
					 * Copyright (C) 1995, 1996 Olaf Kirch <okir@monad.swb.de>
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "vfs.h"
 | 
				
			||||||
#include "xdr.h"
 | 
					#include "xdr.h"
 | 
				
			||||||
#include "auth.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)
 | 
					__be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct kstat stat;
 | 
						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);
 | 
						return encode_fattr(rqstp, p, fhp, &stat);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@
 | 
				
			||||||
#define LINUX_NFSD_VFS_H
 | 
					#define LINUX_NFSD_VFS_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "nfsfh.h"
 | 
					#include "nfsfh.h"
 | 
				
			||||||
 | 
					#include "nfsd.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Flags for nfsd_permission
 | 
					 * 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 */
 | 
					#endif /* LINUX_NFSD_VFS_H */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								fs/stat.c
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								fs/stat.c
									
										
									
									
									
								
							| 
						 | 
					@ -37,17 +37,17 @@ void generic_fillattr(struct inode *inode, struct kstat *stat)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EXPORT_SYMBOL(generic_fillattr);
 | 
					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;
 | 
						int retval;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	retval = security_inode_getattr(mnt, dentry);
 | 
						retval = security_inode_getattr(path->mnt, path->dentry);
 | 
				
			||||||
	if (retval)
 | 
						if (retval)
 | 
				
			||||||
		return retval;
 | 
							return retval;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (inode->i_op->getattr)
 | 
						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);
 | 
						generic_fillattr(inode, stat);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -61,8 +61,7 @@ int vfs_fstat(unsigned int fd, struct kstat *stat)
 | 
				
			||||||
	int error = -EBADF;
 | 
						int error = -EBADF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (f.file) {
 | 
						if (f.file) {
 | 
				
			||||||
		error = vfs_getattr(f.file->f_path.mnt, f.file->f_path.dentry,
 | 
							error = vfs_getattr(&f.file->f_path, stat);
 | 
				
			||||||
				    stat);
 | 
					 | 
				
			||||||
		fdput(f);
 | 
							fdput(f);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return error;
 | 
						return error;
 | 
				
			||||||
| 
						 | 
					@ -89,7 +88,7 @@ retry:
 | 
				
			||||||
	if (error)
 | 
						if (error)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	error = vfs_getattr(path.mnt, path.dentry, stat);
 | 
						error = vfs_getattr(&path, stat);
 | 
				
			||||||
	path_put(&path);
 | 
						path_put(&path);
 | 
				
			||||||
	if (retry_estale(error, lookup_flags)) {
 | 
						if (retry_estale(error, lookup_flags)) {
 | 
				
			||||||
		lookup_flags |= LOOKUP_REVAL;
 | 
							lookup_flags |= LOOKUP_REVAL;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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 const struct inode_operations page_symlink_inode_operations;
 | 
				
			||||||
extern int generic_readlink(struct dentry *, char __user *, int);
 | 
					extern int generic_readlink(struct dentry *, char __user *, int);
 | 
				
			||||||
extern void generic_fillattr(struct inode *, struct kstat *);
 | 
					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_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);
 | 
					void inode_sub_bytes(struct inode *inode, loff_t bytes);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2519,7 +2519,7 @@ static int copy_module_from_fd(int fd, struct load_info *info)
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = vfs_getattr(file->f_vfsmnt, file->f_dentry, &stat);
 | 
						err = vfs_getattr(&file->f_path, &stat);
 | 
				
			||||||
	if (err)
 | 
						if (err)
 | 
				
			||||||
		goto out;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue