Whamcloud - gitweb
LU-9733 obd: fix fsname parsing 16/27916/5
authorWang Shilong <wshilong@ddn.com>
Mon, 3 Jul 2017 11:55:30 +0000 (19:55 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 1 Aug 2017 05:34:53 +0000 (05:34 +0000)
Lustre support Lustre fsname started with numbers.
So here we should try fsname firstly, if it failed,
fall back to number parsing.

Change-Id: Idd98b9fdc8375729faa61f51251caa101035dd93
Signed-off-by: Wang Shilong <wshilong@ddn.com>
Reviewed-on: https://review.whamcloud.com/27916
Tested-by: Jenkins
Reviewed-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-by: Gu Zheng <gzheng@ddn.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/tests/conf-sanity.sh
lustre/utils/obd.c

index a251e23..371776d 100644 (file)
@@ -960,9 +960,10 @@ test_24a() {
        local fs2ostdev=$(ostdevname 1_2)
        local fs2mdsvdev=$(mdsvdevname 1_2)
        local fs2ostvdev=$(ostvdevname 1_2)
+       local cl_user
 
-       # test 8-char fsname as well
-       local FSNAME2=test1234
+       # LU-9733 test fsname started with numbers as well
+       local FSNAME2=969362ae
 
        add fs2mds $(mkfs_opts mds1 ${fs2mdsdev} ) --nomgs --mgsnode=$MGSNID \
                --fsname=${FSNAME2} --reformat $fs2mdsdev $fs2mdsvdev || exit 10
@@ -975,6 +976,15 @@ test_24a() {
        start fs2ost $fs2ostdev $OST_MOUNT_OPTS
        mkdir -p $MOUNT2 || error "mkdir $MOUNT2 failed"
        $MOUNT_CMD $MGSNID:/${FSNAME2} $MOUNT2 || error "$MOUNT_CMD failed"
+
+       # LU-9733 test fsname started with numbers
+       cl_user=$(do_facet $SINGLEMDS lctl --device $FSNAME2-MDT0000 \
+                       changelog_register -n) ||
+                               error "register changelog failed"
+
+       do_facet $SINGLEMDS lctl --device $FSNAME2-MDT0000 \
+                       changelog_deregister $cl_user ||
+                               error "deregister changelog failed"
        # 1 still works
        check_mount || error "check_mount failed"
        # files written on 1 should not show up on 2
index 2e24e39..ab5f883 100644 (file)
@@ -260,25 +260,27 @@ static int do_name2dev(char *func, char *name)
  */
 int parse_devname(char *func, char *name)
 {
-        int rc;
-        int ret = -1;
+       int rc;
+       int ret = -1;
+       int try_digit;
+
+       if (!name)
+               return ret;
+
+       try_digit = isdigit(name[0]);
+
+       if (name[0] == '$' || name[0] == '%')
+               name++;
+
+       rc = do_name2dev(func, name);
+       if (rc >= N2D_OFF)
+               return rc - N2D_OFF;
 
-        if (!name)
-                return ret;
-        if (isdigit(name[0])) {
+       if (try_digit)
                 ret = strtoul(name, NULL, 0);
-        } else {
-                if (name[0] == '$' || name[0] == '%')
-                        name++;
-                rc = do_name2dev(func, name);
-                if (rc >= N2D_OFF) {
-                        ret = rc - N2D_OFF;
-                        // printf("Name %s is device %d\n", name, ret);
-                } else {
-                        fprintf(stderr, "No device found for name %s: %s\n",
+       else
+               fprintf(stderr, "No device found for name %s: %s\n",
                                 name, strerror(rc));
-                }
-        }
         return ret;
 }