diff options
author | Andy Adamson <andros@netapp.com> | 2011-02-28 20:34:10 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-03-11 15:38:41 -0500 |
commit | d3b4c9d76738df49a7db7682c2518a0ef9f7391d (patch) | |
tree | 69ab2ccad799bee8a00ad901b57739be44747fcd /fs/nfs | |
parent | 89d1ea65798953b251e399b17f32d31033889ae0 (diff) |
NFSv4.1: new flag for state renewal check
Data servers not sharing a session with the mount MDS always have an empty
cl_superblocks list.
Replace the cl_superblocks empty list check to see if it is time to shut down
renewd with the NFS_CS_STOP_RENEW bit which is not set by such a data server.
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/client.c | 5 | ||||
-rw-r--r-- | fs/nfs/nfs4renewd.c | 6 |
2 files changed, 6 insertions, 5 deletions
diff --git a/fs/nfs/client.c b/fs/nfs/client.c index b9ed2a8bc26a..a86698cd82fd 100644 --- a/fs/nfs/client.c +++ b/fs/nfs/client.c | |||
@@ -1019,14 +1019,19 @@ static void nfs_server_insert_lists(struct nfs_server *server) | |||
1019 | spin_lock(&nfs_client_lock); | 1019 | spin_lock(&nfs_client_lock); |
1020 | list_add_tail_rcu(&server->client_link, &clp->cl_superblocks); | 1020 | list_add_tail_rcu(&server->client_link, &clp->cl_superblocks); |
1021 | list_add_tail(&server->master_link, &nfs_volume_list); | 1021 | list_add_tail(&server->master_link, &nfs_volume_list); |
1022 | clear_bit(NFS_CS_STOP_RENEW, &clp->cl_res_state); | ||
1022 | spin_unlock(&nfs_client_lock); | 1023 | spin_unlock(&nfs_client_lock); |
1023 | 1024 | ||
1024 | } | 1025 | } |
1025 | 1026 | ||
1026 | static void nfs_server_remove_lists(struct nfs_server *server) | 1027 | static void nfs_server_remove_lists(struct nfs_server *server) |
1027 | { | 1028 | { |
1029 | struct nfs_client *clp = server->nfs_client; | ||
1030 | |||
1028 | spin_lock(&nfs_client_lock); | 1031 | spin_lock(&nfs_client_lock); |
1029 | list_del_rcu(&server->client_link); | 1032 | list_del_rcu(&server->client_link); |
1033 | if (clp && list_empty(&clp->cl_superblocks)) | ||
1034 | set_bit(NFS_CS_STOP_RENEW, &clp->cl_res_state); | ||
1030 | list_del(&server->master_link); | 1035 | list_del(&server->master_link); |
1031 | spin_unlock(&nfs_client_lock); | 1036 | spin_unlock(&nfs_client_lock); |
1032 | 1037 | ||
diff --git a/fs/nfs/nfs4renewd.c b/fs/nfs/nfs4renewd.c index 402143d75fc5..df8e7f3ca56d 100644 --- a/fs/nfs/nfs4renewd.c +++ b/fs/nfs/nfs4renewd.c | |||
@@ -64,12 +64,8 @@ nfs4_renew_state(struct work_struct *work) | |||
64 | ops = clp->cl_mvops->state_renewal_ops; | 64 | ops = clp->cl_mvops->state_renewal_ops; |
65 | dprintk("%s: start\n", __func__); | 65 | dprintk("%s: start\n", __func__); |
66 | 66 | ||
67 | rcu_read_lock(); | 67 | if (test_bit(NFS_CS_STOP_RENEW, &clp->cl_res_state)) |
68 | if (list_empty(&clp->cl_superblocks)) { | ||
69 | rcu_read_unlock(); | ||
70 | goto out; | 68 | goto out; |
71 | } | ||
72 | rcu_read_unlock(); | ||
73 | 69 | ||
74 | spin_lock(&clp->cl_lock); | 70 | spin_lock(&clp->cl_lock); |
75 | lease = clp->cl_lease_time; | 71 | lease = clp->cl_lease_time; |