From cae71501680330a38c9bb16c25bf9c85dc0ec4e0 Mon Sep 17 00:00:00 2001 From: Wang Shilong Date: Mon, 3 Jul 2017 19:55:30 +0800 Subject: [PATCH] LU-9733 obd: fix fsname parsing 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 Reviewed-on: https://review.whamcloud.com/27916 Tested-by: Jenkins Reviewed-by: Dmitry Eremin Reviewed-by: Gu Zheng Tested-by: Maloo Reviewed-by: Oleg Drokin --- lustre/tests/conf-sanity.sh | 14 ++++++++++++-- lustre/utils/obd.c | 34 ++++++++++++++++++---------------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index a251e23..371776d 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -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 diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index 2e24e39..ab5f883 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -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; } -- 1.8.3.1