|
|
21ab4e |
From bd76a5faffd452c16e777acd8a7ecdb3c04fec7a Mon Sep 17 00:00:00 2001
|
|
|
21ab4e |
From: Niels de Vos <ndevos@redhat.com>
|
|
|
21ab4e |
Date: Fri, 13 Jan 2017 13:02:23 +0100
|
|
|
21ab4e |
Subject: [PATCH 443/473] nfs/nlm: remove lock request from the list after
|
|
|
21ab4e |
cancel
|
|
|
21ab4e |
|
|
|
21ab4e |
Once an NLM client cancels a lock request, it should be removed from the
|
|
|
21ab4e |
list. The list can also be cleaned of unneeded entries once the client
|
|
|
21ab4e |
does not have any outstanding lock/share requests/granted.
|
|
|
21ab4e |
|
|
|
21ab4e |
Cherry picked from commit 71cb7f3eb4fb706aab7f83906592942a2ff2e924:
|
|
|
21ab4e |
> Change-Id: I2f2b666b627dcb52cddc6d5b95856e420b2b2e26
|
|
|
21ab4e |
> BUG: 1381970
|
|
|
21ab4e |
> Signed-off-by: Niels de Vos <ndevos@redhat.com>
|
|
|
21ab4e |
> Reviewed-on: https://review.gluster.org/17188
|
|
|
21ab4e |
> Smoke: Gluster Build System <jenkins@build.gluster.org>
|
|
|
21ab4e |
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
|
|
|
21ab4e |
> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
|
|
|
21ab4e |
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
|
|
|
21ab4e |
> Reviewed-by: jiffin tony Thottan <jthottan@redhat.com>
|
|
|
21ab4e |
|
|
|
21ab4e |
Change-Id: I2f2b666b627dcb52cddc6d5b95856e420b2b2e26
|
|
|
21ab4e |
Signed-off-by: Niels de Vos <ndevos@redhat.com>
|
|
|
21ab4e |
Reviewed-on: https://code.engineering.redhat.com/gerrit/106035
|
|
|
21ab4e |
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
|
|
21ab4e |
---
|
|
|
21ab4e |
xlators/nfs/server/src/nlm4.c | 16 +++++++++++-----
|
|
|
21ab4e |
1 file changed, 11 insertions(+), 5 deletions(-)
|
|
|
21ab4e |
|
|
|
21ab4e |
diff --git a/xlators/nfs/server/src/nlm4.c b/xlators/nfs/server/src/nlm4.c
|
|
|
21ab4e |
index cff9a3f..8580448 100644
|
|
|
21ab4e |
--- a/xlators/nfs/server/src/nlm4.c
|
|
|
21ab4e |
+++ b/xlators/nfs/server/src/nlm4.c
|
|
|
21ab4e |
@@ -1213,7 +1213,7 @@ ret:
|
|
|
21ab4e |
}
|
|
|
21ab4e |
|
|
|
21ab4e |
void
|
|
|
21ab4e |
-nlm_search_and_delete (fd_t *fd, char *caller_name)
|
|
|
21ab4e |
+nlm_search_and_delete (fd_t *fd, nlm4_lock *lk)
|
|
|
21ab4e |
{
|
|
|
21ab4e |
nlm_fde_t *fde = NULL;
|
|
|
21ab4e |
nlm_client_t *nlmclnt = NULL;
|
|
|
21ab4e |
@@ -1224,7 +1224,7 @@ nlm_search_and_delete (fd_t *fd, char *caller_name)
|
|
|
21ab4e |
LOCK (&nlm_client_list_lk);
|
|
|
21ab4e |
list_for_each_entry (nlmclnt,
|
|
|
21ab4e |
&nlm_client_list, nlm_clients) {
|
|
|
21ab4e |
- if (!strcmp(caller_name, nlmclnt->caller_name)) {
|
|
|
21ab4e |
+ if (!strcmp (lk->caller_name, nlmclnt->caller_name)) {
|
|
|
21ab4e |
nlmclnt_found = 1;
|
|
|
21ab4e |
break;
|
|
|
21ab4e |
}
|
|
|
21ab4e |
@@ -1247,6 +1247,9 @@ nlm_search_and_delete (fd_t *fd, char *caller_name)
|
|
|
21ab4e |
goto ret;
|
|
|
21ab4e |
list_del (&fde->fde_list);
|
|
|
21ab4e |
|
|
|
21ab4e |
+ if (list_empty (&nlmclnt->fdes) && list_empty (&nlmclnt->shares))
|
|
|
21ab4e |
+ nlm_client_free (nlmclnt);
|
|
|
21ab4e |
+
|
|
|
21ab4e |
ret:
|
|
|
21ab4e |
UNLOCK (&nlm_client_list_lk);
|
|
|
21ab4e |
|
|
|
21ab4e |
@@ -1362,7 +1365,8 @@ nlm4svc_lock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
|
|
|
21ab4e |
|
|
|
21ab4e |
if (op_ret == -1) {
|
|
|
21ab4e |
if (transit_cnt == 0)
|
|
|
21ab4e |
- nlm_search_and_delete (cs->fd, caller_name);
|
|
|
21ab4e |
+ nlm_search_and_delete (cs->fd,
|
|
|
21ab4e |
+ &cs->args.nlm4_lockargs.alock);
|
|
|
21ab4e |
stat = nlm4_errno_to_nlm4stat (op_errno);
|
|
|
21ab4e |
goto err;
|
|
|
21ab4e |
} else {
|
|
|
21ab4e |
@@ -1553,8 +1557,10 @@ nlm4svc_cancel_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
|
|
|
21ab4e |
if (op_ret == -1) {
|
|
|
21ab4e |
stat = nlm4_errno_to_nlm4stat (op_errno);
|
|
|
21ab4e |
goto err;
|
|
|
21ab4e |
- } else
|
|
|
21ab4e |
+ } else {
|
|
|
21ab4e |
stat = nlm4_granted;
|
|
|
21ab4e |
+ nlm_search_and_delete (cs->fd, &cs->args.nlm4_lockargs.alock);
|
|
|
21ab4e |
+ }
|
|
|
21ab4e |
|
|
|
21ab4e |
err:
|
|
|
21ab4e |
nlm4_generic_reply (cs->req, cs->args.nlm4_cancargs.cookie,
|
|
|
21ab4e |
@@ -1707,7 +1713,7 @@ nlm4svc_unlock_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
|
|
|
21ab4e |
stat = nlm4_granted;
|
|
|
21ab4e |
if (flock->l_type == F_UNLCK)
|
|
|
21ab4e |
nlm_search_and_delete (cs->fd,
|
|
|
21ab4e |
- cs->args.nlm4_unlockargs.alock.caller_name);
|
|
|
21ab4e |
+ &cs->args.nlm4_unlockargs.alock);
|
|
|
21ab4e |
}
|
|
|
21ab4e |
|
|
|
21ab4e |
err:
|
|
|
21ab4e |
--
|
|
|
21ab4e |
1.8.3.1
|
|
|
21ab4e |
|