NFSv4.1: Ensure that nfs41_walk_client_list() does start lease recovery
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Sat, 19 Jan 2013 04:01:43 +0000 (23:01 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 4 Feb 2013 00:27:05 +0000 (18:27 -0600)
commit 65436ec0c8e344d9b23302b686e418f2a7b7cf7b upstream.

We do need to start the lease recovery thread prior to waiting for the
client initialisation to complete in NFSv4.1.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: Chuck Lever <chuck.lever@oracle.com>
Cc: Ben Greear <greearb@candelatech.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/nfs/nfs4client.c

index da540bf412b851df50811e46b485b8460f84b0f2..1f5513101dfdfb7054ecf1f5e8df6e6c35a023f0 100644 (file)
@@ -439,14 +439,17 @@ int nfs41_walk_client_list(struct nfs_client *new,
                                nfs_put_client(prev);
                        prev = pos;
 
+                       nfs4_schedule_lease_recovery(pos);
                        status = nfs_wait_client_init_complete(pos);
                        if (status < 0) {
                                nfs_put_client(pos);
                                spin_lock(&nn->nfs_client_lock);
                                continue;
                        }
-
+                       status = pos->cl_cons_state;
                        spin_lock(&nn->nfs_client_lock);
+                       if (status < 0)
+                               continue;
                }
 
                if (pos->rpc_ops != new->rpc_ops)