diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfsd/netns.h | 6 | ||||
-rw-r--r-- | fs/nfsd/nfs4state.c | 20 |
2 files changed, 13 insertions, 13 deletions
diff --git a/fs/nfsd/netns.h b/fs/nfsd/netns.h index 9a98a0aeee6..a356ea3dc68 100644 --- a/fs/nfsd/netns.h +++ b/fs/nfsd/netns.h | |||
@@ -71,8 +71,14 @@ struct nfsd_net { | |||
71 | /* | 71 | /* |
72 | * client_lru holds client queue ordered by nfs4_client.cl_time | 72 | * client_lru holds client queue ordered by nfs4_client.cl_time |
73 | * for lease renewal. | 73 | * for lease renewal. |
74 | * | ||
75 | * close_lru holds (open) stateowner queue ordered by nfs4_stateowner.so_time | ||
76 | * for last close replay. | ||
77 | * | ||
78 | * All of the above fields are protected by the client_mutex. | ||
74 | */ | 79 | */ |
75 | struct list_head client_lru; | 80 | struct list_head client_lru; |
81 | struct list_head close_lru; | ||
76 | }; | 82 | }; |
77 | 83 | ||
78 | extern int nfsd_net_id; | 84 | extern int nfsd_net_id; |
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 9cf7e9bf369..a8e406449ef 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -402,14 +402,6 @@ static unsigned int clientstr_hashval(const char *name) | |||
402 | } | 402 | } |
403 | 403 | ||
404 | /* | 404 | /* |
405 | * close_lru holds (open) stateowner queue ordered by nfs4_stateowner.so_time | ||
406 | * for last close replay. | ||
407 | * | ||
408 | * All of the above fields are protected by the client_mutex. | ||
409 | */ | ||
410 | static struct list_head close_lru; | ||
411 | |||
412 | /* | ||
413 | * We store the NONE, READ, WRITE, and BOTH bits separately in the | 405 | * We store the NONE, READ, WRITE, and BOTH bits separately in the |
414 | * st_{access,deny}_bmap field of the stateid, in order to track not | 406 | * st_{access,deny}_bmap field of the stateid, in order to track not |
415 | * only what share bits are currently in force, but also what | 407 | * only what share bits are currently in force, but also what |
@@ -2465,11 +2457,13 @@ static void init_open_stateid(struct nfs4_ol_stateid *stp, struct nfs4_file *fp, | |||
2465 | } | 2457 | } |
2466 | 2458 | ||
2467 | static void | 2459 | static void |
2468 | move_to_close_lru(struct nfs4_openowner *oo) | 2460 | move_to_close_lru(struct nfs4_openowner *oo, struct net *net) |
2469 | { | 2461 | { |
2462 | struct nfsd_net *nn = net_generic(net, nfsd_net_id); | ||
2463 | |||
2470 | dprintk("NFSD: move_to_close_lru nfs4_openowner %p\n", oo); | 2464 | dprintk("NFSD: move_to_close_lru nfs4_openowner %p\n", oo); |
2471 | 2465 | ||
2472 | list_move_tail(&oo->oo_close_lru, &close_lru); | 2466 | list_move_tail(&oo->oo_close_lru, &nn->close_lru); |
2473 | oo->oo_time = get_seconds(); | 2467 | oo->oo_time = get_seconds(); |
2474 | } | 2468 | } |
2475 | 2469 | ||
@@ -3242,7 +3236,7 @@ nfs4_laundromat(void) | |||
3242 | unhash_delegation(dp); | 3236 | unhash_delegation(dp); |
3243 | } | 3237 | } |
3244 | test_val = nfsd4_lease; | 3238 | test_val = nfsd4_lease; |
3245 | list_for_each_safe(pos, next, &close_lru) { | 3239 | list_for_each_safe(pos, next, &nn->close_lru) { |
3246 | oo = container_of(pos, struct nfs4_openowner, oo_close_lru); | 3240 | oo = container_of(pos, struct nfs4_openowner, oo_close_lru); |
3247 | if (time_after((unsigned long)oo->oo_time, (unsigned long)cutoff)) { | 3241 | if (time_after((unsigned long)oo->oo_time, (unsigned long)cutoff)) { |
3248 | u = oo->oo_time - cutoff; | 3242 | u = oo->oo_time - cutoff; |
@@ -3820,7 +3814,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, | |||
3820 | * little while to handle CLOSE replay. | 3814 | * little while to handle CLOSE replay. |
3821 | */ | 3815 | */ |
3822 | if (list_empty(&oo->oo_owner.so_stateids)) | 3816 | if (list_empty(&oo->oo_owner.so_stateids)) |
3823 | move_to_close_lru(oo); | 3817 | move_to_close_lru(oo, SVC_NET(rqstp)); |
3824 | } | 3818 | } |
3825 | } | 3819 | } |
3826 | out: | 3820 | out: |
@@ -4721,7 +4715,6 @@ nfs4_state_init(void) | |||
4721 | for (i = 0; i < FILE_HASH_SIZE; i++) { | 4715 | for (i = 0; i < FILE_HASH_SIZE; i++) { |
4722 | INIT_LIST_HEAD(&file_hashtbl[i]); | 4716 | INIT_LIST_HEAD(&file_hashtbl[i]); |
4723 | } | 4717 | } |
4724 | INIT_LIST_HEAD(&close_lru); | ||
4725 | INIT_LIST_HEAD(&del_recall_lru); | 4718 | INIT_LIST_HEAD(&del_recall_lru); |
4726 | } | 4719 | } |
4727 | 4720 | ||
@@ -4785,6 +4778,7 @@ static int nfs4_state_start_net(struct net *net) | |||
4785 | nn->conf_name_tree = RB_ROOT; | 4778 | nn->conf_name_tree = RB_ROOT; |
4786 | nn->unconf_name_tree = RB_ROOT; | 4779 | nn->unconf_name_tree = RB_ROOT; |
4787 | INIT_LIST_HEAD(&nn->client_lru); | 4780 | INIT_LIST_HEAD(&nn->client_lru); |
4781 | INIT_LIST_HEAD(&nn->close_lru); | ||
4788 | 4782 | ||
4789 | return 0; | 4783 | return 0; |
4790 | 4784 | ||