The branch, master has been updated via 07bbd7f docs/vfs_ceph: document user_id parameter via ec788be vfs_ceph: add user_id smb.conf parameter via eb39aa4 vfs_ceph: replace deprecated ceph_shutdown() call via 667fb18 vfs_ceph: cleanup mount handle on failure from 129015d lib: Fix "is_case_sensitive" in "ms_fnmatch_protocol"' callers
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 07bbd7fb449fbe64a682c4e6b0cf93fe91006a2e Author: David Disseldorp <dd...@samba.org> Date: Wed Feb 8 17:49:43 2017 +0100 docs/vfs_ceph: document user_id parameter Signed-off-by: David Disseldorp <dd...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> Autobuild-User(master): David Disseldorp <dd...@samba.org> Autobuild-Date(master): Wed Feb 15 21:00:53 CET 2017 on sn-devel-144 commit ec788bead3118a8b9c6069c702357ea5509db868 Author: David Disseldorp <dd...@samba.org> Date: Wed Feb 8 17:26:14 2017 +0100 vfs_ceph: add user_id smb.conf parameter The "ceph: user_id" parameter can be specified in smb.conf to explicitly set the Ceph client ID used when creating the mount handle. Signed-off-by: David Disseldorp <dd...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit eb39aa4695dbda4ed32aa0b907b501fcf1a7ef01 Author: David Disseldorp <dd...@samba.org> Date: Wed Feb 8 17:51:32 2017 +0100 vfs_ceph: replace deprecated ceph_shutdown() call ceph_shutdown() is the equivalent to ceph_unmount() + ceph_release() without error handling. Signed-off-by: David Disseldorp <dd...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> commit 667fb18f1ecc97832832a1f9cedc044d004f1929 Author: David Disseldorp <dd...@samba.org> Date: Wed Feb 8 17:11:30 2017 +0100 vfs_ceph: cleanup mount handle on failure Signed-off-by: David Disseldorp <dd...@samba.org> Reviewed-by: Ralph Böhme <s...@samba.org> ----------------------------------------------------------------------- Summary of changes: docs-xml/manpages/vfs_ceph.8.xml | 14 ++++++++++ source3/modules/vfs_ceph.c | 60 ++++++++++++++++++++++++---------------- 2 files changed, 50 insertions(+), 24 deletions(-) Changeset truncated at 500 lines: diff --git a/docs-xml/manpages/vfs_ceph.8.xml b/docs-xml/manpages/vfs_ceph.8.xml index 37d50b9..c492d31 100644 --- a/docs-xml/manpages/vfs_ceph.8.xml +++ b/docs-xml/manpages/vfs_ceph.8.xml @@ -83,6 +83,20 @@ </listitem> </varlistentry> + <varlistentry> + <term>ceph:user_id = name</term> + <listitem> + <para> + Allows one to explicitly set the client ID used for the + CephFS mount handle. Empty by default (CephFS uses the + process id). + </para> + <para> + Example: ceph:user_id = samba + </para> + </listitem> + </varlistentry> + </variablelist> </refsect1> diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index 75233ef..b74c214 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -85,8 +85,9 @@ static int cephwrap_connect(struct vfs_handle_struct *handle, const char *servi { int ret; char buf[256]; - - const char * conf_file; + int snum = SNUM(handle->conn); + const char *conf_file; + const char *user_id; if (cmount) { handle->data = cmount; /* We have been here before */ @@ -94,36 +95,34 @@ static int cephwrap_connect(struct vfs_handle_struct *handle, const char *servi return 0; } - conf_file = lp_parm_const_string(SNUM(handle->conn), "ceph", "config_file", NULL); + /* if config_file and/or user_id are NULL, ceph will use defaults */ + conf_file = lp_parm_const_string(snum, "ceph", "config_file", NULL); + user_id = lp_parm_const_string(snum, "ceph", "user_id", NULL); - DBG_DEBUG( "[CEPH] calling: ceph_create\n" ); - ret = ceph_create(&cmount, NULL); - if (ret) + DBG_DEBUG("[CEPH] calling: ceph_create\n"); + ret = ceph_create(&cmount, user_id); + if (ret) { goto err_out; - - if (conf_file) { - /* Override the config file */ - DBG_DEBUG( "[CEPH] calling: ceph_conf_read_file\n" ); - ret = ceph_conf_read_file(cmount, conf_file); - } else { - - DBG_DEBUG( "[CEPH] calling: ceph_conf_read_file with %s\n", conf_file); - ret = ceph_conf_read_file(cmount, NULL); } - if (ret) - goto err_out; + DBG_DEBUG("[CEPH] calling: ceph_conf_read_file with %s\n", + (conf_file == NULL ? "default path" : conf_file)); + ret = ceph_conf_read_file(cmount, conf_file); + if (ret) { + goto err_cm_release; + } - DBG_DEBUG( "[CEPH] calling: ceph_conf_get\n" ); + DBG_DEBUG("[CEPH] calling: ceph_conf_get\n"); ret = ceph_conf_get(cmount, "log file", buf, sizeof(buf)); - if (ret < 0) - goto err_out; + if (ret < 0) { + goto err_cm_release; + } DBG_DEBUG("[CEPH] calling: ceph_mount\n"); ret = ceph_mount(cmount, NULL); - if (ret < 0) - goto err_out; - + if (ret < 0) { + goto err_cm_release; + } /* * encode mount context/state into our vfs/connection holding structure @@ -134,6 +133,9 @@ static int cephwrap_connect(struct vfs_handle_struct *handle, const char *servi return 0; +err_cm_release: + ceph_release(cmount); + cmount = NULL; err_out: /* * Handle the error correctly. Ceph returns -errno. @@ -144,6 +146,8 @@ err_out: static void cephwrap_disconnect(struct vfs_handle_struct *handle) { + int ret; + if (!cmount) { DBG_ERR("[CEPH] Error, ceph not mounted\n"); return; @@ -155,7 +159,15 @@ static void cephwrap_disconnect(struct vfs_handle_struct *handle) return; } - ceph_shutdown(cmount); + ret = ceph_unmount(cmount); + if (ret < 0) { + DBG_ERR("[CEPH] failed to unmount: %s\n", strerror(-ret)); + } + + ret = ceph_release(cmount); + if (ret < 0) { + DBG_ERR("[CEPH] failed to release: %s\n", strerror(-ret)); + } cmount = NULL; /* Make it safe */ } -- Samba Shared Repository