Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 350fce8d authored by NeilBrown's avatar NeilBrown Committed by Linus Torvalds
Browse files

[PATCH] 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: default avatarNeil Brown <neilb@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent c53c1bb9
Loading
Loading
Loading
Loading
+0 −27
Original line number Diff line number Diff line
@@ -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
 */
+1 −9
Original line number Diff line number Diff line
@@ -354,13 +354,11 @@ nlmsvc_free_host_resources(struct nlm_host *host)
}

/*
 * 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);
	}
}
+1 −3
Original line number Diff line number Diff line
@@ -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 *);