Messages in this thread Patches in this message | | | From | NeilBrown <> | Date | Fri, 1 Sep 2006 14:39:16 +1000 | Subject | [PATCH 013 of 19] knfsd: Simplify nlmsvc_invalidate_all |
| |
As a result of previous patches, the loop in nlmsvc_invalidate_all just sets h_expires for all client/hosts to 0 (though does it in a very complicated way).
This was possibly meant to trigger early garbage collection but half the time '0' is in the future and so it infact delays garbage collection.
Pre-aging the 'hosts' is not really needed at this point anyway so we throw out the loop and nlm_find_client which is no longer needed.
Signed-off-by: Neil Brown <neilb@suse.de>
### Diffstat output ./fs/lockd/host.c | 27 --------------------------- ./fs/lockd/svcsubs.c | 10 +--------- ./include/linux/lockd/lockd.h | 4 +--- 3 files changed, 2 insertions(+), 39 deletions(-)
diff .prev/fs/lockd/host.c ./fs/lockd/host.c --- .prev/fs/lockd/host.c 2006-09-01 11:07:19.000000000 +1000 +++ ./fs/lockd/host.c 2006-09-01 11:37:34.000000000 +1000 @@ -192,33 +192,6 @@ nlm_destroy_host(struct nlm_host *host) kfree(host); } -struct nlm_host * -nlm_find_client(void) -{ - struct hlist_head *chain; - struct hlist_node *pos; - - /* find a nlm_host for a client for which h_killed == 0. - * and return it - */ - mutex_lock(&nlm_host_mutex); - for (chain = nlm_hosts; chain < nlm_hosts + NLM_HOST_NRHASH; ++chain) { - struct nlm_host *host; - - hlist_for_each_entry(host, pos, chain, h_hash) { - if (host->h_server && - host->h_killed == 0) { - nlm_get_host(host); - mutex_unlock(&nlm_host_mutex); - return host; - } - } - } - mutex_unlock(&nlm_host_mutex); - return NULL; -} - - /* * Create the NLM RPC client for an NLM peer */ diff .prev/fs/lockd/svcsubs.c ./fs/lockd/svcsubs.c --- .prev/fs/lockd/svcsubs.c 2006-09-01 11:06:21.000000000 +1000 +++ ./fs/lockd/svcsubs.c 2006-09-01 11:38:14.000000000 +1000 @@ -354,13 +354,11 @@ nlmsvc_free_host_resources(struct nlm_ho } /* - * delete all hosts structs for clients + * Remove all locks held for clients */ void nlmsvc_invalidate_all(void) { - struct nlm_host *host; - /* Release all locks held by NFS clients. * Previously, the code would call * nlmsvc_free_host_resources for each client in @@ -368,10 +366,4 @@ nlmsvc_invalidate_all(void) * Now we just do it once in nlm_traverse_files. */ nlm_traverse_files(NULL, nlmsvc_is_client); - - while ((host = nlm_find_client()) != NULL) { - host->h_expires = 0; - host->h_killed = 1; - nlm_release_host(host); - } } diff .prev/include/linux/lockd/lockd.h ./include/linux/lockd/lockd.h --- .prev/include/linux/lockd/lockd.h 2006-09-01 10:58:38.000000000 +1000 +++ ./include/linux/lockd/lockd.h 2006-09-01 11:38:57.000000000 +1000 @@ -45,8 +45,7 @@ struct nlm_host { unsigned short h_proto; /* transport proto */ unsigned short h_reclaiming : 1, h_server : 1, /* server side, not client side */ - h_inuse : 1, - h_killed : 1; + h_inuse : 1; wait_queue_head_t h_gracewait; /* wait while reclaiming */ struct rw_semaphore h_rwsem; /* Reboot recovery lock */ u32 h_state; /* pseudo-state counter */ @@ -169,7 +168,6 @@ void nlm_rebind_host(struct nlm_host struct nlm_host * nlm_get_host(struct nlm_host *); void nlm_release_host(struct nlm_host *); void nlm_shutdown_hosts(void); -extern struct nlm_host *nlm_find_client(void); extern void nlm_host_rebooted(const struct sockaddr_in *, const char *, int, u32); struct nsm_handle *nsm_find(const struct sockaddr_in *, const char *, int); void nsm_release(struct nsm_handle *); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |