autobuild v6.0-40
Resolves: bz#1812789 bz#1844359 bz#1847081 bz#1854165 Signed-off-by: Deepshikha Khandelwal <dkhandel@redhat.com>
This commit is contained in:
parent
dad3ae4082
commit
71080da8dd
48
0452-Tier-DHT-Handle-the-pause-case-missed-out.patch
Normal file
48
0452-Tier-DHT-Handle-the-pause-case-missed-out.patch
Normal file
@ -0,0 +1,48 @@
|
||||
From c184943bdf38de5b4cbf165fd1cd98ce7bd9e976 Mon Sep 17 00:00:00 2001
|
||||
From: hari gowtham <hgowtham@redhat.com>
|
||||
Date: Tue, 16 Jun 2020 14:47:53 +0530
|
||||
Subject: [PATCH 452/456] Tier/DHT: Handle the pause case missed out
|
||||
|
||||
Problem: While backporting a change from master
|
||||
the changes related to tier were removed. This started affecting
|
||||
the tier pause functionality. Backporting it
|
||||
to downstream left this usecase messed up as we still support tier.
|
||||
patch that caused this: https://code.engineering.redhat.com/gerrit/#/c/202647/2
|
||||
|
||||
Fix: add the condition back for tier pause to work.
|
||||
|
||||
Label: DOWNSTREAM ONLY
|
||||
|
||||
BUG: 1844359
|
||||
Change-Id: I46c6c179b09c7e1a729be9fd257fa4a490f0287e
|
||||
Signed-off-by: hari gowtham <hgowtham@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/203560
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
xlators/cluster/dht/src/dht-rebalance.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
|
||||
index e9974cd..abc10fc 100644
|
||||
--- a/xlators/cluster/dht/src/dht-rebalance.c
|
||||
+++ b/xlators/cluster/dht/src/dht-rebalance.c
|
||||
@@ -1160,6 +1160,15 @@ __dht_rebalance_migrate_data(xlator_t *this, gf_defrag_info_t *defrag,
|
||||
break;
|
||||
}
|
||||
|
||||
+ if ((defrag && defrag->cmd == GF_DEFRAG_CMD_START_TIER) &&
|
||||
+ (gf_defrag_get_pause_state(&defrag->tier_conf) != TIER_RUNNING)) {
|
||||
+ gf_msg("tier", GF_LOG_INFO, 0, DHT_MSG_TIER_PAUSED,
|
||||
+ "Migrate file paused");
|
||||
+ ret = -1;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+
|
||||
offset += ret;
|
||||
total += ret;
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
300
0453-glusterd-add-brick-command-failure.patch
Normal file
300
0453-glusterd-add-brick-command-failure.patch
Normal file
@ -0,0 +1,300 @@
|
||||
From a04592cce9aaa6ccb8a038bc3b4e31bc125d1d10 Mon Sep 17 00:00:00 2001
|
||||
From: Sanju Rakonde <srakonde@redhat.com>
|
||||
Date: Tue, 16 Jun 2020 18:03:21 +0530
|
||||
Subject: [PATCH 453/456] glusterd: add-brick command failure
|
||||
|
||||
Problem: add-brick operation is failing when replica or disperse
|
||||
count is not mentioned in the add-brick command.
|
||||
|
||||
Reason: with commit a113d93 we are checking brick order while
|
||||
doing add-brick operation for replica and disperse volumes. If
|
||||
replica count or disperse count is not mentioned in the command,
|
||||
the dict get is failing and resulting add-brick operation failure.
|
||||
|
||||
> upstream patch: https://review.gluster.org/#/c/glusterfs/+/24581/
|
||||
> fixes: #1306
|
||||
> Change-Id: Ie957540e303bfb5f2d69015661a60d7e72557353
|
||||
> Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
|
||||
|
||||
BUG: 1847081
|
||||
Change-Id: Ie957540e303bfb5f2d69015661a60d7e72557353
|
||||
Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/203867
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
tests/bugs/glusterd/brick-order-check-add-brick.t | 40 ++++++++++++++++++++++
|
||||
tests/cluster.rc | 11 ++++--
|
||||
xlators/mgmt/glusterd/src/glusterd-brick-ops.c | 39 ++++++++++++++-------
|
||||
xlators/mgmt/glusterd/src/glusterd-utils.c | 30 ++---------------
|
||||
xlators/mgmt/glusterd/src/glusterd-utils.h | 3 +-
|
||||
xlators/mgmt/glusterd/src/glusterd-volume-ops.c | 41 +++++++++++++++++++----
|
||||
6 files changed, 115 insertions(+), 49 deletions(-)
|
||||
create mode 100644 tests/bugs/glusterd/brick-order-check-add-brick.t
|
||||
|
||||
diff --git a/tests/bugs/glusterd/brick-order-check-add-brick.t b/tests/bugs/glusterd/brick-order-check-add-brick.t
|
||||
new file mode 100644
|
||||
index 0000000..29f0ed1
|
||||
--- /dev/null
|
||||
+++ b/tests/bugs/glusterd/brick-order-check-add-brick.t
|
||||
@@ -0,0 +1,40 @@
|
||||
+#!/bin/bash
|
||||
+. $(dirname $0)/../../include.rc
|
||||
+. $(dirname $0)/../../volume.rc
|
||||
+. $(dirname $0)/../../cluster.rc
|
||||
+. $(dirname $0)/../../snapshot.rc
|
||||
+
|
||||
+cleanup;
|
||||
+
|
||||
+TEST verify_lvm_version;
|
||||
+#Create cluster with 3 nodes
|
||||
+TEST launch_cluster 3 -NO_DEBUG -NO_FORCE
|
||||
+TEST setup_lvm 3
|
||||
+
|
||||
+TEST $CLI_1 peer probe $H2
|
||||
+TEST $CLI_1 peer probe $H3
|
||||
+EXPECT_WITHIN $PROBE_TIMEOUT 2 peer_count
|
||||
+
|
||||
+TEST $CLI_1 volume create $V0 replica 3 $H1:$L1/$V0 $H2:$L2/$V0 $H3:$L3/$V0
|
||||
+EXPECT '1 x 3 = 3' volinfo_field $V0 'Number of Bricks'
|
||||
+EXPECT 'Created' volinfo_field $V0 'Status'
|
||||
+
|
||||
+TEST $CLI_1 volume start $V0
|
||||
+EXPECT 'Started' volinfo_field $V0 'Status'
|
||||
+
|
||||
+#add-brick with or without mentioning the replica count should not fail
|
||||
+TEST $CLI_1 volume add-brick $V0 replica 3 $H1:$L1/${V0}_1 $H2:$L2/${V0}_1 $H3:$L3/${V0}_1
|
||||
+EXPECT '2 x 3 = 6' volinfo_field $V0 'Number of Bricks'
|
||||
+
|
||||
+TEST $CLI_1 volume add-brick $V0 $H1:$L1/${V0}_2 $H2:$L2/${V0}_2 $H3:$L3/${V0}_2
|
||||
+EXPECT '3 x 3 = 9' volinfo_field $V0 'Number of Bricks'
|
||||
+
|
||||
+#adding bricks from same host should fail the brick order check
|
||||
+TEST ! $CLI_1 volume add-brick $V0 $H1:$L1/${V0}_3 $H1:$L1/${V0}_4 $H1:$L1/${V0}_5
|
||||
+EXPECT '3 x 3 = 9' volinfo_field $V0 'Number of Bricks'
|
||||
+
|
||||
+#adding bricks from same host with force should succeed
|
||||
+TEST $CLI_1 volume add-brick $V0 $H1:$L1/${V0}_3 $H1:$L1/${V0}_4 $H1:$L1/${V0}_5 force
|
||||
+EXPECT '4 x 3 = 12' volinfo_field $V0 'Number of Bricks'
|
||||
+
|
||||
+cleanup
|
||||
diff --git a/tests/cluster.rc b/tests/cluster.rc
|
||||
index 99be8e7..8b73153 100644
|
||||
--- a/tests/cluster.rc
|
||||
+++ b/tests/cluster.rc
|
||||
@@ -11,7 +11,7 @@ function launch_cluster() {
|
||||
define_backends $count;
|
||||
define_hosts $count;
|
||||
define_glusterds $count $2;
|
||||
- define_clis $count;
|
||||
+ define_clis $count $3;
|
||||
|
||||
start_glusterds;
|
||||
}
|
||||
@@ -133,8 +133,13 @@ function define_clis() {
|
||||
lopt1="--log-file=$logdir/$logfile1"
|
||||
|
||||
|
||||
- eval "CLI_$i='$CLI --glusterd-sock=${!b}/glusterd/gd.sock $lopt'";
|
||||
- eval "CLI$i='$CLI --glusterd-sock=${!b}/glusterd/gd.sock $lopt1'";
|
||||
+ if [ "$2" == "-NO_FORCE" ]; then
|
||||
+ eval "CLI_$i='$CLI_NO_FORCE --glusterd-sock=${!b}/glusterd/gd.sock $lopt'";
|
||||
+ eval "CLI$i='$CLI_NO_FORCE --glusterd-sock=${!b}/glusterd/gd.sock $lopt1'";
|
||||
+ else
|
||||
+ eval "CLI_$i='$CLI --glusterd-sock=${!b}/glusterd/gd.sock $lopt'";
|
||||
+ eval "CLI$i='$CLI --glusterd-sock=${!b}/glusterd/gd.sock $lopt1'";
|
||||
+ fi
|
||||
done
|
||||
}
|
||||
|
||||
diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
|
||||
index 121346c..5ae577a 100644
|
||||
--- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
|
||||
+++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
|
||||
@@ -1576,20 +1576,35 @@ glusterd_op_stage_add_brick(dict_t *dict, char **op_errstr, dict_t *rsp_dict)
|
||||
|
||||
/* Check brick order if the volume type is replicate or disperse. If
|
||||
* force at the end of command not given then check brick order.
|
||||
+ * doing this check at the originator node is sufficient.
|
||||
*/
|
||||
|
||||
- if (!is_force) {
|
||||
- if ((volinfo->type == GF_CLUSTER_TYPE_REPLICATE) ||
|
||||
- (volinfo->type == GF_CLUSTER_TYPE_DISPERSE)) {
|
||||
- ret = glusterd_check_brick_order(dict, msg, volinfo->type);
|
||||
- if (ret) {
|
||||
- gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_BAD_BRKORDER,
|
||||
- "Not adding brick because of "
|
||||
- "bad brick order. %s",
|
||||
- msg);
|
||||
- *op_errstr = gf_strdup(msg);
|
||||
- goto out;
|
||||
- }
|
||||
+ if (is_origin_glusterd(dict) && !is_force) {
|
||||
+ ret = 0;
|
||||
+ if (volinfo->type == GF_CLUSTER_TYPE_REPLICATE) {
|
||||
+ gf_msg_debug(this->name, 0,
|
||||
+ "Replicate cluster type "
|
||||
+ "found. Checking brick order.");
|
||||
+ if (replica_count)
|
||||
+ ret = glusterd_check_brick_order(dict, msg, volinfo->type,
|
||||
+ replica_count);
|
||||
+ else
|
||||
+ ret = glusterd_check_brick_order(dict, msg, volinfo->type,
|
||||
+ volinfo->replica_count);
|
||||
+ } else if (volinfo->type == GF_CLUSTER_TYPE_DISPERSE) {
|
||||
+ gf_msg_debug(this->name, 0,
|
||||
+ "Disperse cluster type"
|
||||
+ " found. Checking brick order.");
|
||||
+ ret = glusterd_check_brick_order(dict, msg, volinfo->type,
|
||||
+ volinfo->disperse_count);
|
||||
+ }
|
||||
+ if (ret) {
|
||||
+ gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_BAD_BRKORDER,
|
||||
+ "Not adding brick because of "
|
||||
+ "bad brick order. %s",
|
||||
+ msg);
|
||||
+ *op_errstr = gf_strdup(msg);
|
||||
+ goto out;
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||
index 6f904ae..545e688 100644
|
||||
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||
@@ -14802,7 +14802,8 @@ glusterd_compare_addrinfo(struct addrinfo *first, struct addrinfo *next)
|
||||
* volume are present on the same server
|
||||
*/
|
||||
int32_t
|
||||
-glusterd_check_brick_order(dict_t *dict, char *err_str, int32_t type)
|
||||
+glusterd_check_brick_order(dict_t *dict, char *err_str, int32_t type,
|
||||
+ int32_t sub_count)
|
||||
{
|
||||
int ret = -1;
|
||||
int i = 0;
|
||||
@@ -14819,7 +14820,6 @@ glusterd_check_brick_order(dict_t *dict, char *err_str, int32_t type)
|
||||
char *tmpptr = NULL;
|
||||
char *volname = NULL;
|
||||
int32_t brick_count = 0;
|
||||
- int32_t sub_count = 0;
|
||||
struct addrinfo *ai_info = NULL;
|
||||
char brick_addr[128] = {
|
||||
0,
|
||||
@@ -14870,31 +14870,6 @@ glusterd_check_brick_order(dict_t *dict, char *err_str, int32_t type)
|
||||
goto out;
|
||||
}
|
||||
|
||||
- if (type != GF_CLUSTER_TYPE_DISPERSE) {
|
||||
- ret = dict_get_int32n(dict, "replica-count", SLEN("replica-count"),
|
||||
- &sub_count);
|
||||
- if (ret) {
|
||||
- gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_DICT_GET_FAILED,
|
||||
- "Bricks check : Could"
|
||||
- " not retrieve replica count");
|
||||
- goto out;
|
||||
- }
|
||||
- gf_msg_debug(this->name, 0,
|
||||
- "Replicate cluster type "
|
||||
- "found. Checking brick order.");
|
||||
- } else {
|
||||
- ret = dict_get_int32n(dict, "disperse-count", SLEN("disperse-count"),
|
||||
- &sub_count);
|
||||
- if (ret) {
|
||||
- gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_DICT_GET_FAILED,
|
||||
- "Bricks check : Could"
|
||||
- " not retrieve disperse count");
|
||||
- goto out;
|
||||
- }
|
||||
- gf_msg(this->name, GF_LOG_INFO, 0, GD_MSG_DISPERSE_CLUSTER_FOUND,
|
||||
- "Disperse cluster type"
|
||||
- " found. Checking brick order.");
|
||||
- }
|
||||
brick_list_dup = brick_list_ptr = gf_strdup(brick_list);
|
||||
/* Resolve hostnames and get addrinfo */
|
||||
while (i < brick_count) {
|
||||
@@ -14989,5 +14964,6 @@ out:
|
||||
ai_list_tmp2 = ai_list_tmp1;
|
||||
}
|
||||
free(ai_list_tmp2);
|
||||
+ gf_msg_debug("glusterd", 0, "Returning %d", ret);
|
||||
return ret;
|
||||
}
|
||||
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h
|
||||
index e2e2454..5f5de82 100644
|
||||
--- a/xlators/mgmt/glusterd/src/glusterd-utils.h
|
||||
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.h
|
||||
@@ -883,6 +883,7 @@ char *
|
||||
search_brick_path_from_proc(pid_t brick_pid, char *brickpath);
|
||||
|
||||
int32_t
|
||||
-glusterd_check_brick_order(dict_t *dict, char *err_str, int32_t type);
|
||||
+glusterd_check_brick_order(dict_t *dict, char *err_str, int32_t type,
|
||||
+ int32_t sub_count);
|
||||
|
||||
#endif
|
||||
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
|
||||
index 8da2ff3..134b04c 100644
|
||||
--- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
|
||||
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
|
||||
@@ -1024,6 +1024,8 @@ glusterd_op_stage_create_volume(dict_t *dict, char **op_errstr,
|
||||
int32_t local_brick_count = 0;
|
||||
int32_t i = 0;
|
||||
int32_t type = 0;
|
||||
+ int32_t replica_count = 0;
|
||||
+ int32_t disperse_count = 0;
|
||||
char *brick = NULL;
|
||||
char *tmpptr = NULL;
|
||||
xlator_t *this = NULL;
|
||||
@@ -1119,15 +1121,42 @@ glusterd_op_stage_create_volume(dict_t *dict, char **op_errstr,
|
||||
}
|
||||
|
||||
if (!is_force) {
|
||||
- if ((type == GF_CLUSTER_TYPE_REPLICATE) ||
|
||||
- (type == GF_CLUSTER_TYPE_DISPERSE)) {
|
||||
- ret = glusterd_check_brick_order(dict, msg, type);
|
||||
+ if (type == GF_CLUSTER_TYPE_REPLICATE) {
|
||||
+ ret = dict_get_int32n(dict, "replica-count",
|
||||
+ SLEN("replica-count"), &replica_count);
|
||||
if (ret) {
|
||||
- gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_BAD_BRKORDER,
|
||||
- "Not creating volume because of "
|
||||
- "bad brick order");
|
||||
+ gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_DICT_GET_FAILED,
|
||||
+ "Bricks check : Could"
|
||||
+ " not retrieve replica count");
|
||||
+ goto out;
|
||||
+ }
|
||||
+ gf_msg_debug(this->name, 0,
|
||||
+ "Replicate cluster type "
|
||||
+ "found. Checking brick order.");
|
||||
+ ret = glusterd_check_brick_order(dict, msg, type,
|
||||
+ replica_count);
|
||||
+ } else if (type == GF_CLUSTER_TYPE_DISPERSE) {
|
||||
+ ret = dict_get_int32n(dict, "disperse-count",
|
||||
+ SLEN("disperse-count"), &disperse_count);
|
||||
+ if (ret) {
|
||||
+ gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_DICT_GET_FAILED,
|
||||
+ "Bricks check : Could"
|
||||
+ " not retrieve disperse count");
|
||||
goto out;
|
||||
}
|
||||
+ gf_msg_debug(this->name, 0,
|
||||
+ "Disperse cluster type"
|
||||
+ " found. Checking brick order.");
|
||||
+ ret = glusterd_check_brick_order(dict, msg, type,
|
||||
+ disperse_count);
|
||||
+ }
|
||||
+ if (ret) {
|
||||
+ gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_BAD_BRKORDER,
|
||||
+ "Not creating the volume because of "
|
||||
+ "bad brick order. %s",
|
||||
+ msg);
|
||||
+ *op_errstr = gf_strdup(msg);
|
||||
+ goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
1.8.3.1
|
||||
|
152
0454-features-locks-avoid-use-after-freed-of-frame-for-bl.patch
Normal file
152
0454-features-locks-avoid-use-after-freed-of-frame-for-bl.patch
Normal file
@ -0,0 +1,152 @@
|
||||
From cddd253c5e3f0a7c3b91c35cea8ad1921cb43b98 Mon Sep 17 00:00:00 2001
|
||||
From: Kinglong Mee <kinglongmee@gmail.com>
|
||||
Date: Thu, 18 Jul 2019 11:43:01 +0800
|
||||
Subject: [PATCH 454/456] features/locks: avoid use after freed of frame for
|
||||
blocked lock
|
||||
|
||||
The fop contains blocked lock may use freed frame info when other
|
||||
unlock fop has unwind the blocked lock.
|
||||
|
||||
Because the blocked lock is added to block list in inode lock(or
|
||||
other lock), after that, when out of the inode lock, the fop
|
||||
contains the blocked lock should not use it.
|
||||
|
||||
Upstream Patch - https://review.gluster.org/#/c/glusterfs/+/23155/
|
||||
|
||||
>Change-Id: Icb309a1cc78380dc982b26d50c18d67e4f2c8915
|
||||
>fixes: bz#1737291
|
||||
>Signed-off-by: Kinglong Mee <mijinlong@horiscale.com>
|
||||
|
||||
Change-Id: Icb309a1cc78380dc982b26d50c18d67e4f2c8915
|
||||
BUG: 1812789
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/206465
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Xavi Hernandez Juan <xhernandez@redhat.com>
|
||||
---
|
||||
xlators/features/locks/src/common.c | 4 ++++
|
||||
xlators/features/locks/src/entrylk.c | 4 ++--
|
||||
xlators/features/locks/src/inodelk.c | 7 +++++--
|
||||
xlators/features/locks/src/posix.c | 5 +++--
|
||||
xlators/features/locks/src/reservelk.c | 2 --
|
||||
5 files changed, 14 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/xlators/features/locks/src/common.c b/xlators/features/locks/src/common.c
|
||||
index 6e7fb4b..1406e70 100644
|
||||
--- a/xlators/features/locks/src/common.c
|
||||
+++ b/xlators/features/locks/src/common.c
|
||||
@@ -1080,6 +1080,10 @@ pl_setlk(xlator_t *this, pl_inode_t *pl_inode, posix_lock_t *lock,
|
||||
lock->fl_type == F_UNLCK ? "Unlock" : "Lock",
|
||||
lock->client_pid, lkowner_utoa(&lock->owner),
|
||||
lock->user_flock.l_start, lock->user_flock.l_len);
|
||||
+
|
||||
+ pl_trace_block(this, lock->frame, NULL, NULL, F_SETLKW,
|
||||
+ &lock->user_flock, NULL);
|
||||
+
|
||||
lock->blocked = 1;
|
||||
__insert_lock(pl_inode, lock);
|
||||
ret = -1;
|
||||
diff --git a/xlators/features/locks/src/entrylk.c b/xlators/features/locks/src/entrylk.c
|
||||
index ced5eca..93c649c 100644
|
||||
--- a/xlators/features/locks/src/entrylk.c
|
||||
+++ b/xlators/features/locks/src/entrylk.c
|
||||
@@ -552,6 +552,8 @@ __lock_blocked_add(xlator_t *this, pl_inode_t *pinode, pl_dom_list_t *dom,
|
||||
gf_msg_trace(this->name, 0, "Blocking lock: {pinode=%p, basename=%s}",
|
||||
pinode, lock->basename);
|
||||
|
||||
+ entrylk_trace_block(this, lock->frame, NULL, NULL, NULL, lock->basename,
|
||||
+ ENTRYLK_LOCK, lock->type);
|
||||
out:
|
||||
return -EAGAIN;
|
||||
}
|
||||
@@ -932,8 +934,6 @@ out:
|
||||
op_ret, op_errno);
|
||||
unwind:
|
||||
STACK_UNWIND_STRICT(entrylk, frame, op_ret, op_errno, NULL);
|
||||
- } else {
|
||||
- entrylk_trace_block(this, frame, volume, fd, loc, basename, cmd, type);
|
||||
}
|
||||
|
||||
if (pcontend != NULL) {
|
||||
diff --git a/xlators/features/locks/src/inodelk.c b/xlators/features/locks/src/inodelk.c
|
||||
index a9c42f1..24dee49 100644
|
||||
--- a/xlators/features/locks/src/inodelk.c
|
||||
+++ b/xlators/features/locks/src/inodelk.c
|
||||
@@ -420,6 +420,8 @@ __lock_blocked_add(xlator_t *this, pl_dom_list_t *dom, pl_inode_lock_t *lock,
|
||||
lkowner_utoa(&lock->owner), lock->user_flock.l_start,
|
||||
lock->user_flock.l_len);
|
||||
|
||||
+ pl_trace_block(this, lock->frame, NULL, NULL, F_SETLKW, &lock->user_flock,
|
||||
+ lock->volume);
|
||||
out:
|
||||
return -EAGAIN;
|
||||
}
|
||||
@@ -959,6 +961,7 @@ pl_common_inodelk(call_frame_t *frame, xlator_t *this, const char *volume,
|
||||
int ret = -1;
|
||||
GF_UNUSED int dict_ret = -1;
|
||||
int can_block = 0;
|
||||
+ short lock_type = 0;
|
||||
pl_inode_t *pinode = NULL;
|
||||
pl_inode_lock_t *reqlock = NULL;
|
||||
pl_dom_list_t *dom = NULL;
|
||||
@@ -1024,13 +1027,13 @@ pl_common_inodelk(call_frame_t *frame, xlator_t *this, const char *volume,
|
||||
/* fall through */
|
||||
|
||||
case F_SETLK:
|
||||
+ lock_type = flock->l_type;
|
||||
memcpy(&reqlock->user_flock, flock, sizeof(struct gf_flock));
|
||||
ret = pl_inode_setlk(this, ctx, pinode, reqlock, can_block, dom,
|
||||
inode);
|
||||
|
||||
if (ret < 0) {
|
||||
- if ((can_block) && (F_UNLCK != flock->l_type)) {
|
||||
- pl_trace_block(this, frame, fd, loc, cmd, flock, volume);
|
||||
+ if ((can_block) && (F_UNLCK != lock_type)) {
|
||||
goto out;
|
||||
}
|
||||
gf_log(this->name, GF_LOG_TRACE, "returning EAGAIN");
|
||||
diff --git a/xlators/features/locks/src/posix.c b/xlators/features/locks/src/posix.c
|
||||
index 50f1265..7887b82 100644
|
||||
--- a/xlators/features/locks/src/posix.c
|
||||
+++ b/xlators/features/locks/src/posix.c
|
||||
@@ -2557,6 +2557,7 @@ pl_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,
|
||||
uint32_t lk_flags = 0;
|
||||
posix_locks_private_t *priv = this->private;
|
||||
pl_local_t *local = NULL;
|
||||
+ short lock_type = 0;
|
||||
|
||||
int ret = dict_get_uint32(xdata, GF_LOCK_MODE, &lk_flags);
|
||||
if (ret == 0) {
|
||||
@@ -2701,6 +2702,7 @@ pl_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,
|
||||
case F_SETLK:
|
||||
reqlock->frame = frame;
|
||||
reqlock->this = this;
|
||||
+ lock_type = flock->l_type;
|
||||
|
||||
pthread_mutex_lock(&pl_inode->mutex);
|
||||
{
|
||||
@@ -2738,8 +2740,7 @@ pl_lk(call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t cmd,
|
||||
|
||||
ret = pl_setlk(this, pl_inode, reqlock, can_block);
|
||||
if (ret == -1) {
|
||||
- if ((can_block) && (F_UNLCK != flock->l_type)) {
|
||||
- pl_trace_block(this, frame, fd, NULL, cmd, flock, NULL);
|
||||
+ if ((can_block) && (F_UNLCK != lock_type)) {
|
||||
goto out;
|
||||
}
|
||||
gf_log(this->name, GF_LOG_DEBUG, "returning EAGAIN");
|
||||
diff --git a/xlators/features/locks/src/reservelk.c b/xlators/features/locks/src/reservelk.c
|
||||
index 51076d7..604691f 100644
|
||||
--- a/xlators/features/locks/src/reservelk.c
|
||||
+++ b/xlators/features/locks/src/reservelk.c
|
||||
@@ -312,8 +312,6 @@ grant_blocked_lock_calls(xlator_t *this, pl_inode_t *pl_inode)
|
||||
ret = pl_setlk(this, pl_inode, lock, can_block);
|
||||
if (ret == -1) {
|
||||
if (can_block) {
|
||||
- pl_trace_block(this, lock->frame, fd, NULL, cmd,
|
||||
- &lock->user_flock, NULL);
|
||||
continue;
|
||||
} else {
|
||||
gf_log(this->name, GF_LOG_DEBUG, "returning EAGAIN");
|
||||
--
|
||||
1.8.3.1
|
||||
|
1253
0455-locks-prevent-deletion-of-locked-entries.patch
Normal file
1253
0455-locks-prevent-deletion-of-locked-entries.patch
Normal file
File diff suppressed because it is too large
Load Diff
74
0456-add-clean-local-after-grant-lock.patch
Normal file
74
0456-add-clean-local-after-grant-lock.patch
Normal file
@ -0,0 +1,74 @@
|
||||
From c38b38249fdf951565f6501ce8e9a4d01142d43e Mon Sep 17 00:00:00 2001
|
||||
From: l17zhou <cynthia.zhou@nokia-sbell.com>
|
||||
Date: Tue, 3 Dec 2019 07:43:35 +0200
|
||||
Subject: [PATCH 456/456] add clean local after grant lock
|
||||
|
||||
found by flock test, without correct ref number of fd,
|
||||
lock will not be correctly released.
|
||||
|
||||
Upstream patch:
|
||||
> Upstream patch link: https://review.gluster.org/c/glusterfs/+/23794
|
||||
> Fixes: bz#1779089
|
||||
> Change-Id: I3e466b17c852eb219c8778e43af8ad670a8449cc
|
||||
> Signed-off-by: l17zhou <cynthia.zhou@nokia-sbell.com>
|
||||
|
||||
BUG: 1854165
|
||||
Change-Id: I3e466b17c852eb219c8778e43af8ad670a8449cc
|
||||
Signed-off-by: Xavi Hernandez <xhernandez@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/206673
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
xlators/features/locks/src/common.c | 15 ++++++++-------
|
||||
1 file changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/xlators/features/locks/src/common.c b/xlators/features/locks/src/common.c
|
||||
index 0c52853..cddbfa6 100644
|
||||
--- a/xlators/features/locks/src/common.c
|
||||
+++ b/xlators/features/locks/src/common.c
|
||||
@@ -961,7 +961,7 @@ grant_blocked_locks(xlator_t *this, pl_inode_t *pl_inode)
|
||||
struct list_head granted_list;
|
||||
posix_lock_t *tmp = NULL;
|
||||
posix_lock_t *lock = NULL;
|
||||
-
|
||||
+ pl_local_t *local = NULL;
|
||||
INIT_LIST_HEAD(&granted_list);
|
||||
|
||||
pthread_mutex_lock(&pl_inode->mutex);
|
||||
@@ -976,9 +976,9 @@ grant_blocked_locks(xlator_t *this, pl_inode_t *pl_inode)
|
||||
|
||||
pl_trace_out(this, lock->frame, NULL, NULL, F_SETLKW, &lock->user_flock,
|
||||
0, 0, NULL);
|
||||
-
|
||||
- STACK_UNWIND_STRICT(lk, lock->frame, 0, 0, &lock->user_flock, NULL);
|
||||
-
|
||||
+ local = lock->frame->local;
|
||||
+ PL_STACK_UNWIND_AND_FREE(local, lk, lock->frame, 0, 0,
|
||||
+ &lock->user_flock, NULL);
|
||||
__destroy_lock(lock);
|
||||
}
|
||||
|
||||
@@ -997,6 +997,7 @@ pl_send_prelock_unlock(xlator_t *this, pl_inode_t *pl_inode,
|
||||
struct list_head granted_list;
|
||||
posix_lock_t *tmp = NULL;
|
||||
posix_lock_t *lock = NULL;
|
||||
+ pl_local_t *local = NULL;
|
||||
|
||||
int ret = -1;
|
||||
|
||||
@@ -1024,9 +1025,9 @@ pl_send_prelock_unlock(xlator_t *this, pl_inode_t *pl_inode,
|
||||
|
||||
pl_trace_out(this, lock->frame, NULL, NULL, F_SETLKW, &lock->user_flock,
|
||||
0, 0, NULL);
|
||||
-
|
||||
- STACK_UNWIND_STRICT(lk, lock->frame, 0, 0, &lock->user_flock, NULL);
|
||||
-
|
||||
+ local = lock->frame->local;
|
||||
+ PL_STACK_UNWIND_AND_FREE(local, lk, lock->frame, 0, 0,
|
||||
+ &lock->user_flock, NULL);
|
||||
__destroy_lock(lock);
|
||||
}
|
||||
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -237,7 +237,7 @@ Release: 0.1%{?prereltag:.%{prereltag}}%{?dist}
|
||||
%else
|
||||
Name: glusterfs
|
||||
Version: 6.0
|
||||
Release: 39%{?dist}
|
||||
Release: 40%{?dist}
|
||||
ExcludeArch: i686
|
||||
%endif
|
||||
License: GPLv2 or LGPLv3+
|
||||
@ -766,6 +766,11 @@ Patch0448: 0448-Posix-Use-simple-approach-to-close-fd.patch
|
||||
Patch0449: 0449-test-Test-case-brick-mux-validation-in-cluster.t-is-.patch
|
||||
Patch0450: 0450-tests-basic-ctime-enable-ctime-before-testing.patch
|
||||
Patch0451: 0451-extras-Modify-group-virt-to-include-network-related-.patch
|
||||
Patch0452: 0452-Tier-DHT-Handle-the-pause-case-missed-out.patch
|
||||
Patch0453: 0453-glusterd-add-brick-command-failure.patch
|
||||
Patch0454: 0454-features-locks-avoid-use-after-freed-of-frame-for-bl.patch
|
||||
Patch0455: 0455-locks-prevent-deletion-of-locked-entries.patch
|
||||
Patch0456: 0456-add-clean-local-after-grant-lock.patch
|
||||
|
||||
%description
|
||||
GlusterFS is a distributed file-system capable of scaling to several
|
||||
@ -2506,6 +2511,9 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Jul 21 2020 Deepshikha Khandelwal <dkhandel@redhat.com> - 6.0-40
|
||||
- fixes bugs bz#1812789 bz#1844359 bz#1847081 bz#1854165
|
||||
|
||||
* Wed Jun 17 2020 Deepshikha Khandelwal <dkhandel@redhat.com> - 6.0-39
|
||||
- fixes bugs bz#1844359 bz#1845064
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user