No subject
Sun Jul 6 09:55:38 EDT 2008
therefore it is never expected to be NULL.
Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
fs/nfs/nfs4_fs.h | 2 ++
fs/nfs/nfs4proc.c | 4 ++++
fs/nfs/nfs4state.c | 5 +++--
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h
index a9f2780..5de1979 100644
--- a/fs/nfs/nfs4_fs.h
+++ b/fs/nfs/nfs4_fs.h
@@ -166,6 +166,7 @@ struct nfs4_state_recovery_ops {
int (*recover_open)(struct nfs4_state_owner *, struct nfs4_state *);
int (*recover_lock)(struct nfs4_state *, struct file_lock *);
int (*renew_lease)(struct nfs_client *, struct rpc_cred *);
+ int (*establish_clid)(struct nfs_client *, struct rpc_cred *);
};
struct nfs4_state_maintenance_ops {
@@ -189,6 +190,7 @@ extern int nfs4_proc_setclientid_confirm(struct nfs_client *, struct rpc_cred *)
extern int nfs4_proc_async_renew(struct nfs_client *, struct rpc_cred *);
extern int nfs4_proc_renew(struct nfs_client *, struct rpc_cred *);
extern int nfs4_wait_bit_killable(void *);
+extern int nfs4_init_clientid(struct nfs_client *, struct rpc_cred *);
extern int nfs4_do_close(struct path *path, struct nfs4_state *state, int wait);
extern struct dentry *nfs4_atomic_open(struct inode *, struct dentry *, struct nameidata *);
extern int nfs4_open_revalidate(struct inode *, struct dentry *, int, struct nameidata *);
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 17c3834..6e5c35a 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -4942,6 +4942,7 @@ struct nfs4_state_recovery_ops nfs40_reboot_recovery_ops = {
.recover_open = nfs4_open_reclaim,
.recover_lock = nfs4_lock_reclaim,
.renew_lease = nfs4_proc_renew,
+ .establish_clid = nfs4_init_clientid,
};
#if defined(CONFIG_NFS_V4_1)
@@ -4949,6 +4950,7 @@ struct nfs4_state_recovery_ops nfs41_reboot_recovery_ops = {
.recover_open = nfs4_open_reclaim,
.recover_lock = nfs4_lock_reclaim,
.renew_lease = nfs4_proc_sequence,
+ .establish_clid = nfs4_proc_exchange_id,
};
#endif /* CONFIG_NFS_V4_1 */
@@ -4956,6 +4958,7 @@ struct nfs4_state_recovery_ops nfs40_network_partition_recovery_ops = {
.recover_open = nfs4_open_expired,
.recover_lock = nfs4_lock_expired,
.renew_lease = nfs4_proc_renew,
+ .establish_clid = nfs4_init_clientid,
};
#if defined(CONFIG_NFS_V4_1)
@@ -4963,6 +4966,7 @@ struct nfs4_state_recovery_ops nfs41_network_partition_recovery_ops = {
.recover_open = nfs4_open_expired,
.recover_lock = nfs4_lock_expired,
.renew_lease = nfs4_proc_sequence,
+ .establish_clid = nfs4_proc_exchange_id,
};
#endif /* CONFIG_NFS_V4_1 */
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
index 5d7fe0e..7214eba 100644
--- a/fs/nfs/nfs4state.c
+++ b/fs/nfs/nfs4state.c
@@ -62,7 +62,7 @@ const nfs4_stateid zero_stateid;
static LIST_HEAD(nfs4_clientid_list);
-static int nfs4_init_client(struct nfs_client *clp, struct rpc_cred *cred)
+int nfs4_init_clientid(struct nfs_client *clp, struct rpc_cred *cred)
{
int status = nfs4_proc_setclientid(clp, NFS4_CALLBACK,
nfs_callback_tcpport, cred);
@@ -994,8 +994,9 @@ restart_loop:
nfs4_state_mark_reclaim(clp);
status = -ENOENT;
cred = nfs4_get_setclientid_cred(clp);
+ dprintk("%s: setclientid_cred %p\n", __func__, cred);
if (cred != NULL) {
- status = nfs4_init_client(clp, cred);
+ status = ops->establish_clid(clp, cred);
put_rpccred(cred);
/* Handle case where the user hasn't set up machine creds */
if (status == -EACCES && cred == clp->cl_machine_cred) {
--
1.5.6.3
More information about the pNFS
mailing list