autobuild v3.12.2-16
Resolves: bz#1569657 bz#1608352 bz#1609163 bz#1609724 bz#1610825 Resolves: bz#1611151 bz#1612098 bz#1615338 bz#1615440 Signed-off-by: Milind Changire <mchangir@redhat.com>
This commit is contained in:
parent
299302574e
commit
c459b4cbb4
127
0334-glusterd-Bricks-of-a-normal-volumes-should-not-attac.patch
Normal file
127
0334-glusterd-Bricks-of-a-normal-volumes-should-not-attac.patch
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
From e849b8d24e97b7e8e9f0bd0ab7d49c748a5897fa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Sanju Rakonde <srakonde@redhat.com>
|
||||||
|
Date: Wed, 1 Aug 2018 15:09:08 +0530
|
||||||
|
Subject: [PATCH 334/351] glusterd: Bricks of a normal volumes should not
|
||||||
|
attach to gluster_shared_storage bricks
|
||||||
|
|
||||||
|
Problem: In a brick multiplexing environment, Bricks of a normal volume
|
||||||
|
created by user are getting attached to the bricks of a volume
|
||||||
|
"gluster_shared_storage" which is created by enabling the
|
||||||
|
enable-shared-storage option. Mounting gluster_shared_storage
|
||||||
|
has strict authentication checks. when we attach bricks of a normal
|
||||||
|
volume to bricks of gluster_shared_storage, mounting the normal
|
||||||
|
volume created by user will fail due to strict authentication checks.
|
||||||
|
|
||||||
|
Solution: We should not attach bricks of a normal volume to brick
|
||||||
|
process of gluster_shared_storage volume and vice versa.
|
||||||
|
|
||||||
|
>fixes: bz#1610726
|
||||||
|
>Change-Id: If1b5a2a02675789a2915ba480fb48c145449163d
|
||||||
|
>Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
|
||||||
|
|
||||||
|
upstream patch: https://review.gluster.org/#/c/20604/
|
||||||
|
|
||||||
|
Change-Id: If1b5a2a02675789a2915ba480fb48c145449163d
|
||||||
|
BUG: 1609163
|
||||||
|
Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146221
|
||||||
|
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
.../glusterd/brick-mux-validation-in-cluster.t | 51 ++++++++++++++++++++++
|
||||||
|
xlators/mgmt/glusterd/src/glusterd-utils.c | 14 ++++++
|
||||||
|
2 files changed, 65 insertions(+)
|
||||||
|
create mode 100644 tests/bugs/glusterd/brick-mux-validation-in-cluster.t
|
||||||
|
|
||||||
|
diff --git a/tests/bugs/glusterd/brick-mux-validation-in-cluster.t b/tests/bugs/glusterd/brick-mux-validation-in-cluster.t
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..4e57038
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tests/bugs/glusterd/brick-mux-validation-in-cluster.t
|
||||||
|
@@ -0,0 +1,51 @@
|
||||||
|
+#!/bin/bash
|
||||||
|
+
|
||||||
|
+. $(dirname $0)/../../include.rc
|
||||||
|
+. $(dirname $0)/../../cluster.rc
|
||||||
|
+
|
||||||
|
+function count_brick_processes {
|
||||||
|
+ pgrep glusterfsd | wc -l
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+cleanup;
|
||||||
|
+
|
||||||
|
+TEST launch_cluster 3
|
||||||
|
+TEST $CLI_1 peer probe $H2;
|
||||||
|
+EXPECT_WITHIN $PROBE_TIMEOUT 1 peer_count
|
||||||
|
+
|
||||||
|
+TEST $CLI_1 peer probe $H3;
|
||||||
|
+EXPECT_WITHIN $PROBE_TIMEOUT 2 peer_count
|
||||||
|
+
|
||||||
|
+TEST $CLI_1 volume set all cluster.brick-multiplex on
|
||||||
|
+#bug-1609163 - bricks of normal volume should not attach to bricks of gluster_shared_storage volume
|
||||||
|
+
|
||||||
|
+##Create, start and mount meta_volume i.e., shared_storage
|
||||||
|
+TEST $CLI_1 volume create $META_VOL replica 3 $H1:$B1/${META_VOL}1 $H2:$B2/${META_VOL}1 $H3:$B3/${META_VOL}1
|
||||||
|
+TEST $CLI_1 volume start $META_VOL
|
||||||
|
+TEST mkdir -p $META_MNT
|
||||||
|
+TEST glusterfs -s $H1 --volfile-id $META_VOL $META_MNT
|
||||||
|
+
|
||||||
|
+TEST $CLI_1 volume info gluster_shared_storage
|
||||||
|
+
|
||||||
|
+EXPECT 3 count_brick_processes
|
||||||
|
+
|
||||||
|
+#create and start a new volume
|
||||||
|
+TEST $CLI_1 volume create $V0 replica 3 $H1:$B1/${V0}{1..3} $H2:$B2/${V0}{1..3}
|
||||||
|
+TEST $CLI_1 volume start $V0
|
||||||
|
+
|
||||||
|
+# bricks of normal volume should not attach to bricks of gluster_shared_storage volume
|
||||||
|
+EXPECT 5 count_brick_processes
|
||||||
|
+
|
||||||
|
+#bug-1549996 - stale brick processes on the nodes after volume deletion
|
||||||
|
+
|
||||||
|
+TEST $CLI_1 volume create $V1 replica 3 $H1:$B1/${V1}{1..3} $H2:$B2/${V1}{1..3}
|
||||||
|
+TEST $CLI_1 volume start $V1
|
||||||
|
+
|
||||||
|
+EXPECT 5 count_brick_processes
|
||||||
|
+
|
||||||
|
+TEST $CLI_1 volume stop $V0
|
||||||
|
+TEST $CLI_1 volume stop $V1
|
||||||
|
+
|
||||||
|
+EXPECT 3 count_brick_processes
|
||||||
|
+
|
||||||
|
+cleanup
|
||||||
|
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
index fe9cc75..80204e4 100644
|
||||||
|
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
@@ -5710,6 +5710,7 @@ find_compat_brick_in_vol (glusterd_conf_t *conf,
|
||||||
|
int mux_limit = -1;
|
||||||
|
int ret = -1;
|
||||||
|
gf_boolean_t brick_status = _gf_false;
|
||||||
|
+ gf_boolean_t is_shared_storage = _gf_false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If comp_vol is provided, we have to check *volume* compatibility
|
||||||
|
@@ -5717,6 +5718,19 @@ find_compat_brick_in_vol (glusterd_conf_t *conf,
|
||||||
|
*/
|
||||||
|
if (comp_vol) {
|
||||||
|
/*
|
||||||
|
+ * We should not attach bricks of a normal volume to bricks
|
||||||
|
+ * of shared storage volume.
|
||||||
|
+ */
|
||||||
|
+ if (!strcmp (srch_vol->volname, GLUSTER_SHARED_STORAGE))
|
||||||
|
+ is_shared_storage = _gf_true;
|
||||||
|
+
|
||||||
|
+ if (!strcmp (comp_vol->volname, GLUSTER_SHARED_STORAGE)) {
|
||||||
|
+ if (!is_shared_storage)
|
||||||
|
+ return NULL;
|
||||||
|
+ } else if (is_shared_storage)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
* It's kind of a shame that we have to do this check in both
|
||||||
|
* directions, but an option might only exist on one of the two
|
||||||
|
* dictionaries and dict_foreach_match will only find that one.
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 9408859ce233c84f94fe4b7dd73cbbdc09fac10c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ashish Pandey <aspandey@redhat.com>
|
||||||
|
Date: Thu, 2 Aug 2018 10:54:52 +0530
|
||||||
|
Subject: [PATCH 335/351] cluster/ec: set others.eager-lock option off by
|
||||||
|
default
|
||||||
|
|
||||||
|
This patch is only for downstream.
|
||||||
|
We will revert the changes back to ON once we take
|
||||||
|
lock contention feature for downstream, which is already present
|
||||||
|
in upstream.
|
||||||
|
|
||||||
|
Change-Id: I4619eb692fe66732d5373dd63afd28b44467027a
|
||||||
|
BUG: 1611151
|
||||||
|
Signed-off-by: Ashish Pandey <aspandey@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/145842
|
||||||
|
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||||
|
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
|
||||||
|
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/cluster/ec/src/ec.c | 6 +++++-
|
||||||
|
1 file changed, 5 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c
|
||||||
|
index 0d59efd..9a23a45 100644
|
||||||
|
--- a/xlators/cluster/ec/src/ec.c
|
||||||
|
+++ b/xlators/cluster/ec/src/ec.c
|
||||||
|
@@ -1434,9 +1434,13 @@ struct volume_options options[] =
|
||||||
|
"disabled, lock will be released as soon as fop "
|
||||||
|
"completes."
|
||||||
|
},
|
||||||
|
+ /* Keeping this option OFF by default. Once we take lock
|
||||||
|
+ * contention notification feature (upstream patch #14736) in for
|
||||||
|
+ * downstream we can revert this to ON.
|
||||||
|
+ */
|
||||||
|
{ .key = {"other-eager-lock"},
|
||||||
|
.type = GF_OPTION_TYPE_BOOL,
|
||||||
|
- .default_value = "on",
|
||||||
|
+ .default_value = "off",
|
||||||
|
.description = "It's equivalent to the eager-lock option but for non "
|
||||||
|
"regular files."
|
||||||
|
},
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 1aa17a84422024a4941843474b58f78827b9d2c9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Date: Tue, 24 Jul 2018 13:25:12 +0530
|
||||||
|
Subject: [PATCH 336/351] dict: handle negative key/value length while
|
||||||
|
unserialize
|
||||||
|
|
||||||
|
BUG: 1607407
|
||||||
|
Change-Id: Ie56df0da46c242846a1ba51ccb9e011af118b119
|
||||||
|
Signed-off-by: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/145895
|
||||||
|
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
Tested-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
libglusterfs/src/dict.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c
|
||||||
|
index 36d91a7..40458ca 100644
|
||||||
|
--- a/libglusterfs/src/dict.c
|
||||||
|
+++ b/libglusterfs/src/dict.c
|
||||||
|
@@ -3003,7 +3003,8 @@ dict_unserialize (char *orig_buf, int32_t size, dict_t **fill)
|
||||||
|
vallen = ntoh32 (hostord);
|
||||||
|
buf += DICT_DATA_HDR_VAL_LEN;
|
||||||
|
|
||||||
|
- if ((buf + keylen) > (orig_buf + size)) {
|
||||||
|
+ if ((keylen < 0) || (vallen < 0) ||
|
||||||
|
+ (buf + keylen) > (orig_buf + size)) {
|
||||||
|
gf_msg_callingfn ("dict", GF_LOG_ERROR, 0,
|
||||||
|
LG_MSG_UNDERSIZED_BUF,
|
||||||
|
"undersized buffer passed. "
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,64 @@
|
|||||||
|
From d339013984f117159217f48908c517ba32ed278c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mohit Agrawal <moagrawa@redhat.com>
|
||||||
|
Date: Sat, 30 Jun 2018 19:51:34 +0530
|
||||||
|
Subject: [PATCH 337/351] glusterfs: Brick process is crash at the time of call
|
||||||
|
server_first_lookup
|
||||||
|
|
||||||
|
Problem: Brick process is getting crash while executing test case
|
||||||
|
tests/bugs/core/bug-1432542-mpx-restart-crash.t
|
||||||
|
|
||||||
|
Solution: At the time of initiating connection with brick process by
|
||||||
|
client brick process call server_setvolume.If cleanup thread
|
||||||
|
has set cleanup_starting flag after check flag by server_setvolume
|
||||||
|
then a brick process can crash at the time of calling lookup
|
||||||
|
on brick root.To avoid crash check cleanup_starting
|
||||||
|
flag before just call server_first_lookup
|
||||||
|
|
||||||
|
> BUG: 1597627
|
||||||
|
> Change-Id: I12542c124c76429184df34a04c1eae1a30052ca7
|
||||||
|
> fixes: bz#1597627
|
||||||
|
> Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
|
||||||
|
> Note: To test the patch executing test case
|
||||||
|
> tests/bugs/core/bug-1432542-mpx-restart-crash.t in a loop
|
||||||
|
> around 100 times
|
||||||
|
> (Cherry picked from commit dab12ce093628860bf43c3e0c7eaf9099cf7a78f)
|
||||||
|
> (Reviewed on upstream link https://review.gluster.org/#/c/20427/)
|
||||||
|
|
||||||
|
Change-Id: I490d8152e82e254163a2938f75ab0d2f64bc58b4
|
||||||
|
BUG: 1609724
|
||||||
|
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146227
|
||||||
|
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||||
|
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/protocol/server/src/server-handshake.c | 14 +++++++++++---
|
||||||
|
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xlators/protocol/server/src/server-handshake.c b/xlators/protocol/server/src/server-handshake.c
|
||||||
|
index a59bcda..12f620c 100644
|
||||||
|
--- a/xlators/protocol/server/src/server-handshake.c
|
||||||
|
+++ b/xlators/protocol/server/src/server-handshake.c
|
||||||
|
@@ -910,9 +910,17 @@ fail:
|
||||||
|
to client. Very important in case of subdirectory mounts, where if
|
||||||
|
client is trying to mount a non-existing directory */
|
||||||
|
if (op_ret >= 0 && client->bound_xl->itable) {
|
||||||
|
- op_ret = server_first_lookup (this, client, reply);
|
||||||
|
- if (op_ret == -1)
|
||||||
|
- op_errno = ENOENT;
|
||||||
|
+ if (client->bound_xl->cleanup_starting) {
|
||||||
|
+ op_ret = -1;
|
||||||
|
+ op_errno = EAGAIN;
|
||||||
|
+ ret = dict_set_str (reply, "ERROR",
|
||||||
|
+ "cleanup flag is set for xlator "
|
||||||
|
+ "before call first_lookup Try again later");
|
||||||
|
+ } else {
|
||||||
|
+ op_ret = server_first_lookup (this, client, reply);
|
||||||
|
+ if (op_ret == -1)
|
||||||
|
+ op_errno = ENOENT;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
rsp = GF_CALLOC (1, sizeof (gf_setvolume_rsp),
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,67 @@
|
|||||||
|
From 9656e92cfcd3db351c149e78ca36a4f3cf4c37f3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Date: Fri, 10 Aug 2018 15:28:35 +0530
|
||||||
|
Subject: [PATCH 338/351] posix: prevent crash when SEEK_DATA/HOLE is not
|
||||||
|
supported
|
||||||
|
|
||||||
|
Instead of not defining the 'seek' fop when it's not supported on the
|
||||||
|
compilation platform, we simply return EINVAL when it's used.
|
||||||
|
|
||||||
|
Upstream reference:
|
||||||
|
> URL: https://review.gluster.org/20625
|
||||||
|
> Fixes: bz#1611834
|
||||||
|
> Signed-off-by: Xavi Hernandez <xhernandez@redhat.com>
|
||||||
|
|
||||||
|
BUG: 1610825
|
||||||
|
Change-Id: I253666d8910c5e2fffa3a3ba37085e5c1c058a8e
|
||||||
|
Signed-off-by: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146682
|
||||||
|
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||||
|
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/storage/posix/src/posix.c | 8 ++++----
|
||||||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
|
||||||
|
index c3b7120..5203068 100644
|
||||||
|
--- a/xlators/storage/posix/src/posix.c
|
||||||
|
+++ b/xlators/storage/posix/src/posix.c
|
||||||
|
@@ -1184,11 +1184,11 @@ posix_ipc (call_frame_t *frame, xlator_t *this, int32_t op, dict_t *xdata)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-#ifdef HAVE_SEEK_HOLE
|
||||||
|
static int32_t
|
||||||
|
posix_seek (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,
|
||||||
|
gf_seek_what_t what, dict_t *xdata)
|
||||||
|
{
|
||||||
|
+#ifdef HAVE_SEEK_HOLE
|
||||||
|
struct posix_fd *pfd = NULL;
|
||||||
|
off_t ret = -1;
|
||||||
|
int err = 0;
|
||||||
|
@@ -1236,9 +1236,11 @@ out:
|
||||||
|
|
||||||
|
STACK_UNWIND_STRICT (seek, frame, (ret == -1 ? -1 : 0), err,
|
||||||
|
(ret == -1 ? -1 : ret), xdata);
|
||||||
|
+#else
|
||||||
|
+ STACK_UNWIND_STRICT (seek, frame, -1, EINVAL, 0, NULL);
|
||||||
|
+#endif
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
int32_t
|
||||||
|
posix_opendir (call_frame_t *frame, xlator_t *this,
|
||||||
|
@@ -8018,9 +8020,7 @@ struct xlator_fops fops = {
|
||||||
|
.discard = posix_discard,
|
||||||
|
.zerofill = posix_zerofill,
|
||||||
|
.ipc = posix_ipc,
|
||||||
|
-#ifdef HAVE_SEEK_HOLE
|
||||||
|
.seek = posix_seek,
|
||||||
|
-#endif
|
||||||
|
.lease = posix_lease,
|
||||||
|
};
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
283
0339-posix-remove-not-supported-get-set-content.patch
Normal file
283
0339-posix-remove-not-supported-get-set-content.patch
Normal file
@ -0,0 +1,283 @@
|
|||||||
|
From 54c7d29635ee284c0390260d4bececf917397bc7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Date: Thu, 2 Aug 2018 14:25:38 +0530
|
||||||
|
Subject: [PATCH 339/351] posix: remove not supported get/set content
|
||||||
|
|
||||||
|
getting and setting a file's content using extended
|
||||||
|
attribute worked great as a GET/PUT alternative when
|
||||||
|
an object storage is supported on top of Gluster. But
|
||||||
|
it needs application changes, and also, it skips some
|
||||||
|
caching layers. It is not used over years, and not
|
||||||
|
supported any more. Remove the dead code.
|
||||||
|
|
||||||
|
BUG: 1608363
|
||||||
|
BUG: 1608366
|
||||||
|
Change-Id: I6d4c135ca1bce5197c7cf749f9f3b481b91f2a95
|
||||||
|
Signed-off-by: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/145896
|
||||||
|
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
|
||||||
|
Reviewed-by: FNU Raghavendra Manjunath <raghavendra@redhat.com>
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
libglusterfs/src/glusterfs.h | 6 --
|
||||||
|
xlators/storage/posix/src/posix-helpers.c | 165 +-----------------------------
|
||||||
|
xlators/storage/posix/src/posix.c | 13 ---
|
||||||
|
xlators/storage/posix/src/posix.h | 4 -
|
||||||
|
4 files changed, 1 insertion(+), 187 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h
|
||||||
|
index b161bf0..d71a9c1 100644
|
||||||
|
--- a/libglusterfs/src/glusterfs.h
|
||||||
|
+++ b/libglusterfs/src/glusterfs.h
|
||||||
|
@@ -185,9 +185,6 @@ enum gf_internal_fop_indicator {
|
||||||
|
|
||||||
|
#define DHT_CHANGELOG_RENAME_OP_KEY "changelog.rename-op"
|
||||||
|
|
||||||
|
-#define ZR_FILE_CONTENT_STR "glusterfs.file."
|
||||||
|
-#define ZR_FILE_CONTENT_STRLEN 15
|
||||||
|
-
|
||||||
|
#define GLUSTERFS_WRITE_IS_APPEND "glusterfs.write-is-append"
|
||||||
|
#define GLUSTERFS_WRITE_UPDATE_ATOMIC "glusterfs.write-update-atomic"
|
||||||
|
#define GLUSTERFS_OPEN_FD_COUNT "glusterfs.open-fd-count"
|
||||||
|
@@ -254,9 +251,6 @@ enum gf_internal_fop_indicator {
|
||||||
|
|
||||||
|
#define STARTING_EVENT_THREADS 1
|
||||||
|
|
||||||
|
-#define ZR_FILE_CONTENT_REQUEST(key) (!strncmp(key, ZR_FILE_CONTENT_STR, \
|
||||||
|
- ZR_FILE_CONTENT_STRLEN))
|
||||||
|
-
|
||||||
|
#define DEFAULT_VAR_RUN_DIRECTORY DATADIR "/run/gluster"
|
||||||
|
#define DEFAULT_GLUSTERFSD_MISC_DIRETORY DATADIR "/lib/misc/glusterfsd"
|
||||||
|
#ifdef GF_LINUX_HOST_OS
|
||||||
|
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c
|
||||||
|
index 49f9f46..cddf02e 100644
|
||||||
|
--- a/xlators/storage/posix/src/posix-helpers.c
|
||||||
|
+++ b/xlators/storage/posix/src/posix-helpers.c
|
||||||
|
@@ -919,165 +919,6 @@ out:
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-int
|
||||||
|
-posix_set_file_contents (xlator_t *this, const char *path, char *keyp,
|
||||||
|
- data_t *value, int flags)
|
||||||
|
-{
|
||||||
|
- char * key = NULL;
|
||||||
|
- char real_path[PATH_MAX];
|
||||||
|
- int32_t file_fd = -1;
|
||||||
|
- int op_ret = 0;
|
||||||
|
- int ret = -1;
|
||||||
|
-
|
||||||
|
-
|
||||||
|
- /* XXX: does not handle assigning GFID to created files */
|
||||||
|
- return -1;
|
||||||
|
-
|
||||||
|
- key = &(keyp[15]);
|
||||||
|
- sprintf (real_path, "%s/%s", path, key);
|
||||||
|
-
|
||||||
|
- if (flags & XATTR_REPLACE) {
|
||||||
|
- /* if file exists, replace it
|
||||||
|
- * else, error out */
|
||||||
|
- file_fd = open (real_path, O_TRUNC|O_WRONLY);
|
||||||
|
-
|
||||||
|
- if (file_fd == -1) {
|
||||||
|
- goto create;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (value->len) {
|
||||||
|
- ret = sys_write (file_fd, value->data, value->len);
|
||||||
|
- if (ret == -1) {
|
||||||
|
- op_ret = -errno;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, errno,
|
||||||
|
- P_MSG_SET_FILE_CONTENTS, "write failed"
|
||||||
|
- "while doing setxattr for key %s on"
|
||||||
|
- "path%s", key, real_path);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- ret = sys_close (file_fd);
|
||||||
|
- if (ret == -1) {
|
||||||
|
- op_ret = -errno;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, errno,
|
||||||
|
- P_MSG_SET_FILE_CONTENTS,
|
||||||
|
- "close failed on %s",
|
||||||
|
- real_path);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- create: /* we know file doesn't exist, create it */
|
||||||
|
-
|
||||||
|
- file_fd = open (real_path, O_CREAT|O_WRONLY, 0644);
|
||||||
|
-
|
||||||
|
- if (file_fd == -1) {
|
||||||
|
- op_ret = -errno;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, errno,
|
||||||
|
- P_MSG_SET_FILE_CONTENTS, "failed to open file"
|
||||||
|
- "%s with O_CREAT", key);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- ret = sys_write (file_fd, value->data, value->len);
|
||||||
|
- if (ret == -1) {
|
||||||
|
- op_ret = -errno;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, errno,
|
||||||
|
- P_MSG_SET_FILE_CONTENTS, "write failed on %s"
|
||||||
|
- "while setxattr with key %s", real_path, key);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- ret = sys_close (file_fd);
|
||||||
|
- if (ret == -1) {
|
||||||
|
- op_ret = -errno;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, errno,
|
||||||
|
- P_MSG_SET_FILE_CONTENTS, "close failed on"
|
||||||
|
- " %s while setxattr with key %s",
|
||||||
|
- real_path, key);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
-out:
|
||||||
|
- return op_ret;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-int
|
||||||
|
-posix_get_file_contents (xlator_t *this, uuid_t pargfid,
|
||||||
|
- const char *name, char **contents)
|
||||||
|
-{
|
||||||
|
- char *real_path = NULL;
|
||||||
|
- int32_t file_fd = -1;
|
||||||
|
- struct iatt stbuf = {0,};
|
||||||
|
- int op_ret = 0;
|
||||||
|
- int ret = -1;
|
||||||
|
-
|
||||||
|
-
|
||||||
|
- MAKE_HANDLE_PATH (real_path, this, pargfid, name);
|
||||||
|
- if (!real_path) {
|
||||||
|
- op_ret = -ESTALE;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, ESTALE,
|
||||||
|
- P_MSG_XDATA_GETXATTR,
|
||||||
|
- "Failed to create handle path for %s/%s",
|
||||||
|
- uuid_utoa (pargfid), name);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- op_ret = posix_istat (this, pargfid, name, &stbuf);
|
||||||
|
- if (op_ret == -1) {
|
||||||
|
- op_ret = -errno;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, errno, P_MSG_XDATA_GETXATTR,
|
||||||
|
- "lstat failed on %s", real_path);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- file_fd = open (real_path, O_RDONLY);
|
||||||
|
-
|
||||||
|
- if (file_fd == -1) {
|
||||||
|
- op_ret = -errno;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, errno, P_MSG_XDATA_GETXATTR,
|
||||||
|
- "open failed on %s", real_path);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- *contents = GF_CALLOC (stbuf.ia_size + 1, sizeof(char),
|
||||||
|
- gf_posix_mt_char);
|
||||||
|
- if (! *contents) {
|
||||||
|
- op_ret = -errno;
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- ret = sys_read (file_fd, *contents, stbuf.ia_size);
|
||||||
|
- if (ret <= 0) {
|
||||||
|
- op_ret = -1;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, errno, P_MSG_XDATA_GETXATTR,
|
||||||
|
- "read on %s failed", real_path);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- *contents[stbuf.ia_size] = '\0';
|
||||||
|
-
|
||||||
|
- op_ret = sys_close (file_fd);
|
||||||
|
- file_fd = -1;
|
||||||
|
- if (op_ret == -1) {
|
||||||
|
- op_ret = -errno;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, errno, P_MSG_XDATA_GETXATTR,
|
||||||
|
- "close on %s failed", real_path);
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
-out:
|
||||||
|
- if (op_ret < 0) {
|
||||||
|
- GF_FREE (*contents);
|
||||||
|
- if (file_fd != -1)
|
||||||
|
- sys_close (file_fd);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return op_ret;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
#ifdef HAVE_SYS_ACL_H
|
||||||
|
int
|
||||||
|
posix_pacl_set (const char *path, const char *key, const char *acl_s)
|
||||||
|
@@ -1190,9 +1031,6 @@ posix_handle_pair (xlator_t *this, const char *real_path,
|
||||||
|
} else if (posix_is_gfid2path_xattr (key)) {
|
||||||
|
ret = -ENOTSUP;
|
||||||
|
goto out;
|
||||||
|
- } else if (ZR_FILE_CONTENT_REQUEST(key)) {
|
||||||
|
- ret = posix_set_file_contents (this, real_path, key, value,
|
||||||
|
- flags);
|
||||||
|
} else if (GF_POSIX_ACL_REQUEST (key)) {
|
||||||
|
if (stbuf && IS_DHT_LINKFILE_MODE (stbuf))
|
||||||
|
goto out;
|
||||||
|
@@ -1635,8 +1473,7 @@ _handle_entry_create_keyvalue_pair (dict_t *d, char *k, data_t *v,
|
||||||
|
!strcmp ("gfid-req", k) ||
|
||||||
|
!strcmp (POSIX_ACL_DEFAULT_XATTR, k) ||
|
||||||
|
!strcmp (POSIX_ACL_ACCESS_XATTR, k) ||
|
||||||
|
- posix_xattr_ignorable (k) ||
|
||||||
|
- ZR_FILE_CONTENT_REQUEST(k)) {
|
||||||
|
+ posix_xattr_ignorable (k)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
|
||||||
|
index 5203068..5c6e103 100644
|
||||||
|
--- a/xlators/storage/posix/src/posix.c
|
||||||
|
+++ b/xlators/storage/posix/src/posix.c
|
||||||
|
@@ -4720,19 +4720,6 @@ posix_getxattr (call_frame_t *frame, xlator_t *this,
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (loc->inode && IA_ISDIR(loc->inode->ia_type) && name &&
|
||||||
|
- ZR_FILE_CONTENT_REQUEST(name)) {
|
||||||
|
- ret = posix_get_file_contents (this, loc->gfid, &name[15],
|
||||||
|
- &file_contents);
|
||||||
|
- if (ret < 0) {
|
||||||
|
- op_errno = -ret;
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR, op_errno,
|
||||||
|
- P_MSG_FILE_FAILED, "getting file contents"
|
||||||
|
- "failed");
|
||||||
|
- goto out;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
dict = dict_new ();
|
||||||
|
if (!dict) {
|
||||||
|
op_errno = ENOMEM;
|
||||||
|
diff --git a/xlators/storage/posix/src/posix.h b/xlators/storage/posix/src/posix.h
|
||||||
|
index 8e40e6f..eaf4d0d 100644
|
||||||
|
--- a/xlators/storage/posix/src/posix.h
|
||||||
|
+++ b/xlators/storage/posix/src/posix.h
|
||||||
|
@@ -304,10 +304,6 @@ int posix_handle_pair (xlator_t *this, const char *real_path, char *key,
|
||||||
|
int posix_fhandle_pair (xlator_t *this, int fd, char *key, data_t *value,
|
||||||
|
int flags, struct iatt *stbuf);
|
||||||
|
void posix_spawn_janitor_thread (xlator_t *this);
|
||||||
|
-int posix_get_file_contents (xlator_t *this, uuid_t pargfid,
|
||||||
|
- const char *name, char **contents);
|
||||||
|
-int posix_set_file_contents (xlator_t *this, const char *path, char *key,
|
||||||
|
- data_t *value, int flags);
|
||||||
|
int posix_acl_xattr_set (xlator_t *this, const char *path, dict_t *xattr_req);
|
||||||
|
int posix_gfid_heal (xlator_t *this, const char *path, loc_t *loc, dict_t *xattr_req);
|
||||||
|
int posix_entry_create_xattr_set (xlator_t *this, const char *path,
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
396
0340-protocol-don-t-use-alloca.patch
Normal file
396
0340-protocol-don-t-use-alloca.patch
Normal file
@ -0,0 +1,396 @@
|
|||||||
|
From d15e6e4443e8873dc44c6731ce8876bde625b189 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Date: Thu, 2 Aug 2018 14:27:45 +0530
|
||||||
|
Subject: [PATCH 340/351] protocol: don't use alloca
|
||||||
|
|
||||||
|
current implementation of alloca can cause issues when strings larger
|
||||||
|
than the allocated buffer is passed to the xdr. Hence it makes sense
|
||||||
|
to allow XDR decode functions to deal with memory allocations, which
|
||||||
|
we can free later.
|
||||||
|
|
||||||
|
BUG: 1605227
|
||||||
|
Change-Id: I12d1c5d5498d0a403abd9c4e618bd5b4b60df8ee
|
||||||
|
Signed-off-by: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/145897
|
||||||
|
Reviewed-by: FNU Raghavendra Manjunath <raghavendra@redhat.com>
|
||||||
|
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/protocol/server/src/server-rpc-fops.c | 74 ++++++++++-----------------
|
||||||
|
1 file changed, 27 insertions(+), 47 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xlators/protocol/server/src/server-rpc-fops.c b/xlators/protocol/server/src/server-rpc-fops.c
|
||||||
|
index 0bf41d8..a7fd3b5 100644
|
||||||
|
--- a/xlators/protocol/server/src/server-rpc-fops.c
|
||||||
|
+++ b/xlators/protocol/server/src/server-rpc-fops.c
|
||||||
|
@@ -3896,8 +3896,6 @@ server3_3_create (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.bname = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_create_req, GF_FOP_CREATE);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -3931,6 +3929,7 @@ server3_3_create (rpcsvc_request_t *req)
|
||||||
|
out:
|
||||||
|
/* memory allocated by libc, don't use GF_FREE */
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.bname);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -4453,8 +4452,6 @@ server3_3_unlink (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.bname = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_unlink_req, GF_FOP_UNLINK);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -4479,6 +4476,7 @@ server3_3_unlink (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_unlink_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.bname);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -4500,8 +4498,6 @@ server3_3_setxattr (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.dict.dict_val = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_setxattr_req, GF_FOP_SETXATTR);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -4537,6 +4533,7 @@ server3_3_setxattr (rpcsvc_request_t *req)
|
||||||
|
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.dict.dict_val);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -4562,8 +4559,6 @@ server3_3_fsetxattr (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.dict.dict_val = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_fsetxattr_req, GF_FOP_FSETXATTR);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -4597,6 +4592,7 @@ server3_3_fsetxattr (rpcsvc_request_t *req)
|
||||||
|
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.dict.dict_val);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -4622,8 +4618,6 @@ server3_3_fxattrop (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.dict.dict_val = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_fxattrop_req, GF_FOP_FXATTROP);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -4657,6 +4651,7 @@ server3_3_fxattrop (rpcsvc_request_t *req)
|
||||||
|
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.dict.dict_val);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -4682,8 +4677,6 @@ server3_3_xattrop (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.dict.dict_val = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_xattrop_req, GF_FOP_XATTROP);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -4716,6 +4709,7 @@ server3_3_xattrop (rpcsvc_request_t *req)
|
||||||
|
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.dict.dict_val);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -4739,8 +4733,6 @@ server3_3_getxattr (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.name = alloca (256);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_getxattr_req, GF_FOP_GETXATTR);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -4766,6 +4758,7 @@ server3_3_getxattr (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_getxattr_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.name);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -4786,8 +4779,6 @@ server3_3_fgetxattr (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.name = alloca (256);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_fgetxattr_req, GF_FOP_FGETXATTR);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -4810,6 +4801,7 @@ server3_3_fgetxattr (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_fgetxattr_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.name);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -4831,8 +4823,6 @@ server3_3_removexattr (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.name = alloca (256);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_removexattr_req,
|
||||||
|
GF_FOP_REMOVEXATTR);
|
||||||
|
@@ -4854,6 +4844,7 @@ server3_3_removexattr (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_removexattr_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.name);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -4873,8 +4864,6 @@ server3_3_fremovexattr (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.name = alloca (4096);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_fremovexattr_req,
|
||||||
|
GF_FOP_FREMOVEXATTR);
|
||||||
|
@@ -4897,6 +4886,7 @@ server3_3_fremovexattr (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_fremovexattr_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.name);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -5107,8 +5097,6 @@ server3_3_mknod (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.bname = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_mknod_req, GF_FOP_MKNOD);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -5140,6 +5128,7 @@ out:
|
||||||
|
|
||||||
|
/* memory allocated by libc, don't use GF_FREE */
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.bname);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
@@ -5158,8 +5147,6 @@ server3_3_mkdir (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.bname = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_mkdir_req, GF_FOP_MKDIR);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -5189,6 +5176,7 @@ out:
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.bname);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@@ -5206,8 +5194,6 @@ server3_3_rmdir (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.bname = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_rmdir_req, GF_FOP_RMDIR);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -5231,6 +5217,7 @@ server3_3_rmdir (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_rmdir_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.bname);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -5253,8 +5240,6 @@ server3_3_inodelk (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.volume = alloca (256);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_inodelk_req, GF_FOP_INODELK);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -5304,6 +5289,7 @@ server3_3_inodelk (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_inodelk_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.volume);
|
||||||
|
|
||||||
|
free (args.flock.lk_owner.lk_owner_val);
|
||||||
|
|
||||||
|
@@ -5325,8 +5311,6 @@ server3_3_finodelk (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.volume = alloca (256);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_finodelk_req,
|
||||||
|
GF_FOP_FINODELK);
|
||||||
|
@@ -5378,6 +5362,7 @@ server3_3_finodelk (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_finodelk_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.volume);
|
||||||
|
|
||||||
|
free (args.flock.lk_owner.lk_owner_val);
|
||||||
|
|
||||||
|
@@ -5400,9 +5385,6 @@ server3_3_entrylk (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.volume = alloca (256);
|
||||||
|
- args.name = alloca (256);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_entrylk_req,
|
||||||
|
GF_FOP_ENTRYLK);
|
||||||
|
@@ -5430,6 +5412,8 @@ server3_3_entrylk (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_entrylk_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.volume);
|
||||||
|
+ free (args.name);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -5449,9 +5433,6 @@ server3_3_fentrylk (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.name = alloca (256);
|
||||||
|
- args.volume = alloca (256);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_fentrylk_req,
|
||||||
|
GF_FOP_FENTRYLK);
|
||||||
|
@@ -5479,6 +5460,8 @@ server3_3_fentrylk (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_fentrylk_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.volume);
|
||||||
|
+ free (args.name);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -5539,9 +5522,6 @@ server3_3_symlink (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.bname = alloca (req->msg[0].iov_len);
|
||||||
|
- args.linkname = alloca (4096);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_symlink_req, GF_FOP_SYMLINK);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -5570,6 +5550,8 @@ out:
|
||||||
|
|
||||||
|
/* memory allocated by libc, don't use GF_FREE */
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.linkname);
|
||||||
|
+ free (args.bname);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@@ -5588,8 +5570,6 @@ server3_3_link (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.newbname = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_link_req, GF_FOP_LINK);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -5614,6 +5594,7 @@ server3_3_link (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_link_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.newbname);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -5634,9 +5615,6 @@ server3_3_rename (rpcsvc_request_t *req)
|
||||||
|
if (!req)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
- args.oldbname = alloca (req->msg[0].iov_len);
|
||||||
|
- args.newbname = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_rename_req, GF_FOP_RENAME);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -5663,6 +5641,8 @@ server3_3_rename (rpcsvc_request_t *req)
|
||||||
|
resolve_and_resume (frame, server_rename_resume);
|
||||||
|
out:
|
||||||
|
free (args.xdata.xdata_val);
|
||||||
|
+ free (args.newbname);
|
||||||
|
+ free (args.oldbname);
|
||||||
|
|
||||||
|
if (op_errno)
|
||||||
|
SERVER_REQ_SET_ERROR (req, ret);
|
||||||
|
@@ -5865,9 +5845,6 @@ server3_3_lookup (rpcsvc_request_t *req)
|
||||||
|
|
||||||
|
GF_VALIDATE_OR_GOTO ("server", req, err);
|
||||||
|
|
||||||
|
- args.bname = alloca (req->msg[0].iov_len);
|
||||||
|
- args.xdata.xdata_val = alloca (req->msg[0].iov_len);
|
||||||
|
-
|
||||||
|
ret = rpc_receive_common (req, &frame, &state, NULL, &args,
|
||||||
|
xdr_gfs3_lookup_req, GF_FOP_LOOKUP);
|
||||||
|
if (ret != 0) {
|
||||||
|
@@ -5896,6 +5873,9 @@ server3_3_lookup (rpcsvc_request_t *req)
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
out:
|
||||||
|
+ free (args.bname);
|
||||||
|
+ free (args.xdata.xdata_val);
|
||||||
|
+
|
||||||
|
server_lookup_cbk (frame, NULL, frame->this, -1, EINVAL, NULL, NULL,
|
||||||
|
NULL, NULL);
|
||||||
|
ret = 0;
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,96 @@
|
|||||||
|
From bc7cc384c82ba8c0bc083ff70b5f2506acfd2b43 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
Date: Mon, 13 Aug 2018 20:30:04 +0530
|
||||||
|
Subject: [PATCH 341/351] Revert "glusterd: enable brick multiplexing by
|
||||||
|
default"
|
||||||
|
|
||||||
|
This reverts commit 2a80ccb39ea7f4ef5c801ad78b43e4bdc23a3c64.
|
||||||
|
|
||||||
|
brick multiplexing at stand alone RHGS has been decided to be turned
|
||||||
|
off.
|
||||||
|
|
||||||
|
Label: DOWNSTREAM ONLY
|
||||||
|
|
||||||
|
BUG: 1615440
|
||||||
|
Change-Id: Iaf8bd8a637ec16c66952ef8947e835174279c9a2
|
||||||
|
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146881
|
||||||
|
Reviewed-by: Mohit Agrawal <moagrawa@redhat.com>
|
||||||
|
---
|
||||||
|
cli/src/cli-cmd-parser.c | 18 ++++++++++++++++++
|
||||||
|
xlators/mgmt/glusterd/src/glusterd-op-sm.c | 2 +-
|
||||||
|
xlators/mgmt/glusterd/src/glusterd-utils.c | 2 +-
|
||||||
|
xlators/mgmt/glusterd/src/glusterd-volume-set.c | 2 +-
|
||||||
|
4 files changed, 21 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c
|
||||||
|
index e071b7d..7917d66 100644
|
||||||
|
--- a/cli/src/cli-cmd-parser.c
|
||||||
|
+++ b/cli/src/cli-cmd-parser.c
|
||||||
|
@@ -1739,6 +1739,24 @@ cli_cmd_volume_set_parse (struct cli_state *state, const char **words,
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if ((strcmp (key, "cluster.brick-multiplex") == 0)) {
|
||||||
|
+ question = "Brick-multiplexing is supported only for "
|
||||||
|
+ "container workloads (CNS/CRS). Also it is "
|
||||||
|
+ "advised to make sure that either all "
|
||||||
|
+ "volumes are in stopped state or no bricks "
|
||||||
|
+ "are running before this option is modified."
|
||||||
|
+ "Do you still want to continue?";
|
||||||
|
+
|
||||||
|
+ answer = cli_cmd_get_confirmation (state, question);
|
||||||
|
+ if (GF_ANSWER_NO == answer) {
|
||||||
|
+ gf_log ("cli", GF_LOG_ERROR, "Operation "
|
||||||
|
+ "cancelled, exiting");
|
||||||
|
+ *op_errstr = gf_strdup ("Aborted by user.");
|
||||||
|
+ ret = -1;
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = dict_set_int32 (dict, "count", wordcount-3);
|
||||||
|
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
|
||||||
|
index d022532..6dfd819 100644
|
||||||
|
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
|
||||||
|
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
|
||||||
|
@@ -78,7 +78,7 @@ glusterd_all_vol_opts valid_all_vol_opts[] = {
|
||||||
|
* TBD: add a dynamic handler to set the appropriate value
|
||||||
|
*/
|
||||||
|
{ GLUSTERD_MAX_OP_VERSION_KEY, "BUG_NO_MAX_OP_VERSION"},
|
||||||
|
- { GLUSTERD_BRICK_MULTIPLEX_KEY, "enable"},
|
||||||
|
+ { GLUSTERD_BRICK_MULTIPLEX_KEY, "disable"},
|
||||||
|
/* Set this value to 0 by default implying brick-multiplexing
|
||||||
|
* behaviour with no limit set on the number of brick instances that
|
||||||
|
* can be attached per process.
|
||||||
|
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
index 80204e4..372d5f4 100644
|
||||||
|
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
@@ -111,7 +111,7 @@ is_brick_mx_enabled (void)
|
||||||
|
if (!ret)
|
||||||
|
ret = gf_string2boolean (value, &enabled);
|
||||||
|
|
||||||
|
- return ret ? _gf_true : enabled;
|
||||||
|
+ return ret ? _gf_false : enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
|
||||||
|
index 8cc756a..474587a 100644
|
||||||
|
--- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c
|
||||||
|
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
|
||||||
|
@@ -3506,7 +3506,7 @@ struct volopt_map_entry glusterd_volopt_map[] = {
|
||||||
|
/* Brick multiplexing options */
|
||||||
|
{ .key = GLUSTERD_BRICK_MULTIPLEX_KEY,
|
||||||
|
.voltype = "mgmt/glusterd",
|
||||||
|
- .value = "on",
|
||||||
|
+ .value = "off",
|
||||||
|
.op_version = GD_OP_VERSION_3_10_0,
|
||||||
|
.validate_fn = validate_boolean,
|
||||||
|
.type = GLOBAL_DOC,
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
137
0342-glusterd-more-stricter-checks-of-if-brick-is-running.patch
Normal file
137
0342-glusterd-more-stricter-checks-of-if-brick-is-running.patch
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
From 16b5177ca40cb5f8b37ea5331003ecc7dbb6d992 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
Date: Tue, 7 Aug 2018 10:25:49 +0530
|
||||||
|
Subject: [PATCH 342/351] glusterd: more stricter checks of if brick is running
|
||||||
|
in multiplex mode
|
||||||
|
|
||||||
|
While gf_attach () utility can help in detaching a brick instance from
|
||||||
|
the brick process which the kill_brick () function in tests/volume.rc
|
||||||
|
uses it has a caveat which is as follows:
|
||||||
|
1. It doesn't ensure the respective brick is marked as stopped which
|
||||||
|
glusterd does from glusterd_brick_stop
|
||||||
|
2. Sometimes if kill_brick () is executed just after a brick stack is
|
||||||
|
up, the mgmt_rpc_notify () can take some time before marking
|
||||||
|
priv->connected to 1 and before it if kill_brick () is executed, brick
|
||||||
|
will fail to initiate the pmap_signout which would inturn cleans up the
|
||||||
|
pidfile.
|
||||||
|
|
||||||
|
To avoid such possibilities, a more stricter check on if a brick is
|
||||||
|
running or not in brick multiplexing has been brought in now where it
|
||||||
|
not only checks for its pid's existance but checks if the respective
|
||||||
|
process has the brick instance associated with it before checking for
|
||||||
|
brick's status.
|
||||||
|
|
||||||
|
> Change-Id: I98b92df949076663b9686add7aab4ec2f24ad5ab
|
||||||
|
> Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
> (cherry pick from commit bb9b8f61501cc633e585593de4d9f2fe5494d5ce)
|
||||||
|
> (Reviewed on upstream link https://review.gluster.org/#/c/glusterfs/+/20651/)
|
||||||
|
|
||||||
|
Change-Id: I47b70927c839ca4828a0499006b5c1f604d3d6a4
|
||||||
|
BUG: 1612098
|
||||||
|
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146874
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
Tested-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/mgmt/glusterd/src/glusterd-utils.c | 71 ++++++++++++++++--------------
|
||||||
|
1 file changed, 39 insertions(+), 32 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
index 372d5f4..6f7c787 100644
|
||||||
|
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
@@ -6083,6 +6083,7 @@ glusterd_brick_start (glusterd_volinfo_t *volinfo,
|
||||||
|
char *brickpath = NULL;
|
||||||
|
glusterd_volinfo_t *other_vol;
|
||||||
|
struct statvfs brickstat = {0,};
|
||||||
|
+ gf_boolean_t is_service_running = _gf_false;
|
||||||
|
|
||||||
|
this = THIS;
|
||||||
|
GF_ASSERT (this);
|
||||||
|
@@ -6149,8 +6150,39 @@ glusterd_brick_start (glusterd_volinfo_t *volinfo,
|
||||||
|
brickinfo->path);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- if (gf_is_service_running (pidfile, &pid)) {
|
||||||
|
+ is_service_running = gf_is_service_running (pidfile, &pid);
|
||||||
|
+ if (is_service_running) {
|
||||||
|
+ if (is_brick_mx_enabled ()) {
|
||||||
|
+ brickpath = search_brick_path_from_proc
|
||||||
|
+ (pid, brickinfo->path);
|
||||||
|
+ if (!brickpath) {
|
||||||
|
+ gf_log (this->name, GF_LOG_INFO,
|
||||||
|
+ "Either pid %d is not running or brick"
|
||||||
|
+ " path %s is not consumed so cleanup pidfile",
|
||||||
|
+ pid, brickinfo->path);
|
||||||
|
+ /* brick isn't running,so unlink stale pidfile
|
||||||
|
+ * if any.
|
||||||
|
+ */
|
||||||
|
+ if (sys_access (pidfile , R_OK) == 0) {
|
||||||
|
+ sys_unlink (pidfile);
|
||||||
|
+ }
|
||||||
|
+ goto run;
|
||||||
|
+ }
|
||||||
|
+ GF_FREE (brickpath);
|
||||||
|
+ ret = glusterd_get_sock_from_brick_pid (pid, socketpath,
|
||||||
|
+ sizeof(socketpath));
|
||||||
|
+ if (ret) {
|
||||||
|
+ gf_log (this->name, GF_LOG_INFO,
|
||||||
|
+ "Either pid %d is not running or does "
|
||||||
|
+ "not match with any running brick "
|
||||||
|
+ "processes", pid);
|
||||||
|
+ /* Fetch unix socket is failed so unlink pidfile */
|
||||||
|
+ if (sys_access (pidfile , R_OK) == 0) {
|
||||||
|
+ sys_unlink (pidfile);
|
||||||
|
+ }
|
||||||
|
+ goto run;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
if (brickinfo->status != GF_BRICK_STARTING &&
|
||||||
|
brickinfo->status != GF_BRICK_STARTED) {
|
||||||
|
gf_log (this->name, GF_LOG_INFO,
|
||||||
|
@@ -6168,36 +6200,11 @@ glusterd_brick_start (glusterd_volinfo_t *volinfo,
|
||||||
|
* same port (on another brick) and re-use that.
|
||||||
|
* TBD: re-use RPC connection across bricks
|
||||||
|
*/
|
||||||
|
- if (is_brick_mx_enabled ()) {
|
||||||
|
- brickpath = search_brick_path_from_proc (pid, brickinfo->path);
|
||||||
|
- if (!brickpath) {
|
||||||
|
- gf_log (this->name, GF_LOG_INFO,
|
||||||
|
- "Either pid %d is not running or brick"
|
||||||
|
- " path %s is not consumed so cleanup pidfile",
|
||||||
|
- pid, brickinfo->path);
|
||||||
|
- /* search brick is failed so unlink pidfile */
|
||||||
|
- if (sys_access (pidfile , R_OK) == 0) {
|
||||||
|
- sys_unlink (pidfile);
|
||||||
|
- }
|
||||||
|
- goto run;
|
||||||
|
- }
|
||||||
|
- GF_FREE (brickpath);
|
||||||
|
- ret = glusterd_get_sock_from_brick_pid (pid, socketpath,
|
||||||
|
- sizeof(socketpath));
|
||||||
|
- if (ret) {
|
||||||
|
- gf_log (this->name, GF_LOG_INFO,
|
||||||
|
- "Either pid %d is not running or is not match"
|
||||||
|
- " with any running brick process ", pid);
|
||||||
|
- /* Fetch unix socket is failed so unlink pidfile */
|
||||||
|
- if (sys_access (pidfile , R_OK) == 0) {
|
||||||
|
- sys_unlink (pidfile);
|
||||||
|
- }
|
||||||
|
- goto run;
|
||||||
|
- }
|
||||||
|
- } else {
|
||||||
|
- glusterd_set_brick_socket_filepath (volinfo, brickinfo,
|
||||||
|
- socketpath,
|
||||||
|
- sizeof (socketpath));
|
||||||
|
+ if (!is_brick_mx_enabled ()) {
|
||||||
|
+ glusterd_set_brick_socket_filepath
|
||||||
|
+ (volinfo, brickinfo,
|
||||||
|
+ socketpath,
|
||||||
|
+ sizeof (socketpath));
|
||||||
|
}
|
||||||
|
gf_log (this->name, GF_LOG_DEBUG,
|
||||||
|
"Using %s as sockfile for brick %s of volume %s ",
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From aea891fe38aa75329b84952db2a8aad0e5536cea Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mohit Agrawal <moagrawal@redhat.com>
|
||||||
|
Date: Wed, 8 Aug 2018 08:17:28 +0530
|
||||||
|
Subject: [PATCH 343/351] core: Update condition in get_xlator_by_name_or_type
|
||||||
|
|
||||||
|
Problem: Sometimes client connection is failed after throwing
|
||||||
|
error "cleanup flag is set for xlator Try again later".
|
||||||
|
The situation comes only after get a detach request but
|
||||||
|
the brick stack is not completely detached and at the same time
|
||||||
|
the client initiates a connection with brick
|
||||||
|
|
||||||
|
Solution: To resolve the same check cleanup_starting flag in get
|
||||||
|
xlator_by_name_or_type, this function call by server_setvolume
|
||||||
|
to attach a client with brick.
|
||||||
|
|
||||||
|
> Change-Id: I3720e42642fe495dd05211e2ed2cb976db9e231b
|
||||||
|
> fixes: bz#1614124
|
||||||
|
> (cherry pick from commit a6900e829484435c5bd5d8efe38490cab54ac442)
|
||||||
|
> (Reviewed on upstream link https://review.gluster.org/#/c/glusterfs/+/20657/)
|
||||||
|
|
||||||
|
Change-Id: Id51823148b519f42f762ef716a6434eb2b5f2ffc
|
||||||
|
BUG: 1608352
|
||||||
|
Signed-off-by: Mohit Agrawal <moagrawal@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146848
|
||||||
|
Tested-by: Mohit Agrawal <moagrawa@redhat.com>
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
libglusterfs/src/xlator.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c
|
||||||
|
index 4722800..1cf4a63 100644
|
||||||
|
--- a/libglusterfs/src/xlator.c
|
||||||
|
+++ b/libglusterfs/src/xlator.c
|
||||||
|
@@ -424,7 +424,7 @@ get_xlator_by_name_or_type (xlator_t *this, char *target, int is_name)
|
||||||
|
|
||||||
|
for (trav = this->children; trav; trav = trav->next) {
|
||||||
|
value = is_name ? trav->xlator->name : trav->xlator->type;
|
||||||
|
- if (!strcmp(value, target)) {
|
||||||
|
+ if (!strcmp(value, target) && !trav->xlator->cleanup_starting) {
|
||||||
|
return trav->xlator;
|
||||||
|
}
|
||||||
|
child_xl = get_xlator_by_name_or_type (trav->xlator, target,
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
151
0344-glusterd-Compare-volume_id-before-start-attach-a-bri.patch
Normal file
151
0344-glusterd-Compare-volume_id-before-start-attach-a-bri.patch
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
From 4c7460554f2f7c6515b77e70c878fc15d3813237 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mohit Agrawal <moagrawal@redhat.com>
|
||||||
|
Date: Sat, 4 Aug 2018 12:05:03 +0530
|
||||||
|
Subject: [PATCH 344/351] glusterd: Compare volume_id before start/attach a
|
||||||
|
brick
|
||||||
|
|
||||||
|
Problem: After reboot a node brick is not coming up because
|
||||||
|
fsid comparison is failed before start a brick
|
||||||
|
|
||||||
|
Solution: Instead of comparing fsid compare volume_id to
|
||||||
|
resolve the same because fsid is changed after
|
||||||
|
reboot a node but volume_id persist as a xattr
|
||||||
|
on brick_root path at the time of creating a volume.
|
||||||
|
|
||||||
|
> Change-Id: Ic289aab1b4ebfd83bbcae8438fee26ae61a0fff4
|
||||||
|
> fixes: bz#1612418
|
||||||
|
> (Cherry pick from commit bd8fc26a278697c30537d879ea5402db7ebab577)
|
||||||
|
> (Reviwed on upstream link https://review.gluster.org/#/c/glusterfs/+/20638/)
|
||||||
|
|
||||||
|
Change-Id: Ia183c1d67af662584debcb301171c35be5ac0d9d
|
||||||
|
BUG: 1612098
|
||||||
|
Signed-off-by: Mohit Agrawal <moagrawal@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146835
|
||||||
|
Tested-by: Mohit Agrawal <moagrawa@redhat.com>
|
||||||
|
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||||
|
---
|
||||||
|
tests/{basic => bugs/glusterd}/bug-1595320.t | 9 +++---
|
||||||
|
xlators/mgmt/glusterd/src/glusterd-utils.c | 47 ++++++++++++++++------------
|
||||||
|
2 files changed, 32 insertions(+), 24 deletions(-)
|
||||||
|
rename tests/{basic => bugs/glusterd}/bug-1595320.t (94%)
|
||||||
|
|
||||||
|
diff --git a/tests/basic/bug-1595320.t b/tests/bugs/glusterd/bug-1595320.t
|
||||||
|
similarity index 94%
|
||||||
|
rename from tests/basic/bug-1595320.t
|
||||||
|
rename to tests/bugs/glusterd/bug-1595320.t
|
||||||
|
index 9d856ee..f41df9d 100644
|
||||||
|
--- a/tests/basic/bug-1595320.t
|
||||||
|
+++ b/tests/bugs/glusterd/bug-1595320.t
|
||||||
|
@@ -1,8 +1,8 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
-. $(dirname $0)/../include.rc
|
||||||
|
-. $(dirname $0)/../volume.rc
|
||||||
|
-. $(dirname $0)/../snapshot.rc
|
||||||
|
+. $(dirname $0)/../../include.rc
|
||||||
|
+. $(dirname $0)/../../volume.rc
|
||||||
|
+. $(dirname $0)/../../snapshot.rc
|
||||||
|
|
||||||
|
cleanup
|
||||||
|
|
||||||
|
@@ -52,7 +52,7 @@ EXPECT 0 count_brick_processes
|
||||||
|
|
||||||
|
# Unmount 3rd brick root from node
|
||||||
|
brick_root=$L3
|
||||||
|
-TEST umount -l $brick_root 2>/dev/null
|
||||||
|
+_umount_lv 3
|
||||||
|
|
||||||
|
# Start the volume only 2 brick should be start
|
||||||
|
TEST $CLI volume start $V0 force
|
||||||
|
@@ -70,6 +70,7 @@ n=`ls -lrth /proc/$brick_pid/fd | grep -iw $L3 | grep -v ".glusterfs" | wc -l`
|
||||||
|
TEST [ $n -eq 0 ]
|
||||||
|
|
||||||
|
# Mount the brick root
|
||||||
|
+TEST mkdir -p $brick_root
|
||||||
|
TEST mount -t xfs -o nouuid /dev/test_vg_3/brick_lvm $brick_root
|
||||||
|
|
||||||
|
# Replace brick_pid file to test brick_attach code
|
||||||
|
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
index 6f7c787..1752425 100644
|
||||||
|
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
|
||||||
|
@@ -5439,6 +5439,12 @@ attach_brick_callback (struct rpc_req *req, struct iovec *iov, int count,
|
||||||
|
frame->local = NULL;
|
||||||
|
frame->cookie = NULL;
|
||||||
|
|
||||||
|
+ if (!iov) {
|
||||||
|
+ gf_log (frame->this->name, GF_LOG_ERROR, "iov is NULL");
|
||||||
|
+ ret = -1;
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
ret = xdr_to_generic (*iov, &rsp, (xdrproc_t)xdr_gf_getspec_rsp);
|
||||||
|
if (ret < 0) {
|
||||||
|
gf_log (frame->this->name, GF_LOG_ERROR, "XDR decoding error");
|
||||||
|
@@ -6073,17 +6079,19 @@ glusterd_brick_start (glusterd_volinfo_t *volinfo,
|
||||||
|
gf_boolean_t wait,
|
||||||
|
gf_boolean_t only_connect)
|
||||||
|
{
|
||||||
|
- int ret = -1;
|
||||||
|
+ int ret = -1;
|
||||||
|
xlator_t *this = NULL;
|
||||||
|
glusterd_brickinfo_t *other_brick;
|
||||||
|
glusterd_conf_t *conf = NULL;
|
||||||
|
- int32_t pid = -1;
|
||||||
|
- char pidfile[PATH_MAX] = {0};
|
||||||
|
- char socketpath[PATH_MAX] = {0};
|
||||||
|
- char *brickpath = NULL;
|
||||||
|
+ int32_t pid = -1;
|
||||||
|
+ char pidfile[PATH_MAX] = {0};
|
||||||
|
+ char socketpath[PATH_MAX] = {0};
|
||||||
|
+ char *brickpath = NULL;
|
||||||
|
glusterd_volinfo_t *other_vol;
|
||||||
|
- struct statvfs brickstat = {0,};
|
||||||
|
gf_boolean_t is_service_running = _gf_false;
|
||||||
|
+ uuid_t volid = {0,};
|
||||||
|
+ ssize_t size = -1;
|
||||||
|
+
|
||||||
|
|
||||||
|
this = THIS;
|
||||||
|
GF_ASSERT (this);
|
||||||
|
@@ -6130,24 +6138,23 @@ glusterd_brick_start (glusterd_volinfo_t *volinfo,
|
||||||
|
|
||||||
|
GLUSTERD_GET_BRICK_PIDFILE (pidfile, volinfo, brickinfo, conf);
|
||||||
|
|
||||||
|
- ret = sys_statvfs (brickinfo->path, &brickstat);
|
||||||
|
- if (ret) {
|
||||||
|
- gf_msg (this->name, GF_LOG_ERROR,
|
||||||
|
- errno, GD_MSG_BRICKINFO_CREATE_FAIL,
|
||||||
|
- "failed to get statfs() call on brick %s",
|
||||||
|
- brickinfo->path);
|
||||||
|
+ /* Compare volume-id xattr is helpful to ensure the existence of a brick_root
|
||||||
|
+ path before the start/attach a brick
|
||||||
|
+ */
|
||||||
|
+ size = sys_lgetxattr (brickinfo->path, GF_XATTR_VOL_ID_KEY, volid, 16);
|
||||||
|
+ if (size != 16) {
|
||||||
|
+ gf_log (this->name, GF_LOG_ERROR,
|
||||||
|
+ "Missing %s extended attribute on brick root (%s),"
|
||||||
|
+ " brick is deemed not to be a part of the volume (%s) ",
|
||||||
|
+ GF_XATTR_VOL_ID_KEY, brickinfo->path, volinfo->volname);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Compare fsid is helpful to ensure the existence of a brick_root
|
||||||
|
- path before the start/attach a brick
|
||||||
|
- */
|
||||||
|
- if (brickinfo->statfs_fsid &&
|
||||||
|
- (brickinfo->statfs_fsid != brickstat.f_fsid)) {
|
||||||
|
+ if (strncmp (uuid_utoa (volinfo->volume_id), uuid_utoa(volid), GF_UUID_BUF_SIZE)) {
|
||||||
|
gf_log (this->name, GF_LOG_ERROR,
|
||||||
|
- "fsid comparison is failed it means Brick root path"
|
||||||
|
- " %s is not created by glusterd, start/attach will also fail",
|
||||||
|
- brickinfo->path);
|
||||||
|
+ "Mismatching %s extended attribute on brick root (%s),"
|
||||||
|
+ " brick is deemed not to be a part of the volume (%s)",
|
||||||
|
+ GF_XATTR_VOL_ID_KEY, brickinfo->path, volinfo->volname);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
is_service_running = gf_is_service_running (pidfile, &pid);
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
126
0345-io-stats-allow-only-relative-path-for-dumping-io-sta.patch
Normal file
126
0345-io-stats-allow-only-relative-path-for-dumping-io-sta.patch
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
From 37132b4ea02a57056a426e04e77defb28e447ff9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Date: Tue, 24 Jul 2018 15:42:28 +0530
|
||||||
|
Subject: [PATCH 345/351] io-stats: allow only relative path for dumping
|
||||||
|
io-stats info
|
||||||
|
|
||||||
|
It wouldn't make sense to allow iostats file to be written in
|
||||||
|
*any* directory. While the formating makes sure we try to append
|
||||||
|
io-stats-name for the file, so overwriting existing file is slim,
|
||||||
|
it makes sense to restrict dumping to one directory.
|
||||||
|
|
||||||
|
BUG: 1605086
|
||||||
|
Change-Id: Ie28b6a355de574d8d3855c8654d6756ef0389055
|
||||||
|
Signed-off-by: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/145898
|
||||||
|
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
tests/bugs/core/io-stats-1322825.t | 12 ++++++------
|
||||||
|
xlators/debug/io-stats/src/io-stats.c | 29 ++++++++++++++++++++++-------
|
||||||
|
2 files changed, 28 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tests/bugs/core/io-stats-1322825.t b/tests/bugs/core/io-stats-1322825.t
|
||||||
|
index d232ecb..53f2d04 100755
|
||||||
|
--- a/tests/bugs/core/io-stats-1322825.t
|
||||||
|
+++ b/tests/bugs/core/io-stats-1322825.t
|
||||||
|
@@ -23,7 +23,7 @@ TEST $CLI volume profile $V0 start
|
||||||
|
TEST mkdir $M0/dir1
|
||||||
|
|
||||||
|
# Generate the stat dump across the io-stat instances
|
||||||
|
-TEST setfattr -n trusted.io-stats-dump -v /tmp/io-stats-1322825 $M0
|
||||||
|
+TEST setfattr -n trusted.io-stats-dump -v io-stats-1322825 $M0
|
||||||
|
|
||||||
|
# Check if $M0 is clean w.r.t xattr information
|
||||||
|
# TODO: if there are better ways to check we really get no attr error, please
|
||||||
|
@@ -42,12 +42,12 @@ ret=$(echo $?)
|
||||||
|
EXPECT 0 echo $ret
|
||||||
|
|
||||||
|
# Check if we have 5 io-stat files in /tmp
|
||||||
|
-EXPECT 5 ls -1 /tmp/io-stats-1322825*
|
||||||
|
+EXPECT 5 ls -1 /var/run/gluster/io-stats-1322825*
|
||||||
|
# Cleanup the 5 generated files
|
||||||
|
-rm -f /tmp/io-stats-1322825*
|
||||||
|
+rm -f /var/run/gluster/io-stats-1322825*
|
||||||
|
|
||||||
|
# Rinse and repeat above for a directory
|
||||||
|
-TEST setfattr -n trusted.io-stats-dump -v /tmp/io-stats-1322825 $M0/dir1
|
||||||
|
+TEST setfattr -n trusted.io-stats-dump -v io-stats-1322825 $M0/dir1
|
||||||
|
getfattr -n trusted.io-stats-dump $B0/${V0}1/dir1 2>&1 | grep -qi "no such attribute"
|
||||||
|
ret=$(echo $?)
|
||||||
|
EXPECT 0 echo $ret
|
||||||
|
@@ -61,7 +61,7 @@ getfattr -n trusted.io-stats-dump $B0/${V0}4/dir1 2>&1 | grep -qi "no such attri
|
||||||
|
ret=$(echo $?)
|
||||||
|
EXPECT 0 echo $ret
|
||||||
|
|
||||||
|
-EXPECT 5 ls -1 /tmp/io-stats-1322825*
|
||||||
|
-rm -f /tmp/io-stats-1322825*
|
||||||
|
+EXPECT 5 ls -1 /var/run/gluster/io-stats-1322825*
|
||||||
|
+rm -f /var/run/gluster/io-stats-1322825*
|
||||||
|
|
||||||
|
cleanup;
|
||||||
|
diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c
|
||||||
|
index f46474b..868890f 100644
|
||||||
|
--- a/xlators/debug/io-stats/src/io-stats.c
|
||||||
|
+++ b/xlators/debug/io-stats/src/io-stats.c
|
||||||
|
@@ -45,6 +45,8 @@
|
||||||
|
#define DEFAULT_GRP_BUF_SZ 16384
|
||||||
|
#define IOS_BLOCK_COUNT_SIZE 32
|
||||||
|
|
||||||
|
+#define IOS_STATS_DUMP_DIR DEFAULT_VAR_RUN_DIRECTORY
|
||||||
|
+
|
||||||
|
typedef enum {
|
||||||
|
IOS_STATS_TYPE_NONE,
|
||||||
|
IOS_STATS_TYPE_OPEN,
|
||||||
|
@@ -3000,7 +3002,6 @@ io_stats_fsync (call_frame_t *frame, xlator_t *this,
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-
|
||||||
|
int
|
||||||
|
conditional_dump (dict_t *dict, char *key, data_t *value, void *data)
|
||||||
|
{
|
||||||
|
@@ -3016,6 +3017,7 @@ conditional_dump (dict_t *dict, char *key, data_t *value, void *data)
|
||||||
|
int pid, namelen;
|
||||||
|
char dump_key[100];
|
||||||
|
char *slash_ptr = NULL;
|
||||||
|
+ char *path_in_value = NULL;
|
||||||
|
|
||||||
|
stub = data;
|
||||||
|
this = stub->this;
|
||||||
|
@@ -3024,13 +3026,26 @@ conditional_dump (dict_t *dict, char *key, data_t *value, void *data)
|
||||||
|
name as well. This helps when there is more than a single io-stats
|
||||||
|
instance in the graph, or the client and server processes are running
|
||||||
|
on the same node */
|
||||||
|
- /* hmmm... no check for this */
|
||||||
|
- /* name format: <passed in path/filename>.<xlator name slashes to -> */
|
||||||
|
- namelen = value->len + strlen (this->name) + 2; /* '.' and '\0' */
|
||||||
|
+ /* For the sanity of where the file should be located, we should make
|
||||||
|
+ sure file is written only inside RUNDIR (ie, /var/run/gluster) */
|
||||||
|
+ /* TODO: provide an option to dump it to different directory of
|
||||||
|
+ choice, based on options */
|
||||||
|
+ /* name format: /var/run/gluster/<passed in path/filename>.<xlator name slashes to -> */
|
||||||
|
+
|
||||||
|
+ path_in_value = data_to_str (value);
|
||||||
|
+
|
||||||
|
+ if (strstr (path_in_value, "../")) {
|
||||||
|
+ gf_log (this->name, GF_LOG_ERROR,
|
||||||
|
+ "%s: no \"../\" allowed in path", path_in_value);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+ namelen = (strlen (IOS_STATS_DUMP_DIR) + value->len +
|
||||||
|
+ strlen (this->name) + 2); /* '.' and '\0' */
|
||||||
|
+
|
||||||
|
filename = alloca0 (namelen);
|
||||||
|
- memcpy (filename, data_to_str (value), value->len);
|
||||||
|
- memcpy (filename + value->len, ".", 1);
|
||||||
|
- memcpy (filename + value->len + 1, this->name, strlen(this->name));
|
||||||
|
+
|
||||||
|
+ snprintf (filename, namelen, "%s%s.%s", IOS_STATS_DUMP_DIR,
|
||||||
|
+ path_in_value, this->name);
|
||||||
|
|
||||||
|
/* convert any slashes to '-' so that fopen works correctly */
|
||||||
|
slash_ptr = strchr (filename + value->len + 1, '/');
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
67
0346-gfapi-Handle-the-path-glfs_resolve_at.patch
Normal file
67
0346-gfapi-Handle-the-path-glfs_resolve_at.patch
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
From 2489f91d395740b42f21322744ab64427e94a683 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jiffin Tony Thottan <jthottan@redhat.com>
|
||||||
|
Date: Tue, 31 Jul 2018 14:52:51 +0530
|
||||||
|
Subject: [PATCH 346/351] gfapi : Handle the path == "" glfs_resolve_at
|
||||||
|
|
||||||
|
Currently there is no check for path = "" in glfs_resolve_at.
|
||||||
|
So if application sends an empty path, then the function resolves
|
||||||
|
into the parent inode which is incorrect. Plus modified possible
|
||||||
|
of "path" with "origpath" in the same function.
|
||||||
|
|
||||||
|
Upstream reference
|
||||||
|
>Change-Id: Ie5ff9ce4b771607b7dbb3fe00704fe670421792a
|
||||||
|
>fixes: bz#1610236
|
||||||
|
>Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
|
||||||
|
>link : https://review.gluster.org/#/c/glusterfs/+/20594/
|
||||||
|
|
||||||
|
Change-Id: Ie5ff9ce4b771607b7dbb3fe00704fe670421792a
|
||||||
|
Signed-off-by: Jiffin Tony Thottan <jthottan@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146938
|
||||||
|
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||||
|
---
|
||||||
|
api/src/glfs-resolve.c | 17 ++++++++++-------
|
||||||
|
1 file changed, 10 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/api/src/glfs-resolve.c b/api/src/glfs-resolve.c
|
||||||
|
index 76835cb..95fe67a 100644
|
||||||
|
--- a/api/src/glfs-resolve.c
|
||||||
|
+++ b/api/src/glfs-resolve.c
|
||||||
|
@@ -472,14 +472,13 @@ priv_glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at,
|
||||||
|
DECLARE_OLD_THIS;
|
||||||
|
__GLFS_ENTRY_VALIDATE_FS(fs, invalid_fs);
|
||||||
|
|
||||||
|
- path = gf_strdup (origpath);
|
||||||
|
- if (!path) {
|
||||||
|
- errno = ENOMEM;
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
+ if (origpath[0] == '\0') {
|
||||||
|
+ errno = EINVAL;
|
||||||
|
+ goto invalid_fs;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
parent = NULL;
|
||||||
|
- if (at && path[0] != '/') {
|
||||||
|
+ if (at && origpath[0] != '/') {
|
||||||
|
/* A relative resolution of a path which starts with '/'
|
||||||
|
is equal to an absolute path resolution.
|
||||||
|
*/
|
||||||
|
@@ -487,10 +486,14 @@ priv_glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at,
|
||||||
|
} else {
|
||||||
|
inode = inode_ref (subvol->itable->root);
|
||||||
|
|
||||||
|
- if (strcmp (path, "/") == 0)
|
||||||
|
+ if (strcmp (origpath, "/") == 0)
|
||||||
|
glfs_resolve_root (fs, subvol, inode, &ciatt);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ path = gf_strdup (origpath);
|
||||||
|
+ if (!path)
|
||||||
|
+ goto invalid_fs;
|
||||||
|
+
|
||||||
|
for (component = strtok_r (path, "/", &saveptr);
|
||||||
|
component; component = next_component) {
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
30
0347-posix-fix-unused-variable-warning.patch
Normal file
30
0347-posix-fix-unused-variable-warning.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
From bb613405be0392269bb661e6f24338c2c664d21d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Date: Tue, 14 Aug 2018 13:37:05 +0530
|
||||||
|
Subject: [PATCH 347/351] posix: fix unused variable warning
|
||||||
|
|
||||||
|
Change-Id: I42ece5c8903f5af7b5a4d6b7ab10516f987327c9
|
||||||
|
BUG: 1608363
|
||||||
|
Signed-off-by: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146964
|
||||||
|
Tested-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/storage/posix/src/posix.c | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
|
||||||
|
index 5c6e103..49b272f 100644
|
||||||
|
--- a/xlators/storage/posix/src/posix.c
|
||||||
|
+++ b/xlators/storage/posix/src/posix.c
|
||||||
|
@@ -4680,7 +4680,6 @@ posix_getxattr (call_frame_t *frame, xlator_t *this,
|
||||||
|
char *value = NULL;
|
||||||
|
char *real_path = NULL;
|
||||||
|
dict_t *dict = NULL;
|
||||||
|
- char *file_contents = NULL;
|
||||||
|
int ret = -1;
|
||||||
|
char *path = NULL;
|
||||||
|
char *rpath = NULL;
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
50
0348-posix-disable-block-and-character-files.patch
Normal file
50
0348-posix-disable-block-and-character-files.patch
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
From d542543faf4eca04737ddfe215e8988a700caf42 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Date: Thu, 9 Aug 2018 10:17:56 +0530
|
||||||
|
Subject: [PATCH 348/351] posix: disable block and character files
|
||||||
|
|
||||||
|
The special files (block and character) needn't be supported on
|
||||||
|
n/w filesystem. As each of these files are used closely with the
|
||||||
|
host machine, instead of client data, we would be tied to server.
|
||||||
|
|
||||||
|
BUG: 1610966
|
||||||
|
Change-Id: Id65f1a6c51876a84c56cf691bb44a3e85ae73d70
|
||||||
|
Signed-off-by: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146526
|
||||||
|
Reviewed-by: FNU Raghavendra Manjunath <raghavendra@redhat.com>
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/storage/posix/src/posix.c | 17 +++++++++++++++++
|
||||||
|
1 file changed, 17 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
|
||||||
|
index 49b272f..28d2e6f 100644
|
||||||
|
--- a/xlators/storage/posix/src/posix.c
|
||||||
|
+++ b/xlators/storage/posix/src/posix.c
|
||||||
|
@@ -1452,6 +1452,23 @@ posix_mknod (call_frame_t *frame, xlator_t *this,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+ if (((mode & S_IFMT) == S_IFBLK) || ((mode & S_IFMT) == S_IFCHR)) {
|
||||||
|
+ /* Man page 'man 2 mknod':
|
||||||
|
+ EPERM mode requested creation of something other than
|
||||||
|
+ a regular file, FIFO (named pipe), or UNIX domain socket,
|
||||||
|
+ and the caller is not privileged (Linux: does not have the
|
||||||
|
+ CAP_MKNOD capability); also returned if the filesystem
|
||||||
|
+ containing pathname does not support the type of node
|
||||||
|
+ requested.
|
||||||
|
+ */
|
||||||
|
+ op_ret = -1;
|
||||||
|
+ op_errno = EPERM;
|
||||||
|
+ gf_msg (this->name, GF_LOG_ERROR, op_errno, P_MSG_MKNOD_FAILED,
|
||||||
|
+ "%s: mknod failed as Block and Character devices "
|
||||||
|
+ "are not supported on GlusterFS", real_path);
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
op_ret = posix_pstat (this, loc->pargfid, par_path, &preparent);
|
||||||
|
if (op_ret == -1) {
|
||||||
|
op_errno = errno;
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
65
0349-posix-don-t-allow-.-path-in-name.patch
Normal file
65
0349-posix-don-t-allow-.-path-in-name.patch
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
From 11ae607a1c958f166e689bacf00acbae989c4d8e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Date: Thu, 9 Aug 2018 13:00:01 +0530
|
||||||
|
Subject: [PATCH 349/351] posix: don't allow '../' path in 'name'
|
||||||
|
|
||||||
|
This will prevent any arbitrary file creation through glusterfs
|
||||||
|
by modifying the client bits.
|
||||||
|
|
||||||
|
BUG: 1613686
|
||||||
|
BUG: 1613685
|
||||||
|
BUG: 1613684
|
||||||
|
|
||||||
|
Change-Id: I6def64956d9e5541e7f70a8910a4d6ce4bde61e9
|
||||||
|
Signed-off-by: Amar Tumballi <amarts@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146548
|
||||||
|
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
|
||||||
|
Reviewed-by: Nithya Balachandran <nbalacha@redhat.com>
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/protocol/server/src/server-resolve.c | 12 ++++++++++++
|
||||||
|
xlators/storage/posix/src/posix-handle.h | 5 +++++
|
||||||
|
2 files changed, 17 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/xlators/protocol/server/src/server-resolve.c b/xlators/protocol/server/src/server-resolve.c
|
||||||
|
index 6ffb909..b3eda0e 100644
|
||||||
|
--- a/xlators/protocol/server/src/server-resolve.c
|
||||||
|
+++ b/xlators/protocol/server/src/server-resolve.c
|
||||||
|
@@ -311,6 +311,18 @@ resolve_entry_simple (call_frame_t *frame)
|
||||||
|
/* expected @parent was found from the inode cache */
|
||||||
|
gf_uuid_copy (state->loc_now->pargfid, resolve->pargfid);
|
||||||
|
state->loc_now->parent = inode_ref (parent);
|
||||||
|
+
|
||||||
|
+ if (strstr (resolve->bname, "../")) {
|
||||||
|
+ /* Resolving outside the parent's tree is not allowed */
|
||||||
|
+ gf_msg (this->name, GF_LOG_ERROR, EPERM,
|
||||||
|
+ PS_MSG_GFID_RESOLVE_FAILED,
|
||||||
|
+ "%s: path sent by client not allowed",
|
||||||
|
+ resolve->bname);
|
||||||
|
+ resolve->op_ret = -1;
|
||||||
|
+ resolve->op_errno = EPERM;
|
||||||
|
+ ret = 1;
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
state->loc_now->name = resolve->bname;
|
||||||
|
|
||||||
|
inode = inode_grep (state->itable, parent, resolve->bname);
|
||||||
|
diff --git a/xlators/storage/posix/src/posix-handle.h b/xlators/storage/posix/src/posix-handle.h
|
||||||
|
index cb1f84e..a0f82ec 100644
|
||||||
|
--- a/xlators/storage/posix/src/posix-handle.h
|
||||||
|
+++ b/xlators/storage/posix/src/posix-handle.h
|
||||||
|
@@ -223,6 +223,11 @@
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
+ if (strstr (loc->name, "../")) { \
|
||||||
|
+ gf_msg (this->name, GF_LOG_ERROR, 0, P_MSG_ENTRY_HANDLE_CREATE, \
|
||||||
|
+ "'../' in name not allowed: (%s)", loc->name); \
|
||||||
|
+ break; \
|
||||||
|
+ } \
|
||||||
|
if (LOC_HAS_ABSPATH (loc)) { \
|
||||||
|
MAKE_REAL_PATH (entp, this, loc->path); \
|
||||||
|
__parp = strdupa (entp); \
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,99 @@
|
|||||||
|
From 59fafc2b918846cc59daac107981211fa1568335 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Susant Palai <spalai@redhat.com>
|
||||||
|
Date: Mon, 6 Aug 2018 15:02:58 +0530
|
||||||
|
Subject: [PATCH 350/351] cluster/dht: fix inode ref management in
|
||||||
|
dht_heal_path
|
||||||
|
|
||||||
|
In dht_heal_path, the inodes are created & looked up from top to down.
|
||||||
|
|
||||||
|
If the path is "a/b/c", then lookup will be done on a, then b and so
|
||||||
|
on. Here is a rough snippet of the function "dht_heal_path".
|
||||||
|
|
||||||
|
<snippet>
|
||||||
|
if (bname) { ref_count
|
||||||
|
- loc.inode = create/grep inode 1
|
||||||
|
- syncop_lookup (loc.inode)
|
||||||
|
- linked_inode = inode_link (loc.inode) 2
|
||||||
|
/*clean up current loc*/
|
||||||
|
- loc_wipe(&loc) 1
|
||||||
|
/*set up parent and bname for next child */
|
||||||
|
- loc.parent = inode
|
||||||
|
- bname = next_child_name
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
- inode_ref (linked_inode) 2
|
||||||
|
- loc_wipe (&loc) 1
|
||||||
|
</snippet>
|
||||||
|
|
||||||
|
The problem with the above code is if _bname_ is empty ie the chain lookup is
|
||||||
|
done, then for the next iteration we populate loc.parent anyway. Now that
|
||||||
|
bname is empty, the loc_wipe is done in the _out_ section as well. Since, the
|
||||||
|
loc.parent was set to the previous inode, we lose a ref unwantedly. Now a
|
||||||
|
dht_local_wipe as part of the DHT_STACK_UNWIND takes away the last ref leading
|
||||||
|
to inode_destroy.
|
||||||
|
|
||||||
|
This problenm is observed currently with nfs-ganesha with the nameless lookup.
|
||||||
|
Post the inode_purge, gfapi does not get the new inode to link and hence, it links
|
||||||
|
the inode it sent in the lookup fop, which does not have any dht related context
|
||||||
|
(layout) leading to "invalid argument error" in lookup path done parallely with tar
|
||||||
|
operation.
|
||||||
|
|
||||||
|
test done in the following way:
|
||||||
|
- create two nfs client connected with two different nfs servers.
|
||||||
|
- run untar on one client and run lookup continuously on the other.
|
||||||
|
- Prior to this patch, invalid arguement was seen which is fixed with
|
||||||
|
the current patch.
|
||||||
|
|
||||||
|
> Change-Id: Ifb90c178a2f3c16604068c7da8fa562b877f5c61
|
||||||
|
> fixes: bz#1610256
|
||||||
|
> Signed-off-by: Susant Palai <spalai@redhat.com>
|
||||||
|
(backport of https://review.gluster.org/#/c/glusterfs/+/20643/)
|
||||||
|
|
||||||
|
Fixes: bz#1569657
|
||||||
|
Change-Id: I94329f2d148c31fe85a8753256e7aaf1d4d337ac
|
||||||
|
BUG: 1569657
|
||||||
|
Signed-off-by: Susant Palai <spalai@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/146966
|
||||||
|
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||||
|
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/cluster/dht/src/dht-helper.c | 9 +++++++--
|
||||||
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c
|
||||||
|
index 09ca966..d35d7e8 100644
|
||||||
|
--- a/xlators/cluster/dht/src/dht-helper.c
|
||||||
|
+++ b/xlators/cluster/dht/src/dht-helper.c
|
||||||
|
@@ -1974,12 +1974,16 @@ dht_heal_path (xlator_t *this, char *path, inode_table_t *itable)
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Inode is already populated in the inode table.
|
||||||
|
- * Which means we already looked up the inde and
|
||||||
|
+ * Which means we already looked up the inode and
|
||||||
|
* linked with a dentry. So that we will skip
|
||||||
|
* lookup on this entry, and proceed to next.
|
||||||
|
*/
|
||||||
|
+ linked_inode = loc.inode;
|
||||||
|
bname = strtok_r (NULL, "/", &save_ptr);
|
||||||
|
inode_unref (loc.parent);
|
||||||
|
+ if (!bname) {
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
loc.parent = loc.inode;
|
||||||
|
gf_uuid_copy (loc.pargfid, loc.inode->gfid);
|
||||||
|
loc.inode = NULL;
|
||||||
|
@@ -2005,9 +2009,10 @@ dht_heal_path (xlator_t *this, char *path, inode_table_t *itable)
|
||||||
|
loc_wipe (&loc);
|
||||||
|
gf_uuid_copy (loc.pargfid, linked_inode->gfid);
|
||||||
|
loc.inode = NULL;
|
||||||
|
- loc.parent = linked_inode;
|
||||||
|
|
||||||
|
bname = strtok_r (NULL, "/", &save_ptr);
|
||||||
|
+ if (bname)
|
||||||
|
+ loc.parent = linked_inode;
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
inode_ref (linked_inode);
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
40
0351-cluster-dht-Fixed-rebalanced-files.patch
Normal file
40
0351-cluster-dht-Fixed-rebalanced-files.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
From 72729dfb7c320880980eca6b2f0139658f259788 Mon Sep 17 00:00:00 2001
|
||||||
|
From: N Balachandran <nbalacha@redhat.com>
|
||||||
|
Date: Mon, 13 Aug 2018 22:17:17 +0530
|
||||||
|
Subject: [PATCH 351/351] cluster/dht: Fixed rebalanced files
|
||||||
|
|
||||||
|
An error caused skipped files to be counted as
|
||||||
|
rebalanced files.
|
||||||
|
|
||||||
|
Upstream patch: https://review.gluster.org/#/c/glusterfs/+/20724/
|
||||||
|
|
||||||
|
> Change-Id: I02333f099fb8b73ba953f41a2922021a1e4da7be
|
||||||
|
> fixes: bz#1615474
|
||||||
|
> Signed-off-by: N Balachandran <nbalacha@redhat.com>
|
||||||
|
|
||||||
|
Change-Id: I6921f92c4a784c51833ade8e1cde4744c0fd0d00
|
||||||
|
BUG: 1615338
|
||||||
|
Signed-off-by: N Balachandran <nbalacha@redhat.com>
|
||||||
|
Reviewed-on: https://code.engineering.redhat.com/gerrit/147007
|
||||||
|
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||||
|
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||||
|
---
|
||||||
|
xlators/cluster/dht/src/dht-rebalance.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
|
||||||
|
index b9078e0..d0f49d2 100644
|
||||||
|
--- a/xlators/cluster/dht/src/dht-rebalance.c
|
||||||
|
+++ b/xlators/cluster/dht/src/dht-rebalance.c
|
||||||
|
@@ -2841,7 +2841,7 @@ gf_defrag_migrate_single_file (void *opaque)
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = 0;
|
||||||
|
-
|
||||||
|
+ goto out;
|
||||||
|
} else if (ret < 0) {
|
||||||
|
if (fop_errno != EEXIST) {
|
||||||
|
gf_msg (this->name, GF_LOG_ERROR, fop_errno,
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -192,7 +192,7 @@ Release: 0.1%{?prereltag:.%{prereltag}}%{?dist}
|
|||||||
%else
|
%else
|
||||||
Name: glusterfs
|
Name: glusterfs
|
||||||
Version: 3.12.2
|
Version: 3.12.2
|
||||||
Release: 15%{?dist}
|
Release: 16%{?dist}
|
||||||
%endif
|
%endif
|
||||||
License: GPLv2 or LGPLv3+
|
License: GPLv2 or LGPLv3+
|
||||||
Group: System Environment/Base
|
Group: System Environment/Base
|
||||||
@ -598,6 +598,24 @@ Patch0330: 0330-posix-check-before-removing-stale-symlink.patch
|
|||||||
Patch0331: 0331-rpc-free-registered-callback-programs.patch
|
Patch0331: 0331-rpc-free-registered-callback-programs.patch
|
||||||
Patch0332: 0332-rpc-rpc_clnt_connection_cleanup-is-crashed-due-to-do.patch
|
Patch0332: 0332-rpc-rpc_clnt_connection_cleanup-is-crashed-due-to-do.patch
|
||||||
Patch0333: 0333-glusterd-Add-multiple-checks-before-attach-start-a-b.patch
|
Patch0333: 0333-glusterd-Add-multiple-checks-before-attach-start-a-b.patch
|
||||||
|
Patch0334: 0334-glusterd-Bricks-of-a-normal-volumes-should-not-attac.patch
|
||||||
|
Patch0335: 0335-cluster-ec-set-others.eager-lock-option-off-by-defau.patch
|
||||||
|
Patch0336: 0336-dict-handle-negative-key-value-length-while-unserial.patch
|
||||||
|
Patch0337: 0337-glusterfs-Brick-process-is-crash-at-the-time-of-call.patch
|
||||||
|
Patch0338: 0338-posix-prevent-crash-when-SEEK_DATA-HOLE-is-not-suppo.patch
|
||||||
|
Patch0339: 0339-posix-remove-not-supported-get-set-content.patch
|
||||||
|
Patch0340: 0340-protocol-don-t-use-alloca.patch
|
||||||
|
Patch0341: 0341-Revert-glusterd-enable-brick-multiplexing-by-default.patch
|
||||||
|
Patch0342: 0342-glusterd-more-stricter-checks-of-if-brick-is-running.patch
|
||||||
|
Patch0343: 0343-core-Update-condition-in-get_xlator_by_name_or_type.patch
|
||||||
|
Patch0344: 0344-glusterd-Compare-volume_id-before-start-attach-a-bri.patch
|
||||||
|
Patch0345: 0345-io-stats-allow-only-relative-path-for-dumping-io-sta.patch
|
||||||
|
Patch0346: 0346-gfapi-Handle-the-path-glfs_resolve_at.patch
|
||||||
|
Patch0347: 0347-posix-fix-unused-variable-warning.patch
|
||||||
|
Patch0348: 0348-posix-disable-block-and-character-files.patch
|
||||||
|
Patch0349: 0349-posix-don-t-allow-.-path-in-name.patch
|
||||||
|
Patch0350: 0350-cluster-dht-fix-inode-ref-management-in-dht_heal_pat.patch
|
||||||
|
Patch0351: 0351-cluster-dht-Fixed-rebalanced-files.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
GlusterFS is a distributed file-system capable of scaling to several
|
GlusterFS is a distributed file-system capable of scaling to several
|
||||||
@ -2546,6 +2564,10 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Aug 14 2018 Milind Changire <mchangir@redhat.com> - 3.12.2-16
|
||||||
|
- fixes bugs bz#1569657 bz#1608352 bz#1609163 bz#1609724 bz#1610825
|
||||||
|
bz#1611151 bz#1612098 bz#1615338 bz#1615440
|
||||||
|
|
||||||
* Fri Jul 27 2018 Milind Changire <mchangir@redhat.com> - 3.12.2-15
|
* Fri Jul 27 2018 Milind Changire <mchangir@redhat.com> - 3.12.2-15
|
||||||
- fixes bugs bz#1589279 bz#1598384 bz#1599362 bz#1599998 bz#1600790
|
- fixes bugs bz#1589279 bz#1598384 bz#1599362 bz#1599998 bz#1600790
|
||||||
bz#1601331 bz#1603103
|
bz#1601331 bz#1603103
|
||||||
|
Loading…
Reference in New Issue
Block a user