X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Futils%2Flustre_cfg.c;h=b33f0e7df53acce4c2bb39190f0eb8e6db805f90;hb=76fc2cda76b0cbdb47484dadeb66ae43d7a269b2;hp=e8d989d7dc658ee033b80a7069aad9abdded1b68;hpb=b5b6224b227ca816fc40739741f0c37364db6677;p=fs%2Flustre-release.git diff --git a/lustre/utils/lustre_cfg.c b/lustre/utils/lustre_cfg.c index e8d989d..b33f0e7 100644 --- a/lustre/utils/lustre_cfg.c +++ b/lustre/utils/lustre_cfg.c @@ -24,21 +24,22 @@ * */ - #include #include #include #include +#include #ifndef __KERNEL__ #include #endif -#include -#include -#include -#include -#include /* for struct lov_stripe_md */ -#include +#include +#include +#include +#include +#include /* for struct lov_stripe_md */ +#include +#include #include #include @@ -49,82 +50,67 @@ #include "obdctl.h" -#include +#include #include "parser.h" #include static char * lcfg_devname; -void lcfg_set_devname(char *name) +int lcfg_set_devname(char *name) { - if (lcfg_devname) - free(lcfg_devname); - lcfg_devname = strdup(name); + if (name) { + if (lcfg_devname) + free(lcfg_devname); + /* quietly strip the unnecessary '$' */ + if (*name == '$' || *name == '%') + name++; + if (isdigit(*name)) { + /* We can't translate from dev # to name */ + lcfg_devname = NULL; + } else { + lcfg_devname = strdup(name); + } + } else { + lcfg_devname = NULL; + } + return 0; } - -int jt_lcfg_device(int argc, char **argv) +char * lcfg_get_devname(void) { - char *name; - - if (argc == 1) { - printf("current device is %s\n", lcfg_devname? : "not set"); - return 0; - } else if (argc != 2) { - return CMD_HELP; - } - - name = argv[1]; - - /* quietly strip the unnecessary '$' */ - if (*name == '$') - name++; - - lcfg_set_devname(name); - - return 0; + return lcfg_devname; } -/* NOOP */ -int jt_lcfg_newdev(int argc, char **argv) +int jt_lcfg_device(int argc, char **argv) { - return 0; + return jt_obd_device(argc, argv); } int jt_lcfg_attach(int argc, char **argv) { - struct lustre_cfg lcfg; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; int rc; - LCFG_INIT(lcfg, LCFG_ATTACH, lcfg_devname); - - if (argc != 2 && argc != 3 && argc != 4) + if (argc != 4) return CMD_HELP; - lcfg.lcfg_inllen1 = strlen(argv[1]) + 1; - lcfg.lcfg_inlbuf1 = argv[1]; - if (argc >= 3) { - lcfg.lcfg_dev_namelen = strlen(argv[2]) + 1; - lcfg.lcfg_dev_name = argv[2]; - } else { - fprintf(stderr, "error: %s: LCFG_ATTACH requires a name\n", - jt_cmdname(argv[0])); - return -EINVAL; - } - - if (argc == 4) { - lcfg.lcfg_inllen2 = strlen(argv[3]) + 1; - lcfg.lcfg_inlbuf2 = argv[3]; - } + lustre_cfg_bufs_reset(&bufs, NULL); + + lustre_cfg_bufs_set_string(&bufs, 1, argv[1]); + lustre_cfg_bufs_set_string(&bufs, 0, argv[2]); + lustre_cfg_bufs_set_string(&bufs, 2, argv[3]); - rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + lcfg = lustre_cfg_new(LCFG_ATTACH, &bufs); + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); if (rc < 0) { fprintf(stderr, "error: %s: LCFG_ATTACH %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); } else if (argc == 3) { char name[1024]; - lcfg_set_devname(argv[2]); + lcfg_set_devname(argv[2]); if (strlen(argv[2]) > 128) { printf("Name too long to set environment\n"); return -EINVAL; @@ -135,54 +121,38 @@ int jt_lcfg_attach(int argc, char **argv) printf("error setting env variable %s\n", name); } } else { - lcfg_set_devname(argv[2]); - } + lcfg_set_devname(argv[2]); + } return rc; } int jt_lcfg_setup(int argc, char **argv) { - struct lustre_cfg lcfg; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; + int i; int rc; 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; + fprintf(stderr, "%s: please use 'device name' to set the " + "device name for config commands.\n", + jt_cmdname(argv[0])); + return -EINVAL; } - LCFG_INIT(lcfg, LCFG_SETUP, lcfg_devname); + lustre_cfg_bufs_reset(&bufs, lcfg_devname); - if (argc > 7) + if (argc > 6) return CMD_HELP; - if (argc > 1) { - lcfg.lcfg_inllen1 = strlen(argv[1]) + 1; - lcfg.lcfg_inlbuf1 = argv[1]; - } - if (argc > 2) { - lcfg.lcfg_inllen2 = strlen(argv[2]) + 1; - lcfg.lcfg_inlbuf2 = argv[2]; - } - if (argc > 3) { - lcfg.lcfg_inllen3 = strlen(argv[3]) + 1; - lcfg.lcfg_inlbuf3 = argv[3]; - } - if (argc > 4) { - 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]; + for (i = 1; i < argc; i++) { + lustre_cfg_bufs_set_string(&bufs, i, argv[i]); } - rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + + lcfg = lustre_cfg_new(LCFG_SETUP, &bufs); + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); if (rc < 0) fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); @@ -192,22 +162,25 @@ int jt_lcfg_setup(int argc, char **argv) int jt_obd_detach(int argc, char **argv) { - struct lustre_cfg lcfg; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; int rc; 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; + fprintf(stderr, "%s: please use 'device name' to set the " + "device name for config commands.\n", + jt_cmdname(argv[0])); + return -EINVAL; } - LCFG_INIT(lcfg, LCFG_DETACH, lcfg_devname); + lustre_cfg_bufs_reset(&bufs, lcfg_devname); if (argc != 1) return CMD_HELP; - rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + lcfg = lustre_cfg_new(LCFG_DETACH, &bufs); + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); if (rc < 0) fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); @@ -217,26 +190,30 @@ int jt_obd_detach(int argc, char **argv) int jt_obd_cleanup(int argc, char **argv) { - struct lustre_cfg lcfg; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; char force = 'F'; char failover = 'A'; - char flags[3]; + char flags[3] = { 0 }; int flag_cnt = 0, n; int rc; 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; + fprintf(stderr, "%s: please use 'device name' to set the " + "device name for config commands.\n", + jt_cmdname(argv[0])); + return -EINVAL; } - LCFG_INIT(lcfg, LCFG_CLEANUP, lcfg_devname); + lustre_cfg_bufs_reset(&bufs, lcfg_devname); if (argc < 1 || argc > 3) return CMD_HELP; - for (n = 1; n < argc; n++) + /* we are protected from overflowing our buffer by the argc + * check above + */ + for (n = 1; n < argc; n++) { if (strcmp(argv[n], "force") == 0) { flags[flag_cnt++] = force; } else if (strcmp(argv[n], "failover") == 0) { @@ -245,12 +222,15 @@ int jt_obd_cleanup(int argc, char **argv) fprintf(stderr, "unknown option: %s", argv[n]); return CMD_HELP; } + } - lcfg.lcfg_inllen1 = flag_cnt; - if (flag_cnt) - lcfg.lcfg_inlbuf1 = flags; + if (flag_cnt) { + lustre_cfg_bufs_set_string(&bufs, 1, flags); + } - rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + lcfg = lustre_cfg_new(LCFG_CLEANUP, &bufs); + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); if (rc < 0) fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); @@ -258,78 +238,79 @@ 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, lnet_nid_t nid) { - char tmp[64]; int rc; - struct lustre_cfg lcfg; - - LCFG_INIT(lcfg, LCFG_ADD_UUID, lcfg_devname); - lcfg.lcfg_nid = nid; - lcfg.lcfg_inllen1 = strlen(uuid) + 1; - lcfg.lcfg_inlbuf1 = uuid; - lcfg.lcfg_nal = nal; - - rc = lcfg_ioctl(func, OBD_DEV_ID, &lcfg); + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; + + lustre_cfg_bufs_reset(&bufs, lcfg_devname); + if (uuid) + lustre_cfg_bufs_set_string(&bufs, 1, uuid); + + lcfg = lustre_cfg_new(LCFG_ADD_UUID, &bufs); + lcfg->lcfg_nid = nid; + /* Poison NAL -- pre 1.4.6 will LASSERT on 0 NAL, this way it + doesn't work without crashing (bz 10130) */ + lcfg->lcfg_nal = 0x5a; + +#if 0 + fprintf(stderr, "adding\tnid: %d\tuuid: %s\n", + lcfg->lcfg_nid, uuid); +#endif + rc = lcfg_ioctl(func, OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); if (rc) { fprintf(stderr, "IOC_PORTAL_ADD_UUID failed: %s\n", strerror(errno)); return -1; } - printf ("Added uuid %s: %s\n", uuid, ptl_nid2str (tmp, nid)); + printf ("Added uuid %s: %s\n", uuid, libcfs_nid2str(nid)); return 0; } int jt_lcfg_add_uuid(int argc, char **argv) { - ptl_nid_t nid = 0; - int nal; - - if (argc != 4) { + lnet_nid_t nid; + + if (argc != 3) { return CMD_HELP; } - if (ptl_parse_nid (&nid, argv[2]) != 0) { + nid = libcfs_str2nid(argv[2]); + if (nid == LNET_NID_ANY) { fprintf (stderr, "Can't parse NID %s\n", argv[2]); - return (-1); + return (-1); } - nal = ptl_name2nal(argv[3]); - - if (nal <= 0) { - fprintf (stderr, "Can't parse NAL %s\n", argv[3]); - return -1; - } - - return do_add_uuid(argv[0], argv[1], nid, nal); + return do_add_uuid(argv[0], argv[1], nid); } -int obd_add_uuid(char *uuid, ptl_nid_t nid, int nal) +int obd_add_uuid(char *uuid, lnet_nid_t nid) { - return do_add_uuid("obd_add_uuid", uuid, nid, nal); + return do_add_uuid("obd_add_uuid", uuid, nid); } int jt_lcfg_del_uuid(int argc, char **argv) { int rc; - struct lustre_cfg lcfg; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; if (argc != 2) { fprintf(stderr, "usage: %s \n", argv[0]); return 0; } - LCFG_INIT(lcfg, LCFG_DEL_UUID, lcfg_devname); - + lustre_cfg_bufs_reset(&bufs, lcfg_devname); if (strcmp (argv[1], "_all_")) - { - lcfg.lcfg_inllen1 = strlen(argv[1]) + 1; - lcfg.lcfg_inlbuf1 = argv[1]; - } - - rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + lustre_cfg_bufs_set_string(&bufs, 1, argv[1]); + + lcfg = lustre_cfg_new(LCFG_DEL_UUID, &bufs); + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); if (rc) { fprintf(stderr, "IOC_PORTAL_DEL_UUID failed: %s\n", strerror(errno)); @@ -338,237 +319,95 @@ int jt_lcfg_del_uuid(int argc, char **argv) return 0; } -int jt_lcfg_lov_setup(int argc, char **argv) -{ - struct lustre_cfg lcfg; - struct lov_desc desc; - int rc; - char *end; - /* argv: lov_setup - * [ ] - */ - if (argc < 6 || argc > 7) - 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; - } +int jt_lcfg_del_mount_option(int argc, char **argv) +{ + int rc; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; - 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]); + if (argc != 2) return CMD_HELP; - } - - if (argc == 7) { - desc.ld_tgt_count = strtoul(argv[6], &end, 0); - if (*end) { - fprintf(stderr, "error: %s: bad target count '%s'\n", - jt_cmdname(argv[0]), argv[6]); - 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; - } - } - LCFG_INIT(lcfg, LCFG_SETUP, lcfg_devname); + lustre_cfg_bufs_reset(&bufs, lcfg_devname); - lcfg.lcfg_inllen1 = sizeof(desc); - lcfg.lcfg_inlbuf1 = (char *)&desc; + /* profile name */ + lustre_cfg_bufs_set_string(&bufs, 1, argv[1]); - 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)); + lcfg = lustre_cfg_new(LCFG_DEL_MOUNTOPT, &bufs); + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); + if (rc < 0) { + fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), + strerror(rc = errno)); + } return rc; } -int jt_lcfg_lmv_setup(int argc, char **argv) +int jt_lcfg_set_timeout(int argc, char **argv) { - struct lustre_cfg lcfg; - struct lmv_desc desc; - struct obd_uuid *uuidarray, *ptr; - int rc, i; + int rc; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; - LCFG_INIT(lcfg, LCFG_SETUP, lcfg_devname); + fprintf(stderr, "%s has been deprecated. Use conf_param instead.\n" + "e.g. conf_param lustre-MDT0000 obd_timeout=50\n", + jt_cmdname(argv[0])); + return CMD_HELP; - 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; - } + if (argc != 2) + return CMD_HELP; - 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); + lustre_cfg_bufs_reset(&bufs, lcfg_devname); + lcfg = lustre_cfg_new(LCFG_SET_TIMEOUT, &bufs); + lcfg->lcfg_num = atoi(argv[1]); + + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + //rc = lcfg_mgs_ioctl(argv[0], OBD_DEV_ID, lcfg); - /* 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_free(lcfg); + if (rc < 0) { + fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), + strerror(rc = errno)); } - - lcfg.lcfg_inllen1 = sizeof(desc); - lcfg.lcfg_inlbuf1 = (char *)&desc; - lcfg.lcfg_inllen2 = desc.ld_tgt_count * sizeof(*uuidarray); - lcfg.lcfg_inlbuf2 = (char *)uuidarray; - - 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)); -out: - free(uuidarray); return rc; } -int jt_lcfg_lov_modify_tgts(int argc, char **argv) + + +int jt_lcfg_add_conn(int argc, char **argv) { - struct lustre_cfg lcfg; - char *end; - int index; - int gen; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; + int priority; int rc; - /* argv: lov_modify_tgts */ - if (argc != 6) + if (argc == 2) + priority = 0; + else if (argc == 3) + priority = 1; + else 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); + if (lcfg_devname == NULL) { + fprintf(stderr, "%s: please use 'device name' to set the " + "device name for config commands.\n", + jt_cmdname(argv[0])); 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)); + lustre_cfg_bufs_reset(&bufs, lcfg_devname); - return rc; -} + lustre_cfg_bufs_set_string(&bufs, 1, argv[1]); -int jt_lcfg_mount_option(int argc, char **argv) -{ - int rc; - struct lustre_cfg lcfg; + lcfg = lustre_cfg_new(LCFG_ADD_CONN, &bufs); + lcfg->lcfg_num = priority; - LCFG_INIT(lcfg, LCFG_MOUNTOPT, lcfg_devname); - - if (argc < 3 || argc > 4) - return CMD_HELP; - - /* profile name */ - lcfg.lcfg_inllen1 = strlen(argv[1]) + 1; - lcfg.lcfg_inlbuf1 = argv[1]; - /* osc name */ - lcfg.lcfg_inllen2 = strlen(argv[2]) + 1; - lcfg.lcfg_inlbuf2 = argv[2]; - if (argc == 4) { - /* mdc name */ - lcfg.lcfg_inllen3 = strlen(argv[3]) + 1; - lcfg.lcfg_inlbuf3 = argv[3]; - } - rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free (lcfg); if (rc < 0) { fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); @@ -577,21 +416,31 @@ int jt_lcfg_mount_option(int argc, char **argv) return rc; } -int jt_lcfg_del_mount_option(int argc, char **argv) +int jt_lcfg_del_conn(int argc, char **argv) { + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; int rc; - struct lustre_cfg lcfg; - - LCFG_INIT(lcfg, LCFG_DEL_MOUNTOPT, lcfg_devname); if (argc != 2) return CMD_HELP; - /* profile name */ - lcfg.lcfg_inllen1 = strlen(argv[1]) + 1; - lcfg.lcfg_inlbuf1 = argv[1]; + if (lcfg_devname == NULL) { + fprintf(stderr, "%s: please use 'device name' to set the " + "device name for config commands.\n", + jt_cmdname(argv[0])); + return -EINVAL; + } + + lustre_cfg_bufs_reset(&bufs, lcfg_devname); + + /* connection uuid */ + lustre_cfg_bufs_set_string(&bufs, 1, argv[1]); - rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + lcfg = lustre_cfg_new(LCFG_DEL_MOUNTOPT, &bufs); + + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); if (rc < 0) { fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); @@ -600,48 +449,60 @@ int jt_lcfg_del_mount_option(int argc, char **argv) return rc; } -int jt_lcfg_set_timeout(int argc, char **argv) +/* Param set locally, directly on target */ +int jt_lcfg_param(int argc, char **argv) { - int rc; - struct lustre_cfg lcfg; + int i, rc; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; - LCFG_INIT(lcfg, LCFG_SET_TIMEOUT, lcfg_devname); - - if (argc != 2) + if (argc >= LUSTRE_CFG_MAX_BUFCOUNT) return CMD_HELP; - lcfg.lcfg_num = atoi(argv[1]); + lustre_cfg_bufs_reset(&bufs, NULL); - rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + for (i = 1; i < argc; i++) { + lustre_cfg_bufs_set_string(&bufs, i, argv[i]); + } + + lcfg = lustre_cfg_new(LCFG_PARAM, &bufs); + + rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); if (rc < 0) { fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); } - return rc; } - -int jt_lcfg_set_lustre_upcall(int argc, char **argv) +/* Param set in config log on MGS */ +/* conf_param key1=value1 [key2=value2...] */ +int jt_lcfg_mgsparam(int argc, char **argv) { - int rc; - struct lustre_cfg lcfg; - - LCFG_INIT(lcfg, LCFG_SET_UPCALL, lcfg_devname); + int i, rc; + struct lustre_cfg_bufs bufs; + struct lustre_cfg *lcfg; - if (argc != 2) + if ((argc >= LUSTRE_CFG_MAX_BUFCOUNT) || (argc <= 1)) return CMD_HELP; - /* profile name */ - lcfg.lcfg_inllen1 = strlen(argv[1]) + 1; - lcfg.lcfg_inlbuf1 = argv[1]; + lustre_cfg_bufs_reset(&bufs, NULL); + for (i = 1; i < argc; i++) { + lustre_cfg_bufs_set_string(&bufs, i, argv[i]); + } + + /* We could put other opcodes here. */ + lcfg = lustre_cfg_new(LCFG_PARAM, &bufs); - rc = lcfg_ioctl(argv[0], OBD_DEV_ID, &lcfg); + rc = lcfg_mgs_ioctl(argv[0], OBD_DEV_ID, lcfg); + lustre_cfg_free(lcfg); if (rc < 0) { fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); } - + return rc; } +