X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Futils%2Flustre_cfg.c;h=ca170732e9abc84ea5fc448d5c8ad75b667d2c2d;hb=965175d8acb7cb7a2ac6ca555224b7322c416b53;hp=adbc384ffd62f7681ba21eb2a6ea0b2d7ff8b6b8;hpb=c5050e412572b00cbe93d8517d2d1f767bebfa92;p=fs%2Flustre-release.git diff --git a/lustre/utils/lustre_cfg.c b/lustre/utils/lustre_cfg.c index adbc384..ca17073 100644 --- a/lustre/utils/lustre_cfg.c +++ b/lustre/utils/lustre_cfg.c @@ -108,7 +108,7 @@ int jt_lcfg_attach(int argc, char **argv) lcfg.lcfg_dev_name = argv[2]; } else { fprintf(stderr, "error: %s: LCFG_ATTACH requires a name\n", - jt_cmdname(argv[0])); + jt_cmdname(argv[0])); return -EINVAL; } @@ -148,14 +148,14 @@ int jt_lcfg_setup(int argc, char **argv) if (lcfg_devname == NULL) { fprintf(stderr, "%s: please use 'cfg_device name' to set the " - "device name for config commands.\n", - jt_cmdname(argv[0])); + "device name for config commands.\n", + jt_cmdname(argv[0])); return -EINVAL; } LCFG_INIT(lcfg, LCFG_SETUP, lcfg_devname); - if (argc > 5) + if (argc > 7) return CMD_HELP; if (argc > 1) { @@ -174,7 +174,14 @@ int jt_lcfg_setup(int argc, char **argv) lcfg.lcfg_inllen4 = strlen(argv[4]) + 1; lcfg.lcfg_inlbuf4 = argv[4]; } - + if (argc > 5) { + lcfg.lcfg_inllen5 = strlen(argv[5]) + 1; + lcfg.lcfg_inlbuf5 = argv[5]; + } + if (argc > 6) { + lcfg.lcfg_inllen6 = strlen(argv[6]) + 1; + lcfg.lcfg_inlbuf6 = argv[6]; + } rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); if (rc < 0) fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), @@ -190,8 +197,8 @@ int jt_obd_detach(int argc, char **argv) if (lcfg_devname == NULL) { fprintf(stderr, "%s: please use 'cfg_device name' to set the " - "device name for config commands.\n", - jt_cmdname(argv[0])); + "device name for config commands.\n", + jt_cmdname(argv[0])); return -EINVAL; } @@ -219,8 +226,8 @@ int jt_obd_cleanup(int argc, char **argv) if (lcfg_devname == NULL) { fprintf(stderr, "%s: please use 'cfg_device name' to set the " - "device name for config commands.\n", - jt_cmdname(argv[0])); + "device name for config commands.\n", + jt_cmdname(argv[0])); return -EINVAL; } @@ -229,7 +236,7 @@ int jt_obd_cleanup(int argc, char **argv) if (argc < 1 || argc > 3) return CMD_HELP; - for (n = 1; n < argc; n++) + for (n = 1; n < argc; n++) if (strcmp(argv[n], "force") == 0) { flags[flag_cnt++] = force; } else if (strcmp(argv[n], "failover") == 0) { @@ -251,8 +258,8 @@ int jt_obd_cleanup(int argc, char **argv) return rc; } -static -int do_add_uuid(char * func, char *uuid, ptl_nid_t nid, int nal) +static +int do_add_uuid(char * func, char *uuid, ptl_nid_t nid, int nal) { char tmp[64]; int rc; @@ -279,8 +286,8 @@ int jt_lcfg_add_uuid(int argc, char **argv) { ptl_nid_t nid = 0; int nal; - - if (argc != 4) { + + if (argc != 4) { return CMD_HELP; } @@ -321,7 +328,7 @@ int jt_lcfg_del_uuid(int argc, char **argv) lcfg.lcfg_inllen1 = strlen(argv[1]) + 1; lcfg.lcfg_inlbuf1 = argv[1]; } - + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); if (rc) { fprintf(stderr, "IOC_PORTAL_DEL_UUID failed: %s\n", @@ -335,39 +342,31 @@ int jt_lcfg_lov_setup(int argc, char **argv) { struct lustre_cfg lcfg; struct lov_desc desc; - struct obd_uuid *uuidarray, *ptr; - int rc, i; + int rc; char *end; - - LCFG_INIT(lcfg, LCFG_SETUP, lcfg_devname); - + + /* argv: lov_setup + * [ ] + */ if (argc <= 6) return CMD_HELP; - + if (strlen(argv[1]) > sizeof(desc.ld_uuid) - 1) { fprintf(stderr, "error: %s: LOV uuid '%s' longer than "LPSZ" chars\n", jt_cmdname(argv[0]), argv[1], sizeof(desc.ld_uuid) - 1); return -EINVAL; } - + memset(&desc, 0, sizeof(desc)); obd_str2uuid(&desc.ld_uuid, argv[1]); - desc.ld_tgt_count = argc - 6; desc.ld_default_stripe_count = strtoul(argv[2], &end, 0); if (*end) { fprintf(stderr, "error: %s: bad default stripe count '%s'\n", jt_cmdname(argv[0]), argv[2]); return CMD_HELP; } - if (desc.ld_default_stripe_count > desc.ld_tgt_count) { - fprintf(stderr, - "error: %s: default stripe count %u > OST count %u\n", - jt_cmdname(argv[0]), desc.ld_default_stripe_count, - desc.ld_tgt_count); - return -EINVAL; - } - + desc.ld_default_stripe_size = strtoull(argv[3], &end, 0); if (*end) { fprintf(stderr, "error: %s: bad default stripe size '%s'\n", @@ -398,6 +397,54 @@ int jt_lcfg_lov_setup(int argc, char **argv) jt_cmdname(argv[0]), argv[5]); return CMD_HELP; } + + if (argc > 7) { + desc.ld_tgt_count = argc - 6; + if (desc.ld_default_stripe_count > desc.ld_tgt_count) { + fprintf(stderr, + "error: %s: default stripe count %u > " + "OST count %u\n", jt_cmdname(argv[0]), + desc.ld_default_stripe_count, + desc.ld_tgt_count); + return -EINVAL; + } + } + + LCFG_INIT(lcfg, LCFG_SETUP, lcfg_devname); + + lcfg.lcfg_inllen1 = sizeof(desc); + lcfg.lcfg_inlbuf1 = (char *)&desc; + + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + if (rc) + fprintf(stderr, "error: %s: ioctl error: %s\n", + jt_cmdname(argv[0]), strerror(rc = errno)); + return rc; +} + +int jt_lcfg_lmv_setup(int argc, char **argv) +{ + struct lustre_cfg lcfg; + struct lmv_desc desc; + struct obd_uuid *uuidarray, *ptr; + int rc, i; + + LCFG_INIT(lcfg, LCFG_SETUP, lcfg_devname); + + if (argc <= 2) + return CMD_HELP; + + if (strlen(argv[1]) > sizeof(desc.ld_uuid) - 1) { + fprintf(stderr, + "error: %s: LMV uuid '%s' longer than "LPSZ" chars\n", + jt_cmdname(argv[0]), argv[1], sizeof(desc.ld_uuid) - 1); + return -EINVAL; + } + + memset(&desc, 0, sizeof(desc)); + obd_str2uuid(&desc.ld_uuid, argv[1]); + desc.ld_tgt_count = argc - 2; + printf("LMV: %d uuids:\n", desc.ld_tgt_count); /* NOTE: it is possible to overwrite the default striping parameters, * but EXTREME care must be taken when saving the OST UUID list. @@ -412,13 +459,14 @@ int jt_lcfg_lov_setup(int argc, char **argv) rc = -ENOMEM; goto out; } - for (i = 6, ptr = uuidarray; i < argc; i++, ptr++) { + for (i = 2, ptr = uuidarray; i < argc; i++, ptr++) { if (strlen(argv[i]) >= sizeof(*ptr)) { fprintf(stderr, "error: %s: arg %d (%s) too long\n", jt_cmdname(argv[0]), i, argv[i]); rc = -EINVAL; goto out; } + printf(" %s\n", argv[i]); strcpy((char *)ptr, argv[i]); } @@ -436,6 +484,64 @@ out: return rc; } +int jt_lcfg_lov_modify_tgts(int argc, char **argv) +{ + struct lustre_cfg lcfg; + char *end; + int index; + int gen; + int rc; + + /* argv: lov_modify_tgts */ + if (argc != 6) + return CMD_HELP; + + if (!strncmp(argv[1], "add", 4)) { + LCFG_INIT(lcfg, LCFG_LOV_ADD_OBD, argv[2]); + } else if (!strncmp(argv[1], "del", 4)) { + LCFG_INIT(lcfg, LCFG_LOV_DEL_OBD, argv[2]); + } else { + fprintf(stderr, "error: %s: bad operation '%s'\n", + jt_cmdname(argv[0]), argv[1]); + return CMD_HELP; + } + + lcfg.lcfg_inlbuf1 = argv[3]; + lcfg.lcfg_inllen1 = strlen(lcfg.lcfg_inlbuf1) + 1; + if (lcfg.lcfg_inllen1 > sizeof(struct obd_uuid)) { + fprintf(stderr, + "error: %s: OBD uuid '%s' longer than "LPSZ" chars\n", + jt_cmdname(argv[0]), argv[3], + sizeof(struct obd_uuid) - 1); + return -EINVAL; + } + + index = strtoul(argv[4], &end, 0); + if (*end) { + fprintf(stderr, "error: %s: bad OBD index '%s'\n", + jt_cmdname(argv[0]), argv[4]); + return CMD_HELP; + } + lcfg.lcfg_inlbuf2 = argv[4]; + lcfg.lcfg_inllen2 = strlen(lcfg.lcfg_inlbuf2); + + gen = strtoul(argv[5], &end, 0); + if (*end) { + fprintf(stderr, "error: %s: bad OBD generation '%s'\n", + jt_cmdname(argv[0]), argv[5]); + return CMD_HELP; + } + lcfg.lcfg_inlbuf3 = argv[5]; + lcfg.lcfg_inllen3 = strlen(lcfg.lcfg_inlbuf3); + + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + if (rc) + fprintf(stderr, "error: %s: ioctl error: %s\n", + jt_cmdname(argv[0]), strerror(rc = errno)); + + return rc; +} + int jt_lcfg_mount_option(int argc, char **argv) { int rc; @@ -500,7 +606,7 @@ int jt_lcfg_set_timeout(int argc, char **argv) return CMD_HELP; lcfg.lcfg_num = atoi(argv[1]); - + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); if (rc < 0) { fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), @@ -533,4 +639,70 @@ int jt_lcfg_set_lustre_upcall(int argc, char **argv) return rc; } +int jt_lcfg_add_conn(int argc, char **argv) +{ + struct lustre_cfg lcfg; + int priority; + int rc; + + if (argc == 2) + priority = 0; + else if (argc == 3) + priority = 1; + else + return CMD_HELP; + + if (lcfg_devname == NULL) { + fprintf(stderr, "%s: please use 'cfg_device name' to set the " + "device name for config commands.\n", + jt_cmdname(argv[0])); + return -EINVAL; + } + + LCFG_INIT(lcfg, LCFG_ADD_CONN, lcfg_devname); + + /* connection uuid */ + lcfg.lcfg_inllen1 = strlen(argv[1]) + 1; + lcfg.lcfg_inlbuf1 = argv[1]; + lcfg.lcfg_inllen2 = sizeof(int); + lcfg.lcfg_inlbuf2 = (char*) &priority; + + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + if (rc < 0) { + fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), + strerror(rc = errno)); + } + + return rc; +} + +int jt_lcfg_del_conn(int argc, char **argv) +{ + struct lustre_cfg lcfg; + int rc; + + if (argc != 2) + return CMD_HELP; + + if (lcfg_devname == NULL) { + fprintf(stderr, "%s: please use 'cfg_device name' to set the " + "device name for config commands.\n", + jt_cmdname(argv[0])); + return -EINVAL; + } + + LCFG_INIT(lcfg, LCFG_DEL_CONN, lcfg_devname); + + /* connection uuid */ + lcfg.lcfg_inllen1 = strlen(argv[1]) + 1; + lcfg.lcfg_inlbuf1 = argv[1]; + + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + if (rc < 0) { + fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), + strerror(rc = errno)); + } + + return rc; +}