lustre_cfg.c

来自「lustre 1.6.5 source code」· C语言 代码 · 共 741 行 · 第 1/2 页

C
741
字号
        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_add_conn(int argc, char **argv){        struct lustre_cfg_bufs bufs;        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 'device name' to set the "                        "device name for config commands.\n",                         jt_cmdname(argv[0]));                 return -EINVAL;        }        lustre_cfg_bufs_reset(&bufs, lcfg_devname);        lustre_cfg_bufs_set_string(&bufs, 1, argv[1]);        lcfg = lustre_cfg_new(LCFG_ADD_CONN, &bufs);        lcfg->lcfg_num = priority;        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_del_conn(int argc, char **argv){        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        int rc;        if (argc != 2)                return CMD_HELP;        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]);        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;}/* Param set locally, directly on target */int jt_lcfg_param(int argc, char **argv){        int i, rc;        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        if (argc >= LUSTRE_CFG_MAX_BUFCOUNT)                return CMD_HELP;        lustre_cfg_bufs_reset(&bufs, NULL);        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;}/* Param set in config log on MGS *//* conf_param key1=value1 [key2=value2...] */int jt_lcfg_mgsparam(int argc, char **argv){        int i, rc;        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        if ((argc >= LUSTRE_CFG_MAX_BUFCOUNT) || (argc <= 1))                return CMD_HELP;        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_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;}/* Display the path in the same format as sysctl * For eg. obdfilter.lustre-OST0000.stats */static char *display_name(char *filename){        char *tmp;        filename += strlen("/proc/");        if (strncmp(filename, "fs/", strlen("fs/")) == 0)                filename += strlen("fs/");        else                filename += strlen("sys/");        if (strncmp(filename, "lustre/", strlen("lustre/")) == 0)                filename += strlen("lustre/");        /* replace '/' with '.' to match conf_param and sysctl */        tmp = filename;        while ((tmp = strchr(tmp, '/')) != NULL)                *tmp = '.';        return filename;}/* Find a character in a length limited string */static char *strnchr(const char *p, char c, size_t n){       if (!p)               return (0);       while (n-- > 0) {               if (*p == c)                       return ((char *)p);               p++;       }       return (0);}int jt_lcfg_getparam(int argc, char **argv){        int fp;        int rc = 0, i, show_path = 0;        char pattern[PATH_MAX];        char *path, *tmp, *buf;        glob_t glob_info;        if (argc == 3 && strcmp(argv[1], "-n") == 0) {                path = argv[2];        } else if (argc == 2) {                show_path = 1;                path = argv[1];        } else {                return CMD_HELP;        }        /* If the input is in form Eg. obdfilter.*.stats */        if (strchr(path, '.')) {                tmp = path;                while (*tmp != '\0') {                        if (*tmp == '.')                                *tmp = '/';                        tmp ++;                }        }        /* If the entire path is specified as input */        fp = open(path, O_RDONLY);        if (fp < 0)                snprintf(pattern, PATH_MAX, "/proc/{fs,sys}/{lnet,lustre}/%s",                         path);        else {                strcpy(pattern, path);                close(fp);        }        rc = glob(pattern, GLOB_BRACE, NULL, &glob_info);        if (rc) {                fprintf(stderr, "error : glob %s: %s \n", pattern,strerror(rc));                return rc;        }        buf = malloc(CFS_PAGE_SIZE);        for (i = 0; i  < glob_info.gl_pathc; i++) {                char *valuename = NULL;                memset(buf, 0, CFS_PAGE_SIZE);                if (show_path) {                        char *filename;                        filename = strdup(glob_info.gl_pathv[i]);                        valuename = display_name(filename);                }                /* Write the contents of file to stdout */                fp = open(glob_info.gl_pathv[i], O_RDONLY);                if (fp < 0) {                        fprintf(stderr, "error: %s: opening('%s') failed: %s\n",                                jt_cmdname(argv[0]), glob_info.gl_pathv[i],                                strerror(errno));                        continue;                }                do {                        rc = read(fp, buf, CFS_PAGE_SIZE);                        if (rc == 0)                                break;                        if (rc < 0) {                                fprintf(stderr, "error: %s: read('%s') "                                        "failed: %s\n", jt_cmdname(argv[0]),                                        glob_info.gl_pathv[i], strerror(errno));                                break;                        }                        /* Print the output in the format path=value if the                         * value contains no new line character or cab be                         * occupied in a line, else print value on new line */                        if (valuename && show_path) {                                int longbuf = strnchr(buf, rc - 1, '\n') != NULL                                              || rc > 60;                                printf("%s=%s", valuename, longbuf ? "\n" : buf);                                valuename = NULL;                                if (!longbuf)                                        continue;                                fflush(stdout);                        }                        rc = write(fileno(stdout), buf, rc);                        if (rc < 0) {                                fprintf(stderr, "error: %s: write to stdout "                                        "failed: %s\n", jt_cmdname(argv[0]),                                        strerror(errno));                                break;                        }                } while (1);                close(fp);        }        globfree(&glob_info);        free(buf);        return rc;}int jt_lcfg_setparam(int argc, char **argv){        int rc = 0, i;        int fp, show_path = 0;        char pattern[PATH_MAX];        char *path, *value, *tmp;        glob_t glob_info;        path = argv[1];        if (argc == 4 && (strcmp(argv[1], "-n") == 0)) {                /* Format: lctl set_param -n param value */                path = argv[2];                value = argv[3];        } else if (argc == 3) {                if (strcmp(argv[1], "-n") != 0) {                        /* Format: lctl set_param param value */                        show_path = 1;                        value = argv[2];                } else if ((value = strchr(argv[2], '=')) != NULL) {                        /* Format: lctl set_param -n param=value */                        path = argv[2];                        *value = '\0';                        value ++;                } else {                        fprintf(stderr, "error: %s Incorrect arguments."                                        "See Usage\n",                                jt_cmdname(argv[0]));                        return CMD_HELP;                }        } else if (argc == 2 && ((value = strchr(argv[1], '=')) != NULL)) {                /* Format: lctl set_param param=value */                show_path = 1;                *value = '\0';                value++;        } else {                fprintf(stderr, "error: %s Incorrect arguments. See Usage\n",                        jt_cmdname(argv[0]));                return CMD_HELP;        }        /* If the input is in form Eg. obdfilter.*.stats */        if (strchr(path, '.')) {                tmp = path;                while (*tmp != '\0') {                        if (*tmp == '.')                                *tmp = '/';                        tmp ++;                }        }        fp = open(path, O_RDONLY);        if (fp < 0)                snprintf(pattern, PATH_MAX, "/proc/{fs,sys}/{lnet,lustre}/%s",                         path);        else {                strcpy(pattern, path);                close(fp);        }        rc = glob(pattern, GLOB_BRACE, NULL, &glob_info);        if (rc) {                fprintf(stderr, "error : glob %s: %s \n", pattern,strerror(rc));                return rc;        }        for (i = 0; i  < glob_info.gl_pathc; i++) {                if (show_path) {                        char *valuename, *filename;                        filename = strdup(glob_info.gl_pathv[i]);                        valuename = display_name(filename);                        printf("%s=%s\n", valuename, value);                }                /* Write the new value to the file */                fp = open(glob_info.gl_pathv[i], O_WRONLY);                if (fp > 0) {                        rc = write(fp, value, strlen(value));                        if (rc < 0)                                fprintf(stderr,                                        "error writing to file %s\n",                                        glob_info.gl_pathv[i]);                        else                                rc = 0;                        close(fp);                } else {                        fprintf(stderr, "error: %s: %s opening %s\n",                                jt_cmdname(argv[0]), strerror(rc = errno),                                glob_info.gl_pathv[i]);                }        }        globfree(&glob_info);        return rc;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?