NFS: lookup supports alternate client
Subsystems (2)
PATCH v4 2/5 NFS: lookup supports alternate client
A later patch will need to perform a lookup using an alternate client with a different security flavor. This patch adds support for doing that on NFS v4.
Signed-off-by Bryan Schumaker <[email protected]>
--- fs/nfs/dir.c | 6 ++-- fs/nfs/internal.h | 6 ++- fs/nfs/namespace.c | 2 +- fs/nfs/nfs3proc.c | 2 +- fs/nfs/nfs4_fs.h | 3 +- fs/nfs/nfs4proc.c | 85 ++++++++++++++++++++++++++--------------------- fs/nfs/proc.c | 2 +- include/linux/nfs_xdr.h | 2 +- 8 files changed, 60 insertions(+), 48 deletions(-)
fs/nfs/dir.c +3 -3
@@ -1067,7 +1067,7 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)if (fhandle ==NULL || fattr ==NULL ) goto out_error; - error =NFS_PROTO (dir)->lookup (dir, &dentry->d_name, fhandle, fattr); + error =NFS_PROTO (dir)->lookup (NFS_SERVER (dir)->client, dir, &dentry->d_name, fhandle, fattr);if (error) goto out_bad;if (nfs_compare_fh (NFS_FH (inode), fhandle))
@@ -1212,7 +1212,7 @@ static struct dentry *nfs_lookup(struct inode *dir, struct dentry * dentry, stru parent = dentry->d_parent;/* Protect against concurrent sillydeletes */ nfs_block_sillyrename (parent); - error =NFS_PROTO (dir)->lookup (dir, &dentry->d_name, fhandle, fattr); + error =NFS_PROTO (dir)->lookup (NFS_SERVER (dir)->client, dir, &dentry->d_name, fhandle, fattr);if (error == -ENOENT ) goto no_entry;if (error <0 ) {
@@ -1545,7 +1545,7 @@ int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fhandle,if (dentry->d_inode) goto out;if (fhandle->size ==0 ) { - error =NFS_PROTO (dir)->lookup (dir, &dentry->d_name, fhandle, fattr); + error =NFS_PROTO (dir)->lookup (NFS_SERVER (dir)->client, dir, &dentry->d_name, fhandle, fattr);if (error) goto out_error; }
fs/nfs/internal.h +4 -2
@@ -274,7 +274,8 @@ extern int nfs_migrate_page(struct address_space *,#endif /* nfs4proc.c */ -extern int _nfs4_call_sync(struct nfs_server *server, +extern int _nfs4_call_sync(struct rpc_clnt *clnt, + struct nfs_server *server, struct rpc_message *msg, struct nfs4_sequence_args *args, struct nfs4_sequence_res *res,
@@ -283,7 +284,8 @@ extern int _nfs4_call_sync_session(struct nfs_server *server,struct rpc_message *msg, struct nfs4_sequence_args *args, struct nfs4_sequence_res *res, - int cache_reply); + int cache_reply, + struct rpc_clnt *alt_clnt);/* * Determine the device name as a string
fs/nfs/namespace.c +1 -1
@@ -127,7 +127,7 @@ static void * nfs_follow_mountpoint(struct dentry *dentry, struct nameidata *nd)/* Look it up again */ parent =dget_parent (nd->path.dentry); - err = server->nfs_client->rpc_ops->lookup (parent->d_inode, + err = server->nfs_client->rpc_ops->lookup (server->client, parent->d_inode, &nd->path.dentry->d_name, fh, fattr);dput (parent);
fs/nfs/nfs3proc.c +1 -1
@@ -141,7 +141,7 @@ nfs3_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, }static int -nfs3_proc_lookup (struct inode *dir,struct qstr *name, +nfs3_proc_lookup (struct rpc_clnt *clnt,struct inode *dir,struct qstr *name,struct nfs_fh *fhandle,struct nfs_fattr *fattr) {struct nfs3_diropargs arg = {
fs/nfs/nfs4_fs.h +2 -1
@@ -57,7 +57,8 @@ enum nfs4_session_state {struct nfs4_minor_version_ops {u32 minor_version; - int (*call_sync)(struct nfs_server *server, + int (*call_sync)(struct rpc_clnt *clnt, + struct nfs_server *server, struct rpc_message *msg, struct nfs4_sequence_args *args, struct nfs4_sequence_res *res,
fs/nfs/nfs4proc.c +47 -38
287 lines not on this page · raw message
fs/nfs/proc.c +1 -1
@@ -177,7 +177,7 @@ nfs_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr, }static int -nfs_proc_lookup (struct inode *dir,struct qstr *name, +nfs_proc_lookup (struct rpc_clnt *clnt,struct inode *dir,struct qstr *name,struct nfs_fh *fhandle,struct nfs_fattr *fattr) {struct nfs_diropargs arg = {
include/linux/nfs_xdr.h +1 -1
@@ -1061,7 +1061,7 @@ struct nfs_rpc_ops { struct nfs_fattr *);int (*setattr) (struct dentry *,struct nfs_fattr *,struct iattr *); -int (*lookup) (struct inode *,struct qstr *, +int (*lookup) (struct rpc_clnt *clnt,struct inode *,struct qstr *,struct nfs_fh *,struct nfs_fattr *);int (*access) (struct inode *,struct nfs_access_entry *); int (*readlink)(struct inode *, struct page *, unsigned int,
Signature · 1 line
1.7.3.4