Forráskód Böngészése

[PATCH] knfsd: nfsd4: grant delegations more frequently

Keep unused openowners around for at least one lease period, to avoid the need
for as many open confirmations and to allow handing out more delegations.

Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
NeilBrown 19 éve
szülő
commit
358dd55aa3
1 módosított fájl, 2 hozzáadás és 11 törlés
  1. 2 11
      fs/nfsd/nfs4state.c

+ 2 - 11
fs/nfsd/nfs4state.c

@@ -1199,8 +1199,7 @@ move_to_close_lru(struct nfs4_stateowner *sop)
 {
 {
 	dprintk("NFSD: move_to_close_lru nfs4_stateowner %p\n", sop);
 	dprintk("NFSD: move_to_close_lru nfs4_stateowner %p\n", sop);
 
 
-	unhash_stateowner(sop);
-	list_add_tail(&sop->so_close_lru, &close_lru);
+	list_move_tail(&sop->so_close_lru, &close_lru);
 	sop->so_time = get_seconds();
 	sop->so_time = get_seconds();
 }
 }
 
 
@@ -1929,8 +1928,7 @@ nfs4_laundromat(void)
 		}
 		}
 		dprintk("NFSD: purging unused open stateowner (so_id %d)\n",
 		dprintk("NFSD: purging unused open stateowner (so_id %d)\n",
 			sop->so_id);
 			sop->so_id);
-		list_del(&sop->so_close_lru);
-		nfs4_put_stateowner(sop);
+		release_stateowner(sop);
 	}
 	}
 	if (clientid_val < NFSD_LAUNDROMAT_MINTIMEOUT)
 	if (clientid_val < NFSD_LAUNDROMAT_MINTIMEOUT)
 		clientid_val = NFSD_LAUNDROMAT_MINTIMEOUT;
 		clientid_val = NFSD_LAUNDROMAT_MINTIMEOUT;
@@ -3218,15 +3216,8 @@ __nfs4_state_shutdown(void)
 	int i;
 	int i;
 	struct nfs4_client *clp = NULL;
 	struct nfs4_client *clp = NULL;
 	struct nfs4_delegation *dp = NULL;
 	struct nfs4_delegation *dp = NULL;
-	struct nfs4_stateowner *sop = NULL;
 	struct list_head *pos, *next, reaplist;
 	struct list_head *pos, *next, reaplist;
 
 
-	list_for_each_safe(pos, next, &close_lru) {
-		sop = list_entry(pos, struct nfs4_stateowner, so_close_lru);
-		list_del(&sop->so_close_lru);
-		nfs4_put_stateowner(sop);
-	}
-
 	for (i = 0; i < CLIENT_HASH_SIZE; i++) {
 	for (i = 0; i < CLIENT_HASH_SIZE; i++) {
 		while (!list_empty(&conf_id_hashtbl[i])) {
 		while (!list_empty(&conf_id_hashtbl[i])) {
 			clp = list_entry(conf_id_hashtbl[i].next, struct nfs4_client, cl_idhash);
 			clp = list_entry(conf_id_hashtbl[i].next, struct nfs4_client, cl_idhash);