From: Henri Doreau Date: Tue, 28 Apr 2015 14:15:41 +0000 (+0200) Subject: LU-7122 utils: changelog_{de}register cleanup X-Git-Tag: 2.7.62~18 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F41%2F16341%2F4;p=fs%2Flustre-release.git LU-7122 utils: changelog_{de}register cleanup Document the -n switch for "changelog_register" in the man page. Apply coding style and remove unneeded code. Signed-off-by: Henri Doreau Change-Id: I38431d371bc08f5068e5b7e3e62a7847dc64283d Reviewed-on: http://review.whamcloud.com/16341 Tested-by: Jenkins Reviewed-by: John L. Hammond Tested-by: Maloo Reviewed-by: Frank Zago Reviewed-by: Oleg Drokin --- diff --git a/lustre/doc/lctl.8 b/lustre/doc/lctl.8 index c3a3379..b7fb090 100644 --- a/lustre/doc/lctl.8 +++ b/lustre/doc/lctl.8 @@ -283,9 +283,12 @@ Acquire which lustre file was attached to the device node. .PP .SS Changelogs .TP -.BI changelog_register +.BI changelog_register " [-n]" Register a new changelog user for a particular device. Changelog entries will not be purged beyond any registered users' set point. (See lfs changelog_clear.) +.br +.B -n +Print only the ID of the newly registered user. .TP .BI changelog_deregister " " Unregister an existing changelog user. If the user's "clear" record number diff --git a/lustre/utils/obd.c b/lustre/utils/obd.c index 06414a4..cfb1a03 100644 --- a/lustre/utils/obd.c +++ b/lustre/utils/obd.c @@ -4252,125 +4252,104 @@ int jt_get_obj_version(int argc, char **argv) int jt_changelog_register(int argc, char **argv) { - char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; - struct obd_ioctl_data data; - char devname[30]; - int rc; + struct obd_ioctl_data data = { 0 }; + char rawbuf[MAX_IOC_BUFLEN] = ""; + char *buf = rawbuf; + char *device = lcfg_get_devname(); + bool print_name_only = false; + int c; + int rc; - if (argc > 2) - return CMD_HELP; - else if (argc == 2 && strcmp(argv[1], "-n") != 0) - return CMD_HELP; - if (cur_device < 0) - return CMD_HELP; + if (argc > 2) + return CMD_HELP; - memset(&data, 0, sizeof(data)); - data.ioc_dev = cur_device; - memset(buf, 0, sizeof(rawbuf)); - rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); - if (rc) { - fprintf(stderr, "error: %s: invalid ioctl\n", - jt_cmdname(argv[0])); - return rc; - } + while ((c = getopt(argc, argv, "hn")) >= 0) { + switch (c) { + case 'n': + print_name_only = true; + break; + case 'h': + default: + return CMD_HELP; + } + } - rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_CHANGELOG_REG, buf); - if (rc < 0) { - fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), - strerror(rc = errno)); - return rc; - } - obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); + if (cur_device < 0 || device == NULL) + return CMD_HELP; + + data.ioc_dev = cur_device; + + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc < 0) { + fprintf(stderr, "error: %s: cannot pack ioctl: %s\n", + jt_cmdname(argv[0]), strerror(-rc)); + return rc; + } + + rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_CHANGELOG_REG, buf); + if (rc < 0) { + rc = -errno; + fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), + strerror(-rc)); + return rc; + } + + obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); if (data.ioc_u32_1 == 0) { fprintf(stderr, "received invalid userid!\n"); return -EPROTO; } - if (lcfg_get_devname() != NULL) { - if (strlen(lcfg_get_devname()) > sizeof(devname)-1) { - fprintf(stderr, "Dev name too long\n"); - return -E2BIG; - } - strncpy(devname, lcfg_get_devname(), sizeof(devname)); - } else { - if (snprintf(devname, sizeof(devname), "dev %d", cur_device) >= - sizeof(devname)) { - fprintf(stderr, "Dev name too long\n"); - return -E2BIG; - } - } + if (print_name_only) + printf("%s%u\n", CHANGELOG_USER_PREFIX, data.ioc_u32_1); + else + printf("%s: Registered changelog userid '%s%u'\n", + device, CHANGELOG_USER_PREFIX, data.ioc_u32_1); - if (argc == 2) - /* -n means bare name */ - printf(CHANGELOG_USER_PREFIX"%u\n", data.ioc_u32_1); - else - printf("%s: Registered changelog userid '"CHANGELOG_USER_PREFIX - "%u'\n", devname, data.ioc_u32_1); - return 0; + return 0; } int jt_changelog_deregister(int argc, char **argv) { - char rawbuf[MAX_IOC_BUFLEN], *buf = rawbuf; - struct obd_ioctl_data data; - char devname[30]; - int id, rc; - - if (argc != 2 || cur_device < 0) - return CMD_HELP; + struct obd_ioctl_data data = { 0 }; + char rawbuf[MAX_IOC_BUFLEN] = ""; + char *buf = rawbuf; + char *device = lcfg_get_devname(); + int id; + int rc; - id = strtol(argv[1] + strlen(CHANGELOG_USER_PREFIX), NULL, 10); - if ((id == 0) || (strncmp(argv[1], CHANGELOG_USER_PREFIX, - strlen(CHANGELOG_USER_PREFIX)) != 0)) { - fprintf(stderr, "expecting id of the form '" - CHANGELOG_USER_PREFIX"'; got '%s'\n", argv[1]); - return CMD_HELP; - } + if (argc != 2 || cur_device < 0 || device == NULL) + return CMD_HELP; - memset(&data, 0, sizeof(data)); - data.ioc_dev = cur_device; - data.ioc_u32_1 = id; - memset(buf, 0, sizeof(rawbuf)); - rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); - if (rc) { - fprintf(stderr, "error: %s: invalid ioctl\n", - jt_cmdname(argv[0])); - return rc; - } + rc = sscanf(argv[1], CHANGELOG_USER_PREFIX"%d", &id); + if (rc != 1 || id <= 0) { + fprintf(stderr, + "error: %s: expected id of the form %s got '%s'\n", + jt_cmdname(argv[0]), CHANGELOG_USER_PREFIX, argv[1]); + return CMD_HELP; + } - rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_CHANGELOG_DEREG, buf); - if (rc < 0) { - fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), - strerror(rc = errno)); - return rc; - } - obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); + data.ioc_dev = cur_device; + data.ioc_u32_1 = id; - if (data.ioc_u32_1 != id) { - fprintf(stderr, "No changelog user '%s'. Blocking user" - " is '"CHANGELOG_USER_PREFIX"%d'.\n", argv[1], - data.ioc_u32_1); - return -ENOENT; + rc = obd_ioctl_pack(&data, &buf, sizeof(rawbuf)); + if (rc < 0) { + fprintf(stderr, "error: %s: invalid ioctl\n", + jt_cmdname(argv[0])); + return rc; } - if (lcfg_get_devname() != NULL) { - if (strlen(lcfg_get_devname()) > sizeof(devname)-1) { - fprintf(stderr, "Dev name too long\n"); - return -E2BIG; - } - strncpy(devname, lcfg_get_devname(), sizeof(devname)); - } else { - if (snprintf(devname, sizeof(devname), "dev %d", cur_device) >= - sizeof(devname)) { - fprintf(stderr, "Dev name too long\n"); - return -E2BIG; - } + rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_CHANGELOG_DEREG, buf); + if (rc < 0) { + fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), + strerror(rc = errno)); + return rc; } - printf("%s: Deregistered changelog user '"CHANGELOG_USER_PREFIX"%d'\n", - devname, data.ioc_u32_1); - return 0; -} - + obd_ioctl_unpack(&data, buf, sizeof(rawbuf)); + printf("%s: Deregistered changelog user '%s%u'\n", + device, CHANGELOG_USER_PREFIX, data.ioc_u32_1); + return 0; +}