[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Mon Nov 2 21:41:06 UTC 2020
The branch, master has been updated
via 2a49ccbcf5e s3-vfs_glusterfs: refuse connection when write-behind xlator is present
via 08f8f665d40 docs-xml/manpages: Add warning about write-behind translator for vfs_glusterfs
from 4bf010309cd selftest: Drop dummy environment variables for CTDB daemons
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 2a49ccbcf5e3ff0f6833bcb7f04b800125f1783f
Author: Günther Deschner <gd at samba.org>
Date: Mon Nov 2 12:30:36 2020 +0100
s3-vfs_glusterfs: refuse connection when write-behind xlator is present
s3-vfs_glusterfs: refuse connection when write-behind xlator is present
Once the new glusterfs api is available we will programmtically disable
the translator, for now we just refuse the connection as there is
a potential for serious data damage.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14486
Guenther
Signed-off-by: Guenther Deschner <gd at samba.org>
Pair-Programmed-With: Sachin Prabhu <sprabhu at redhat.com>
Pair-Programmed-With: Anoop C S <anoopcs at samba.org>
Reviewed-by: Jeremy Allison <jra at samba.org>
Autobuild-User(master): Jeremy Allison <jra at samba.org>
Autobuild-Date(master): Mon Nov 2 21:40:33 UTC 2020 on sn-devel-184
commit 08f8f665d409ee7b93840c25a8142f2ce8bacfa1
Author: Sachin Prabhu <sprabhu at redhat.com>
Date: Thu Oct 15 12:14:33 2020 +0100
docs-xml/manpages: Add warning about write-behind translator for vfs_glusterfs
Add warning about data corruption with the write-behind translator.
The data corruption is highlighted by the smbtorture test smb2.rw.rw1.
More information about this data corruption issue is available in the
bz.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14486
Signed-off-by: Sachin Prabhu <sprabhu at redhat.com>
Reviewed-by: Jeremy Allison <jra at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
-----------------------------------------------------------------------
Summary of changes:
docs-xml/manpages/vfs_glusterfs.8.xml | 22 +++++++++
source3/modules/vfs_glusterfs.c | 89 +++++++++++++++++++++++++++++++++++
2 files changed, 111 insertions(+)
Changeset truncated at 500 lines:
diff --git a/docs-xml/manpages/vfs_glusterfs.8.xml b/docs-xml/manpages/vfs_glusterfs.8.xml
index cf3b8e5e384..7a4da1af919 100644
--- a/docs-xml/manpages/vfs_glusterfs.8.xml
+++ b/docs-xml/manpages/vfs_glusterfs.8.xml
@@ -161,6 +161,28 @@
</refsect1>
+<refsect1>
+ <title>CAVEATS</title>
+
+ <para>
+ The GlusterFS write-behind performance translator, when used
+ with Samba, could be a source of data corruption. The
+ translator, while processing a write call, immediately returns
+ success but continues writing the data to the server in the
+ background. This can cause data corruption when two clients
+ relying on Samba to provide data consistency are operating on
+ the same file.
+ </para>
+ <para>
+ The write-behind translator is enabled by default on GlusterFS.
+ The vfs_glusterfs plugin will check for the presence of the
+ translator and refuse to connect if detected.
+ Please disable the write-behind translator for the GlusterFS
+ volume to allow the plugin to connect to the volume.
+ </para>
+</refsect1>
+
+
<refsect1>
<title>VERSION</title>
diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c
index ca8b54829cd..eea5b30e327 100644
--- a/source3/modules/vfs_glusterfs.c
+++ b/source3/modules/vfs_glusterfs.c
@@ -264,6 +264,90 @@ out:
/* Disk Operations */
+static int check_for_write_behind_translator(TALLOC_CTX *mem_ctx,
+ glfs_t *fs,
+ const char *volume)
+{
+ char *buf = NULL;
+ char **lines = NULL;
+ int numlines = 0;
+ int i;
+ char *option;
+ bool write_behind_present = false;
+ size_t newlen;
+ int ret;
+
+ ret = glfs_get_volfile(fs, NULL, 0);
+ if (ret == 0) {
+ DBG_ERR("%s: Failed to get volfile for "
+ "volume (%s): No volfile\n",
+ volume,
+ strerror(errno));
+ return -1;
+ }
+ if (ret > 0) {
+ DBG_ERR("%s: Invalid return %d for glfs_get_volfile for "
+ "volume (%s): No volfile\n",
+ volume,
+ ret,
+ strerror(errno));
+ return -1;
+ }
+
+ newlen = 0 - ret;
+
+ buf = talloc_zero_array(mem_ctx, char, newlen);
+ if (buf == NULL) {
+ return -1;
+ }
+
+ ret = glfs_get_volfile(fs, buf, newlen);
+ if (ret != newlen) {
+ TALLOC_FREE(buf);
+ DBG_ERR("%s: Failed to get volfile for volume (%s)\n",
+ volume, strerror(errno));
+ return -1;
+ }
+
+ option = talloc_asprintf(mem_ctx, "volume %s-write-behind", volume);
+ if (option == NULL) {
+ TALLOC_FREE(buf);
+ return -1;
+ }
+
+ lines = file_lines_parse(buf,
+ newlen,
+ &numlines,
+ mem_ctx);
+ if (lines == NULL || numlines <= 0) {
+ TALLOC_FREE(option);
+ TALLOC_FREE(buf);
+ return -1;
+ }
+
+ for (i=0; i < numlines; i++) {
+ if (strequal(lines[i], option)) {
+ write_behind_present = true;
+ break;
+ }
+ }
+
+ if (write_behind_present) {
+ DBG_ERR("Write behind translator is enabled for "
+ "volume (%s), refusing to connect! "
+ "Please check the vfs_glusterfs(8) manpage for "
+ "further details.\n",
+ volume);
+ TALLOC_FREE(option);
+ TALLOC_FREE(buf);
+ return -1;
+ }
+
+ TALLOC_FREE(option);
+ TALLOC_FREE(buf);
+ return 0;
+}
+
static int vfs_gluster_connect(struct vfs_handle_struct *handle,
const char *service,
const char *user)
@@ -363,6 +447,11 @@ static int vfs_gluster_connect(struct vfs_handle_struct *handle,
goto done;
}
+ ret = check_for_write_behind_translator(tmp_ctx, fs, volume);
+ if (ret < 0) {
+ goto done;
+ }
+
ret = glfs_set_preopened(volume, handle->conn->connectpath, fs);
if (ret < 0) {
DEBUG(0, ("%s: Failed to register volume (%s)\n",
--
Samba Shared Repository
More information about the samba-cvs
mailing list