mirror of https://gitee.com/openkylin/linux.git
lockd: move grace period checks to common code
Do all the grace period checks in svclock.c. This simplifies the code a bit, and will ease some later changes. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
parent
af558e33be
commit
b2b5028905
|
@ -88,12 +88,6 @@ nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp,
|
||||||
dprintk("lockd: TEST4 called\n");
|
dprintk("lockd: TEST4 called\n");
|
||||||
resp->cookie = argp->cookie;
|
resp->cookie = argp->cookie;
|
||||||
|
|
||||||
/* Don't accept test requests during grace period */
|
|
||||||
if (locks_in_grace()) {
|
|
||||||
resp->status = nlm_lck_denied_grace_period;
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Obtain client and file */
|
/* Obtain client and file */
|
||||||
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
|
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
|
||||||
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
||||||
|
@ -122,12 +116,6 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
|
||||||
|
|
||||||
resp->cookie = argp->cookie;
|
resp->cookie = argp->cookie;
|
||||||
|
|
||||||
/* Don't accept new lock requests during grace period */
|
|
||||||
if (locks_in_grace() && !argp->reclaim) {
|
|
||||||
resp->status = nlm_lck_denied_grace_period;
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Obtain client and file */
|
/* Obtain client and file */
|
||||||
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
|
if ((resp->status = nlm4svc_retrieve_args(rqstp, argp, &host, &file)))
|
||||||
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
||||||
|
@ -146,7 +134,8 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
|
||||||
|
|
||||||
/* Now try to lock the file */
|
/* Now try to lock the file */
|
||||||
resp->status = nlmsvc_lock(rqstp, file, host, &argp->lock,
|
resp->status = nlmsvc_lock(rqstp, file, host, &argp->lock,
|
||||||
argp->block, &argp->cookie);
|
argp->block, &argp->cookie,
|
||||||
|
argp->reclaim);
|
||||||
if (resp->status == nlm_drop_reply)
|
if (resp->status == nlm_drop_reply)
|
||||||
rc = rpc_drop_reply;
|
rc = rpc_drop_reply;
|
||||||
else
|
else
|
||||||
|
|
|
@ -360,7 +360,7 @@ nlmsvc_defer_lock_rqst(struct svc_rqst *rqstp, struct nlm_block *block)
|
||||||
__be32
|
__be32
|
||||||
nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file,
|
nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file,
|
||||||
struct nlm_host *host, struct nlm_lock *lock, int wait,
|
struct nlm_host *host, struct nlm_lock *lock, int wait,
|
||||||
struct nlm_cookie *cookie)
|
struct nlm_cookie *cookie, int reclaim)
|
||||||
{
|
{
|
||||||
struct nlm_block *block = NULL;
|
struct nlm_block *block = NULL;
|
||||||
int error;
|
int error;
|
||||||
|
@ -406,6 +406,11 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (locks_in_grace() && !reclaim) {
|
||||||
|
ret = nlm_lck_denied_grace_period;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (!wait)
|
if (!wait)
|
||||||
lock->fl.fl_flags &= ~FL_SLEEP;
|
lock->fl.fl_flags &= ~FL_SLEEP;
|
||||||
error = vfs_lock_file(file->f_file, F_SETLK, &lock->fl, NULL);
|
error = vfs_lock_file(file->f_file, F_SETLK, &lock->fl, NULL);
|
||||||
|
@ -502,6 +507,10 @@ nlmsvc_testlock(struct svc_rqst *rqstp, struct nlm_file *file,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (locks_in_grace()) {
|
||||||
|
ret = nlm_lck_denied_grace_period;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
error = vfs_test_lock(file->f_file, &lock->fl);
|
error = vfs_test_lock(file->f_file, &lock->fl);
|
||||||
if (error == FILE_LOCK_DEFERRED) {
|
if (error == FILE_LOCK_DEFERRED) {
|
||||||
ret = nlmsvc_defer_lock_rqst(rqstp, block);
|
ret = nlmsvc_defer_lock_rqst(rqstp, block);
|
||||||
|
@ -582,6 +591,9 @@ nlmsvc_cancel_blocked(struct nlm_file *file, struct nlm_lock *lock)
|
||||||
(long long)lock->fl.fl_start,
|
(long long)lock->fl.fl_start,
|
||||||
(long long)lock->fl.fl_end);
|
(long long)lock->fl.fl_end);
|
||||||
|
|
||||||
|
if (locks_in_grace())
|
||||||
|
return nlm_lck_denied_grace_period;
|
||||||
|
|
||||||
mutex_lock(&file->f_mutex);
|
mutex_lock(&file->f_mutex);
|
||||||
block = nlmsvc_lookup_block(file, lock);
|
block = nlmsvc_lookup_block(file, lock);
|
||||||
mutex_unlock(&file->f_mutex);
|
mutex_unlock(&file->f_mutex);
|
||||||
|
|
|
@ -117,12 +117,6 @@ nlmsvc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp,
|
||||||
dprintk("lockd: TEST called\n");
|
dprintk("lockd: TEST called\n");
|
||||||
resp->cookie = argp->cookie;
|
resp->cookie = argp->cookie;
|
||||||
|
|
||||||
/* Don't accept test requests during grace period */
|
|
||||||
if (locks_in_grace()) {
|
|
||||||
resp->status = nlm_lck_denied_grace_period;
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Obtain client and file */
|
/* Obtain client and file */
|
||||||
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
||||||
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
||||||
|
@ -152,12 +146,6 @@ nlmsvc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
|
||||||
|
|
||||||
resp->cookie = argp->cookie;
|
resp->cookie = argp->cookie;
|
||||||
|
|
||||||
/* Don't accept new lock requests during grace period */
|
|
||||||
if (locks_in_grace() && !argp->reclaim) {
|
|
||||||
resp->status = nlm_lck_denied_grace_period;
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Obtain client and file */
|
/* Obtain client and file */
|
||||||
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
if ((resp->status = nlmsvc_retrieve_args(rqstp, argp, &host, &file)))
|
||||||
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
return resp->status == nlm_drop_reply ? rpc_drop_reply :rpc_success;
|
||||||
|
@ -176,7 +164,8 @@ nlmsvc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp,
|
||||||
|
|
||||||
/* Now try to lock the file */
|
/* Now try to lock the file */
|
||||||
resp->status = cast_status(nlmsvc_lock(rqstp, file, host, &argp->lock,
|
resp->status = cast_status(nlmsvc_lock(rqstp, file, host, &argp->lock,
|
||||||
argp->block, &argp->cookie));
|
argp->block, &argp->cookie,
|
||||||
|
argp->reclaim));
|
||||||
if (resp->status == nlm_drop_reply)
|
if (resp->status == nlm_drop_reply)
|
||||||
rc = rpc_drop_reply;
|
rc = rpc_drop_reply;
|
||||||
else
|
else
|
||||||
|
|
|
@ -242,7 +242,7 @@ typedef int (*nlm_host_match_fn_t)(void *cur, struct nlm_host *ref);
|
||||||
*/
|
*/
|
||||||
__be32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *,
|
__be32 nlmsvc_lock(struct svc_rqst *, struct nlm_file *,
|
||||||
struct nlm_host *, struct nlm_lock *, int,
|
struct nlm_host *, struct nlm_lock *, int,
|
||||||
struct nlm_cookie *);
|
struct nlm_cookie *, int);
|
||||||
__be32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *);
|
__be32 nlmsvc_unlock(struct nlm_file *, struct nlm_lock *);
|
||||||
__be32 nlmsvc_testlock(struct svc_rqst *, struct nlm_file *,
|
__be32 nlmsvc_testlock(struct svc_rqst *, struct nlm_file *,
|
||||||
struct nlm_host *, struct nlm_lock *,
|
struct nlm_host *, struct nlm_lock *,
|
||||||
|
|
Loading…
Reference in New Issue