--- sys/nlm/nlm_prot_impl.c.orig 2011-08-24 00:08:13.000000000 -0500 +++ sys/nlm/nlm_prot_impl.c 2011-08-24 09:06:22.000000000 -0500 @@ -109,11 +109,15 @@ static int nlm_debug_level; SYSCTL_INT(_debug, OID_AUTO, nlm_debug, CTLFLAG_RW, &nlm_debug_level, 0, ""); -#define NLM_DEBUG(_level, args...) \ +#define xLM_DEBUG(_level, args...) \ do { \ if (nlm_debug_level >= (_level)) \ log(LOG_DEBUG, args); \ } while(0) +#define NLM_DEBUG(_level, args...) \ + do { \ + log(LOG_DEBUG, args); \ + } while(0) #define NLM_ERR(args...) \ do { \ log(LOG_ERR, args); \ @@ -986,7 +990,9 @@ } if (!host) { + NLM_DEBUG(3, "NLM: nlm_find_host_by_name() calling nlm_create_host(%s)\n",name); host = nlm_create_host(name); + NLM_DEBUG(3, "NLM: nlm_find_host_by_name() calling nlm_create_host(%s) returns %s\n",name,host?"Ok":"NULL"); if (!host) { mtx_unlock(&nlm_global_lock); return (NULL); @@ -1807,6 +1813,7 @@ goto out; } if (cred->cr_uid == 0 || (exflags & MNT_EXPORTANON)) { + NLM_DEBUG(3, "nlm_get_vfs_state(): cred->cr_uid=%d (exflags & MNT_EXPORTANON)=%d\n",cred->cr_uid,(int)(exflags & MNT_EXPORTANON)); crfree(cred); cred = credanon; credanon = NULL; @@ -1815,9 +1822,13 @@ /* * Check cred. */ + NLM_DEBUG(3, "nlm_get_vfs_state(): Calling VOP_ACCESS(VWRITE) with cred->cr_uid=%d\n",cred->cr_uid); error = VOP_ACCESS(vs->vs_vp, VWRITE, cred, curthread); - if (error) + if (error) { + NLM_DEBUG(3, "nlm_get_vfs_state(): caller_name = %s VOP_ACCESS() returns %d\n", + host->nh_caller_name, error); goto out; + } #if __FreeBSD_version < 800011 VOP_UNLOCK(vs->vs_vp, 0, curthread); @@ -1875,6 +1886,9 @@ memset(result, 0, sizeof(*result)); memset(&vs, 0, sizeof(vs)); + NLM_DEBUG(3, "nlm_do_test(): caller_name = %s entered\n", + argp->alock.caller_name); + host = nlm_find_host_by_name(argp->alock.caller_name, svc_getrpccaller(rqstp), rqstp->rq_vers); if (!host) { @@ -1971,6 +1985,9 @@ memset(result, 0, sizeof(*result)); memset(&vs, 0, sizeof(vs)); + NLM_DEBUG(3, "nlm_do_lock(): caller_name = %s entered\n", + argp->alock.caller_name); + host = nlm_find_host_by_name(argp->alock.caller_name, svc_getrpccaller(rqstp), rqstp->rq_vers); if (!host) { @@ -1998,12 +2015,14 @@ if (time_uptime < nlm_grace_threshold && !argp->reclaim) { result->stat.stat = nlm4_denied_grace_period; + NLM_DEBUG(3, "nlm_do_lock(): (time_uptime < nlm_grace_threshold && !argp->reclaim) is TRUE\n"); goto out; } error = nlm_get_vfs_state(host, rqstp, &fh, &vs); if (error) { result->stat.stat = nlm_convert_error(error); + NLM_DEBUG(3, "nlm_do_lock(): nlm_get_vfs_state() returns %d\n",error); goto out; } @@ -2027,6 +2046,8 @@ client = nlm_host_get_rpc(host, TRUE); if (!client) { result->stat.stat = nlm4_failed; + NLM_DEBUG(3, "nlm_do_lock(): caller_name = %s : cannot contact hosts NLM\n", + host->nh_caller_name); goto out; } @@ -2053,6 +2074,7 @@ if (af) { CLNT_RELEASE(client); result->stat.stat = nlm4_blocked; + NLM_DEBUG(3, "nlm_do_lock(): af != NULL : Found exiting blocked lock that matches\n"); goto out; } @@ -2094,6 +2116,7 @@ error = VOP_ADVLOCKASYNC(vs.vs_vp, NULL, F_SETLK, &fl, F_REMOTE, &af->af_task, &af->af_cookie); + NLM_DEBUG(3, "nlm_do_lock(): VOP_ADVLOCKASYNC() returns %d\n",error); /* * If the lock completed synchronously, just free the @@ -2119,6 +2142,7 @@ } } else { error = VOP_ADVLOCK(vs.vs_vp, NULL, F_SETLK, &fl, F_REMOTE); + NLM_DEBUG(3, "nlm_do_lock(): VOP_ADVLOCK() returns %d\n",error); } if (error) { @@ -2138,6 +2162,24 @@ } out: + { + char *s; + switch (result->stat.stat) { + case nlm4_granted : s = "granted"; break; + case nlm4_denied : s = "denied" ; break; + case nlm4_denied_nolocks : s = "denied_nolocks" ; break; + case nlm4_blocked : s = "blocked"; break; + case nlm4_denied_grace_period : s = "denied_grace_period"; break; + case nlm4_deadlck : s = "deadlck"; break; + case nlm4_rofs : s = "rofs"; break; + case nlm4_stale_fh : s = "stale_fs"; break; + case nlm4_fbig : s = "fbig" ; break; + case nlm4_failed : s = "failed" ; break; + default : s = "unknown" ; break; + } + NLM_DEBUG(3, "nlm_do_lock(): out : stat = %d : %s\n",result->stat.stat,s); + } + nlm_release_vfs_state(&vs); if (rpcp) *rpcp = nlm_host_get_rpc(host, TRUE); @@ -2159,6 +2201,9 @@ memset(result, 0, sizeof(*result)); memset(&vs, 0, sizeof(vs)); + NLM_DEBUG(3, "nlm_do_cancel(): caller_name = %s entered\n", + argp->alock.caller_name); + host = nlm_find_host_by_name(argp->alock.caller_name, svc_getrpccaller(rqstp), rqstp->rq_vers); if (!host) { @@ -2248,6 +2293,9 @@ memset(result, 0, sizeof(*result)); memset(&vs, 0, sizeof(vs)); + NLM_DEBUG(3, "nlm_do_unlock(): caller_name = %s entered\n", + argp->alock.caller_name); + host = nlm_find_host_by_name(argp->alock.caller_name, svc_getrpccaller(rqstp), rqstp->rq_vers); if (!host) { @@ -2307,12 +2355,17 @@ memset(result, 0, sizeof(*result)); + NLM_DEBUG(3, "nlm_do_granted(): caller_name = unknown\n"); + host = nlm_find_host_by_addr(svc_getrpccaller(rqstp), rqstp->rq_vers); if (!host) { result->stat.stat = nlm4_denied_nolocks; return (ENOMEM); } + NLM_DEBUG(3, "nlm_do_granted(): caller_name = %s (sysid = %d)\n", + host->nh_caller_name, host->nh_sysid); + nlm_copy_netobj(&result->cookie, &argp->cookie, M_RPC); result->stat.stat = nlm4_denied; KFAIL_POINT_CODE(DEBUG_FP, nlm_deny_grant, goto out);