summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/nfs_common/grace.c6
-rw-r--r--fs/nfsd/nfs4state.c7
2 files changed, 9 insertions, 4 deletions
diff --git a/fs/nfs_common/grace.c b/fs/nfs_common/grace.c
index bd3e2d328e64..5be08f02a76b 100644
--- a/fs/nfs_common/grace.c
+++ b/fs/nfs_common/grace.c
@@ -30,7 +30,11 @@ locks_start_grace(struct net *net, struct lock_manager *lm)
30 struct list_head *grace_list = net_generic(net, grace_net_id); 30 struct list_head *grace_list = net_generic(net, grace_net_id);
31 31
32 spin_lock(&grace_lock); 32 spin_lock(&grace_lock);
33 list_add(&lm->list, grace_list); 33 if (list_empty(&lm->list))
34 list_add(&lm->list, grace_list);
35 else
36 WARN(1, "double list_add attempt detected in net %x %s\n",
37 net->ns.inum, (net == &init_net) ? "(init_net)" : "");
34 spin_unlock(&grace_lock); 38 spin_unlock(&grace_lock);
35} 39}
36EXPORT_SYMBOL_GPL(locks_start_grace); 40EXPORT_SYMBOL_GPL(locks_start_grace);
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 73451436c1c2..b29b5a185a2c 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -7103,6 +7103,10 @@ static int nfs4_state_create_net(struct net *net)
7103 INIT_LIST_HEAD(&nn->sessionid_hashtbl[i]); 7103 INIT_LIST_HEAD(&nn->sessionid_hashtbl[i]);
7104 nn->conf_name_tree = RB_ROOT; 7104 nn->conf_name_tree = RB_ROOT;
7105 nn->unconf_name_tree = RB_ROOT; 7105 nn->unconf_name_tree = RB_ROOT;
7106 nn->boot_time = get_seconds();
7107 nn->grace_ended = false;
7108 nn->nfsd4_manager.block_opens = true;
7109 INIT_LIST_HEAD(&nn->nfsd4_manager.list);
7106 INIT_LIST_HEAD(&nn->client_lru); 7110 INIT_LIST_HEAD(&nn->client_lru);
7107 INIT_LIST_HEAD(&nn->close_lru); 7111 INIT_LIST_HEAD(&nn->close_lru);
7108 INIT_LIST_HEAD(&nn->del_recall_lru); 7112 INIT_LIST_HEAD(&nn->del_recall_lru);
@@ -7160,9 +7164,6 @@ nfs4_state_start_net(struct net *net)
7160 ret = nfs4_state_create_net(net); 7164 ret = nfs4_state_create_net(net);
7161 if (ret) 7165 if (ret)
7162 return ret; 7166 return ret;
7163 nn->boot_time = get_seconds();
7164 nn->grace_ended = false;
7165 nn->nfsd4_manager.block_opens = true;
7166 locks_start_grace(net, &nn->nfsd4_manager); 7167 locks_start_grace(net, &nn->nfsd4_manager);
7167 nfsd4_client_tracking_init(net); 7168 nfsd4_client_tracking_init(net);
7168 printk(KERN_INFO "NFSD: starting %ld-second grace period (net %x)\n", 7169 printk(KERN_INFO "NFSD: starting %ld-second grace period (net %x)\n",