diff options
author | Jeff Layton <jlayton@redhat.com> | 2010-02-05 15:09:22 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@citi.umich.edu> | 2010-02-08 16:20:35 -0500 |
commit | 7e469af97eed947ba9204712601281a69ae8eb6c (patch) | |
tree | f4488e393995ae523ed6dea5370ddad7aa1505b5 | |
parent | cdd30fa1664e0245fa64330c7cc2ddab7e47c223 (diff) |
lockd: don't clear sm_monitored on nsm_reboot_lookup
When lockd gets a notify downcall from statd, it'll search its hosts
cache and then clear the sm_monitored bit on the host it finds. The idea
is apparently to make lockd redo a SM_MON on the next lock request.
This is unnecessary and causes the kernel's NSM cache to go out of sync
with statd. statd doesn't stop monitoring a host when it gets a
SM_NOTIFY and there's no guarantee that another lock will occur after
the reclaim and before the unmount. In that event, no SM_UNMON will
occur.
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
-rw-r--r-- | fs/lockd/mon.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c index f956651d0f65..fefa4df3f005 100644 --- a/fs/lockd/mon.c +++ b/fs/lockd/mon.c | |||
@@ -349,9 +349,9 @@ retry: | |||
349 | * nsm_reboot_lookup - match NLMPROC_SM_NOTIFY arguments to an nsm_handle | 349 | * nsm_reboot_lookup - match NLMPROC_SM_NOTIFY arguments to an nsm_handle |
350 | * @info: pointer to NLMPROC_SM_NOTIFY arguments | 350 | * @info: pointer to NLMPROC_SM_NOTIFY arguments |
351 | * | 351 | * |
352 | * Returns a matching nsm_handle if found in the nsm cache; the returned | 352 | * Returns a matching nsm_handle if found in the nsm cache. The returned |
353 | * nsm_handle's reference count is bumped and sm_monitored is cleared. | 353 | * nsm_handle's reference count is bumped. Otherwise returns NULL if some |
354 | * Otherwise returns NULL if some error occurred. | 354 | * error occurred. |
355 | */ | 355 | */ |
356 | struct nsm_handle *nsm_reboot_lookup(const struct nlm_reboot *info) | 356 | struct nsm_handle *nsm_reboot_lookup(const struct nlm_reboot *info) |
357 | { | 357 | { |
@@ -370,12 +370,6 @@ struct nsm_handle *nsm_reboot_lookup(const struct nlm_reboot *info) | |||
370 | atomic_inc(&cached->sm_count); | 370 | atomic_inc(&cached->sm_count); |
371 | spin_unlock(&nsm_lock); | 371 | spin_unlock(&nsm_lock); |
372 | 372 | ||
373 | /* | ||
374 | * During subsequent lock activity, force a fresh | ||
375 | * notification to be set up for this host. | ||
376 | */ | ||
377 | cached->sm_monitored = 0; | ||
378 | |||
379 | dprintk("lockd: host %s (%s) rebooted, cnt %d\n", | 373 | dprintk("lockd: host %s (%s) rebooted, cnt %d\n", |
380 | cached->sm_name, cached->sm_addrbuf, | 374 | cached->sm_name, cached->sm_addrbuf, |
381 | atomic_read(&cached->sm_count)); | 375 | atomic_read(&cached->sm_count)); |