14f8ab
From 5b549cbf3f1873054c6d187b09aa9f9313971b1f Mon Sep 17 00:00:00 2001
14f8ab
From: Kinglong Mee <kinglongmee@gmail.com>
14f8ab
Date: Mon, 18 Mar 2019 20:47:54 +0800
14f8ab
Subject: [PATCH 414/449] cluster-syncop: avoid duplicate unlock of
14f8ab
 inodelk/entrylk
14f8ab
14f8ab
When using ec, there are many spam messages in brick and client
14f8ab
logs files.
14f8ab
14f8ab
When shd does entry heal, it takes lock on a directory using
14f8ab
cluster_tiebreaker_inodelk(). If it does not get lock on all
14f8ab
the bricks because other clients has got lock on some bricks,
14f8ab
it will unlock the locks on those bricks which it got and then
14f8ab
will try blocking locks (If any one of the previous was successful).
14f8ab
14f8ab
The problem come here. In case we do not get locks on all the
14f8ab
required bricks, we are sending unlock request twice on those
14f8ab
bricks where we got the locks.
14f8ab
14f8ab
BUG: 1750211
14f8ab
> Upstream patch: https://review.gluster.org/#/c/glusterfs/+/22377/
14f8ab
> Change-Id: Ib164d29ebb071f620a4ca9679c4345ef7c88512a
14f8ab
> Updates: bz#1689920
14f8ab
> Signed-off-by: Kinglong Mee <mijinlong@open-fs.com>
14f8ab
14f8ab
Change-Id: I1647548ba75fdd27fd4e20dec08db67774f43375
14f8ab
Reviewed-on: https://code.engineering.redhat.com/gerrit/202477
14f8ab
Tested-by: Ashish Pandey <aspandey@redhat.com>
14f8ab
Tested-by: RHGS Build Bot <nigelb@redhat.com>
14f8ab
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
14f8ab
---
14f8ab
 libglusterfs/src/cluster-syncop.c | 6 ++++++
14f8ab
 1 file changed, 6 insertions(+)
14f8ab
14f8ab
diff --git a/libglusterfs/src/cluster-syncop.c b/libglusterfs/src/cluster-syncop.c
14f8ab
index 5a08f26..6ee89dd 100644
14f8ab
--- a/libglusterfs/src/cluster-syncop.c
14f8ab
+++ b/libglusterfs/src/cluster-syncop.c
14f8ab
@@ -1203,6 +1203,10 @@ cluster_tiebreaker_inodelk(xlator_t **subvols, unsigned char *on,
14f8ab
             if (num_success) {
14f8ab
                 FOP_SEQ(subvols, on, numsubvols, replies, locked_on, frame,
14f8ab
                         inodelk, dom, &loc, F_SETLKW, &flock, NULL);
14f8ab
+            } else {
14f8ab
+                loc_wipe(&loc;;
14f8ab
+                memset(locked_on, 0, numsubvols);
14f8ab
+                return 0;
14f8ab
             }
14f8ab
             break;
14f8ab
         }
14f8ab
@@ -1244,7 +1248,9 @@ cluster_tiebreaker_entrylk(xlator_t **subvols, unsigned char *on,
14f8ab
                         entrylk, dom, &loc, name, ENTRYLK_LOCK, ENTRYLK_WRLCK,
14f8ab
                         NULL);
14f8ab
             } else {
14f8ab
+                loc_wipe(&loc;;
14f8ab
                 memset(locked_on, 0, numsubvols);
14f8ab
+                return 0;
14f8ab
             }
14f8ab
             break;
14f8ab
         }
14f8ab
-- 
14f8ab
1.8.3.1
14f8ab