Introduce some dprintk() calls in fs/lockd/mon.c that are enabled by the NLMDBG_MONITOR flag. These report when we find, create, and release nsm_handles. Since printk() can sleep, these are placed outside the nsm_lock spinlock. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> --- fs/lockd/mon.c | 21 ++++++++++++++------- 1 files changed, 14 insertions(+), 7 deletions(-) diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c index d5bd847..8628d31 100644 --- a/fs/lockd/mon.c +++ b/fs/lockd/mon.c @@ -248,14 +248,22 @@ retry: } else if (!nlm_cmp_addr(nsm_addr(pos), sap)) continue; atomic_inc(&pos->sm_count); + spin_unlock(&nsm_lock); kfree(nsm); - nsm = pos; - goto found; + dprintk("lockd: found nsm_handle for %s (%s), cnt %d\n", + pos->sm_name, pos->sm_addrbuf, + atomic_read(&pos->sm_count)); + return pos; } + if (nsm) { list_add(&nsm->sm_link, &nsm_handles); - goto found; + spin_unlock(&nsm_lock); + dprintk("lockd: created nsm_handle for %s (%s)\n", + nsm->sm_name, nsm->sm_addrbuf); + return nsm; } + spin_unlock(&nsm_lock); if (!create) @@ -274,10 +282,6 @@ retry: nsm->sm_addrbuf, sizeof(nsm->sm_addrbuf)); atomic_set(&nsm->sm_count, 1); goto retry; - -found: - spin_unlock(&nsm_lock); - return nsm; } /** @@ -292,6 +296,9 @@ void nsm_release(struct nsm_handle *nsm) if (atomic_dec_and_lock(&nsm->sm_count, &nsm_lock)) { list_del(&nsm->sm_link); spin_unlock(&nsm_lock); + + dprintk("lockd: destroyed nsm_handle for %s (%s)\n", + nsm->sm_name, nsm->sm_addrbuf); kfree(nsm); } } -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html