|
@@ -59,7 +59,7 @@ nlmsvc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp,
|
|
|
struct nlm_host *host = NULL;
|
|
|
struct nlm_file *file = NULL;
|
|
|
struct nlm_lock *lock = &argp->lock;
|
|
|
- u32 error;
|
|
|
+ u32 error = 0;
|
|
|
|
|
|
/* nfsd callbacks must have been installed for this procedure */
|
|
|
if (!nlmsvc_ops)
|
|
@@ -88,6 +88,8 @@ nlmsvc_retrieve_args(struct svc_rqst *rqstp, struct nlm_args *argp,
|
|
|
no_locks:
|
|
|
if (host)
|
|
|
nlm_release_host(host);
|
|
|
+ if (error)
|
|
|
+ return error;
|
|
|
return nlm_lck_denied_nolocks;
|
|
|
}
|
|
|
|
|
@@ -122,7 +124,7 @@ nlmsvc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp,
|
|
|
|
|
|
/* Obtain client and file */
|
|
|
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
|
|
- return rpc_success;
|
|
|
+ return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
|
|
|
|
|
/* Now check for conflicting locks */
|
|
|
resp->status = cast_status(nlmsvc_testlock(file, &argp->lock, &resp->lock));
|
|
@@ -153,7 +155,7 @@ nlmsvc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
|
|
|
|
|
|
/* Obtain client and file */
|
|
|
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
|
|
- return rpc_success;
|
|
|
+ return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
|
|
|
|
|
#if 0
|
|
|
/* If supplied state doesn't match current state, we assume it's
|
|
@@ -196,7 +198,7 @@ nlmsvc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp,
|
|
|
|
|
|
/* Obtain client and file */
|
|
|
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
|
|
- return rpc_success;
|
|
|
+ return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
|
|
|
|
|
/* Try to cancel request. */
|
|
|
resp->status = cast_status(nlmsvc_cancel_blocked(file, &argp->lock));
|
|
@@ -229,7 +231,7 @@ nlmsvc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp,
|
|
|
|
|
|
/* Obtain client and file */
|
|
|
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
|
|
- return rpc_success;
|
|
|
+ return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
|
|
|
|
|
/* Now try to remove the lock */
|
|
|
resp->status = cast_status(nlmsvc_unlock(file, &argp->lock));
|
|
@@ -368,7 +370,7 @@ nlmsvc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp,
|
|
|
|
|
|
/* Obtain client and file */
|
|
|
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
|
|
- return rpc_success;
|
|
|
+ return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
|
|
|
|
|
/* Now try to create the share */
|
|
|
resp->status = cast_status(nlmsvc_share_file(host, file, argp));
|
|
@@ -401,7 +403,7 @@ nlmsvc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp,
|
|
|
|
|
|
/* Obtain client and file */
|
|
|
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
|
|
- return rpc_success;
|
|
|
+ return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
|
|
|
|
|
/* Now try to unshare the file */
|
|
|
resp->status = cast_status(nlmsvc_unshare_file(host, file, argp));
|