From: NeilBrown On lockd callbacks, we're a client, and the source address is that of a server, so we shouldn't be trying to match the source address of the callback request against our export table. Signed-off-by: J. Bruce Fields Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- 25-akpm/fs/lockd/svc.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+) diff -puN fs/lockd/svc.c~nfsd--lockd-dont-try-to-match-callback-requests-against-export-table fs/lockd/svc.c --- 25/fs/lockd/svc.c~nfsd--lockd-dont-try-to-match-callback-requests-against-export-table 2005-02-07 19:19:10.000000000 -0800 +++ 25-akpm/fs/lockd/svc.c 2005-02-07 19:19:10.000000000 -0800 @@ -403,6 +403,18 @@ static int param_set_##name(const char * return 0; \ } +static inline int is_callback(u32 proc) +{ + return proc == NLMPROC_GRANTED + || proc == NLMPROC_GRANTED_MSG + || proc == NLMPROC_TEST_RES + || proc == NLMPROC_LOCK_RES + || proc == NLMPROC_CANCEL_RES + || proc == NLMPROC_UNLOCK_RES + || proc == NLMPROC_NSM_NOTIFY; +} + + static int lockd_authenticate(struct svc_rqst *rqstp) { rqstp->rq_client = NULL; @@ -411,6 +423,12 @@ static int lockd_authenticate(struct svc case RPC_AUTH_UNIX: if (rqstp->rq_proc == 0) return SVC_OK; + if (is_callback(rqstp->rq_proc)) { + /* Leave it to individual procedures to + * call nlmsvc_lookup_host(rqstp) + */ + return SVC_OK; + } return svc_set_client(rqstp); } return SVC_DENIED; _