-int jt_lcfg_lov_setup(int argc, char **argv)
-{
- struct lustre_cfg_bufs bufs;
- struct lustre_cfg *lcfg;
- struct lov_desc desc;
- int rc;
- char *end;
-
- /* argv: lov_setup <LOV uuid> <stripe count> <stripe size>
- * <stripe offset> <pattern> [ <max tgt index> ]
- */
- 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_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;
- }
-
- desc.ld_default_stripe_size = strtoull(argv[3], &end, 0);
- if (*end) {
- fprintf(stderr, "error: %s: bad default stripe size '%s'\n",
- jt_cmdname(argv[0]), argv[3]);
- return CMD_HELP;
- }
- if (desc.ld_default_stripe_size < 4096) {
- fprintf(stderr,
- "error: %s: default stripe size "LPU64" too small\n",
- jt_cmdname(argv[0]), desc.ld_default_stripe_size);
- return -EINVAL;
- } else if ((long)desc.ld_default_stripe_size <
- desc.ld_default_stripe_size) {
- fprintf(stderr,
- "error: %s: default stripe size "LPU64" too large\n",
- jt_cmdname(argv[0]), desc.ld_default_stripe_size);
- return -EINVAL;
- }
- desc.ld_default_stripe_offset = strtoull(argv[4], &end, 0);
- if (*end) {
- fprintf(stderr, "error: %s: bad default stripe offset '%s'\n",
- jt_cmdname(argv[0]), argv[4]);
- return CMD_HELP;
- }
- desc.ld_pattern = strtoul(argv[5], &end, 0);
- if (*end) {
- fprintf(stderr, "error: %s: bad stripe pattern '%s'\n",
- 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;
- }
- }
-
- lustre_cfg_bufs_reset(&bufs, lcfg_devname);
- lustre_cfg_bufs_set(&bufs, 1, &desc, sizeof(desc));
-
- lcfg = lustre_cfg_new(LCFG_SETUP, &bufs);
- rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg);
- lustre_cfg_free(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_bufs bufs;
- struct lustre_cfg *lcfg;
- struct lmv_desc desc;
- struct obd_uuid *uuidarray, *ptr;
- int rc, i;
-
- lustre_cfg_bufs_reset(&bufs, 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.
- * It must be EXACTLY the same, or have only additions at the
- * end of the list, or only overwrite individual OST entries
- * that are restored from backups of the previous OST.
- */
- uuidarray = calloc(desc.ld_tgt_count, sizeof(*uuidarray));
- if (!uuidarray) {
- fprintf(stderr, "error: %s: no memory for %d UUIDs\n",
- jt_cmdname(argv[0]), desc.ld_tgt_count);
- rc = -ENOMEM;
- goto out;
- }
- 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]);
- }
-
- lustre_cfg_bufs_set(&bufs, 1, &desc, sizeof(desc));
- lustre_cfg_bufs_set(&bufs, 2, (char*)uuidarray,
- desc.ld_tgt_count * sizeof(*uuidarray));
- lcfg = lustre_cfg_new(LCFG_SETUP, &bufs);
- rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg);
- lustre_cfg_free(lcfg);
-
- if (rc)
- fprintf(stderr, "error: %s: ioctl error: %s\n",
- jt_cmdname(argv[0]), strerror(rc = errno));
-out:
- free(uuidarray);
- return rc;
-}
-int jt_lcfg_lov_modify_tgts(int argc, char **argv)
-{
- struct lustre_cfg_bufs bufs;
- struct lustre_cfg *lcfg;
- char *end;
- int cmd = 0;
- int index;
- int gen;
- int rc;
-
- /* argv: lov_modify_tgts <op> <LOV name> <OBD uuid> <index> <gen> */
- if (argc != 6)
- return CMD_HELP;
-
- if (!strncmp(argv[1], "add", 4)) {
- cmd = LCFG_LOV_ADD_OBD;
- } else if (!strncmp(argv[1], "del", 4)) {
- cmd = LCFG_LOV_DEL_OBD;
- } else {
- fprintf(stderr, "error: %s: bad operation '%s'\n",
- jt_cmdname(argv[0]), argv[1]);
- return CMD_HELP;
- }
-
- lustre_cfg_bufs_reset(&bufs, argv[2]);
-
-
- if (((index = strlen(argv[3]) + 1)) > 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;
- }
- lustre_cfg_bufs_set(&bufs, 1, argv[3], index);
-
- 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;
- }
- lustre_cfg_bufs_set(&bufs, 2, argv[4], strlen(argv[4]));
-
- 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;
- }
- lustre_cfg_bufs_set(&bufs, 3, argv[5], strlen(argv[5]));
-
- lcfg = lustre_cfg_new(cmd, &bufs);
- rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg);
- lustre_cfg_free(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;
- struct lustre_cfg_bufs bufs;
- struct lustre_cfg *lcfg;
- int i;
-
- if (argc < 3 || argc > 4)
- return CMD_HELP;