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

Reply via email to