nfs/nlm: remove lock request from the list after cancel
Once an NLM client cancels a lock request, it should be removed from the list. The list can also be cleaned of unneeded entries once the client does not have any outstanding lock/share requests/granted. Change-Id: I2f2b666b627dcb52cddc6d5b95856e420b2b2e26 BUG: 1381970 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: https://review.gluster.org/17188 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>
This commit is contained in:
parent
6897ba5c51
commit
71cb7f3eb4
@ -1209,7 +1209,7 @@ ret:
|
||||
}
|
||||
|
||||
void
|
||||
nlm_search_and_delete (fd_t *fd, char *caller_name)
|
||||
nlm_search_and_delete (fd_t *fd, nlm4_lock *lk)
|
||||
{
|
||||
nlm_fde_t *fde = NULL;
|
||||
nlm_client_t *nlmclnt = NULL;
|
||||
@ -1220,7 +1220,7 @@ nlm_search_and_delete (fd_t *fd, char *caller_name)
|
||||
LOCK (&nlm_client_list_lk);
|
||||
list_for_each_entry (nlmclnt,
|
||||
&nlm_client_list, nlm_clients) {
|
||||
if (!strcmp(caller_name, nlmclnt->caller_name)) {
|
||||
if (!strcmp (lk->caller_name, nlmclnt->caller_name)) {
|
||||
nlmclnt_found = 1;
|
||||
break;
|
||||
}
|
||||
@ -1243,6 +1243,9 @@ nlm_search_and_delete (fd_t *fd, char *caller_name)
|
||||
goto ret;
|
||||
list_del (&fde->fde_list);
|
||||
|
||||
if (list_empty (&nlmclnt->fdes) && list_empty (&nlmclnt->shares))
|
||||
nlm_client_free (nlmclnt);
|
||||
|
||||
ret:
|
||||
UNLOCK (&nlm_client_list_lk);
|
||||
|
||||
@ -1358,7 +1361,8 @@ nlm4svc_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
|
||||
|
||||
if (op_ret == -1) {
|
||||
if (transit_cnt == 0)
|
||||
nlm_search_and_delete (cs->fd, caller_name);
|
||||
nlm_search_and_delete (cs->fd,
|
||||
&cs->args.nlm4_lockargs.alock);
|
||||
stat = nlm4_errno_to_nlm4stat (op_errno);
|
||||
goto err;
|
||||
} else {
|
||||
@ -1549,8 +1553,10 @@ nlm4svc_cancel_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
|
||||
if (op_ret == -1) {
|
||||
stat = nlm4_errno_to_nlm4stat (op_errno);
|
||||
goto err;
|
||||
} else
|
||||
} else {
|
||||
stat = nlm4_granted;
|
||||
nlm_search_and_delete (cs->fd, &cs->args.nlm4_lockargs.alock);
|
||||
}
|
||||
|
||||
err:
|
||||
nlm4_generic_reply (cs->req, cs->args.nlm4_cancargs.cookie,
|
||||
@ -1703,7 +1709,7 @@ nlm4svc_unlock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
|
||||
stat = nlm4_granted;
|
||||
if (flock->l_type == F_UNLCK)
|
||||
nlm_search_and_delete (cs->fd,
|
||||
cs->args.nlm4_unlockargs.alock.caller_name);
|
||||
&cs->args.nlm4_unlockargs.alock);
|
||||
}
|
||||
|
||||
err:
|
||||
|
Loading…
Reference in New Issue
Block a user