⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 obd.c

📁 lustre 1.6.5 source code
💻 C
📖 第 1 页 / 共 5 页
字号:
        IOC_INIT(data);        if (argc != 1)                return CMD_HELP;        IOC_PACK(argv[0], data);        rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_ABORT_RECOVERY, buf);        if (rc < 0)                fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]),                        strerror(rc = errno));        return rc;}int jt_get_version(int argc, char **argv){        int rc;        char buf[8192];        struct obd_ioctl_data *data = (struct obd_ioctl_data *)buf;        if (argc != 1)                return CMD_HELP;        memset(buf, 0, sizeof(buf));        data->ioc_version = OBD_IOCTL_VERSION;        data->ioc_inllen1 = sizeof(buf) - size_round(sizeof(*data));        data->ioc_inlbuf1 = buf + size_round(sizeof(*data));        data->ioc_len = obd_ioctl_packlen(data);        rc = l2_ioctl(OBD_DEV_ID, OBD_GET_VERSION, buf);        if (rc < 0)                fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]),                        strerror(rc = errno));        else {                printf("Lustre version: %s\n", data->ioc_bulk);        }        printf("lctl   version: %s\n", BUILD_VERSION);        return rc;}/* get device list by ioctl */int jt_obd_list_ioctl(int argc, char **argv){        int rc, index;        char buf[8192];        struct obd_ioctl_data *data = (struct obd_ioctl_data *)buf;        if (argc != 1)                return CMD_HELP;        for (index = 0;; index++) {                memset(buf, 0, sizeof(buf));                data->ioc_version = OBD_IOCTL_VERSION;                data->ioc_inllen1 = sizeof(buf) - size_round(sizeof(*data));                data->ioc_inlbuf1 = buf + size_round(sizeof(*data));                data->ioc_len = obd_ioctl_packlen(data);                data->ioc_count = index;                rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_GETDEVICE, buf);                if (rc != 0)                        break;                printf("%s\n", (char *)data->ioc_bulk);        }        if (rc != 0) {                if (errno == ENOENT)                        /* no device or the last device */                        rc = 0;                else                        fprintf(stderr, "Error getting device list: %s: "                                        "check dmesg.\n",                                        strerror(errno));        }        return rc;}int jt_obd_list(int argc, char **argv){        int rc;        char buf[MAX_STRING_SIZE];        FILE *fp = NULL;        if (argc != 1)                return CMD_HELP;        fp = fopen(DEVICES_LIST, "r");        if (fp == NULL) {                fprintf(stderr, "error: %s: %s opening "DEVICES_LIST"\n",                        jt_cmdname(argv[0]), strerror(rc =  errno));                return jt_obd_list_ioctl(argc, argv);        }        while (fgets(buf, sizeof(buf), fp) != NULL)                printf("%s", buf);        fclose(fp);        return 0;}/* Create one or more objects, arg[4] may describe stripe meta-data.  If * not, defaults assumed.  This echo-client instance stashes the stripe * object ids.  Use get_stripe on this node to print full lsm and * set_stripe on another node to cut/paste between nodes. *//* create <count> [<file_create_mode>] [q|v|# verbosity] [striping] */int jt_obd_create(int argc, char **argv){        struct obd_ioctl_data data;        struct timeval next_time;        __u64 count = 1, next_count, base_id = 0;        int verbose = 1, mode = 0100644, rc = 0, i, valid_lsm = 0;        char *end;        IOC_INIT(data);        if (argc < 2 || argc > 5)                return CMD_HELP;        count = strtoull(argv[1], &end, 0);        if (*end) {                fprintf(stderr, "error: %s: invalid iteration count '%s'\n",                        jt_cmdname(argv[0]), argv[1]);                return CMD_HELP;        }        if (argc > 2) {                mode = strtoul(argv[2], &end, 0);                if (*end) {                        fprintf(stderr, "error: %s: invalid mode '%s'\n",                                jt_cmdname(argv[0]), argv[2]);                        return CMD_HELP;                }                if (!(mode & S_IFMT))                        mode |= S_IFREG;        }        if (argc > 3) {                verbose = get_verbose(argv[0], argv[3]);                if (verbose == BAD_VERBOSE)                        return CMD_HELP;        }        if (argc < 5)                reset_lsmb (&lsm_buffer);       /* will set default */        else {                rc = parse_lsm (&lsm_buffer, argv[4]);                if (rc != 0) {                        fprintf(stderr, "error: %s: invalid lsm '%s'\n",                                jt_cmdname(argv[0]), argv[4]);                        return CMD_HELP;                }                base_id = lsm_buffer.lsm.lsm_object_id;                valid_lsm = 1;        }        printf("%s: "LPD64" objects\n", jt_cmdname(argv[0]), count);        gettimeofday(&next_time, NULL);        next_time.tv_sec -= verbose;        for (i = 1, next_count = verbose; i <= count && shmem_running(); i++) {                data.ioc_obdo1.o_mode = mode;                data.ioc_obdo1.o_id = base_id;                data.ioc_obdo1.o_uid = 0;                data.ioc_obdo1.o_gid = 0;                data.ioc_obdo1.o_valid = OBD_MD_FLTYPE | OBD_MD_FLMODE |                        OBD_MD_FLID | OBD_MD_FLUID | OBD_MD_FLGID;                if (valid_lsm) {                        data.ioc_plen1 = sizeof lsm_buffer;                        data.ioc_pbuf1 = (char *)&lsm_buffer;                }                IOC_PACK(argv[0], data);                rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_CREATE, buf);                IOC_UNPACK(argv[0], data);                shmem_bump();                if (rc < 0) {                        fprintf(stderr, "error: %s: #%d - %s\n",                                jt_cmdname(argv[0]), i, strerror(rc = errno));                        break;                }                if (!(data.ioc_obdo1.o_valid & OBD_MD_FLID)) {                        fprintf(stderr,"error: %s: oid not valid #%d:"LPX64"\n",                                jt_cmdname(argv[0]), i, data.ioc_obdo1.o_valid);                        rc = EINVAL;                        break;                }                if (be_verbose(verbose, &next_time, i, &next_count, count))                        printf("%s: #%d is object id "LPX64"\n",                                jt_cmdname(argv[0]), i, data.ioc_obdo1.o_id);        }        return rc;}int jt_obd_setattr(int argc, char **argv){        struct obd_ioctl_data data;        char *end;        int rc;        IOC_INIT(data);        if (argc != 2)                return CMD_HELP;        data.ioc_obdo1.o_id = strtoull(argv[1], &end, 0);        if (*end) {                fprintf(stderr, "error: %s: invalid objid '%s'\n",                        jt_cmdname(argv[0]), argv[1]);                return CMD_HELP;        }        data.ioc_obdo1.o_mode = S_IFREG | strtoul(argv[2], &end, 0);        if (*end) {                fprintf(stderr, "error: %s: invalid mode '%s'\n",                        jt_cmdname(argv[0]), argv[2]);                return CMD_HELP;        }        data.ioc_obdo1.o_valid = OBD_MD_FLID | OBD_MD_FLTYPE | OBD_MD_FLMODE;        IOC_PACK(argv[0], data);        rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_SETATTR, buf);        if (rc < 0)                fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]),                        strerror(rc = errno));        return rc;}int jt_obd_test_setattr(int argc, char **argv){        struct obd_ioctl_data data;        struct timeval start, next_time;        __u64 i, count, next_count;        int verbose = 1;        obd_id objid = 3;        char *end;        int rc = 0;        if (argc < 2 || argc > 4)                return CMD_HELP;        IOC_INIT(data);        count = strtoull(argv[1], &end, 0);        if (*end) {                fprintf(stderr, "error: %s: invalid iteration count '%s'\n",                        jt_cmdname(argv[0]), argv[1]);                return CMD_HELP;        }        if (argc >= 3) {                verbose = get_verbose(argv[0], argv[2]);                if (verbose == BAD_VERBOSE)                        return CMD_HELP;        }        if (argc >= 4) {                if (argv[3][0] == 't') {                        objid = strtoull(argv[3] + 1, &end, 0);                        if (thread)                                objid += thread - 1;                } else                        objid = strtoull(argv[3], &end, 0);                if (*end) {                        fprintf(stderr, "error: %s: invalid objid '%s'\n",                                jt_cmdname(argv[0]), argv[3]);                        return CMD_HELP;                }        }        gettimeofday(&start, NULL);        next_time.tv_sec = start.tv_sec - verbose;        next_time.tv_usec = start.tv_usec;        if (verbose != 0)                printf("%s: setting "LPD64" attrs (objid "LPX64"): %s",                       jt_cmdname(argv[0]), count, objid, ctime(&start.tv_sec));        for (i = 1, next_count = verbose; i <= count && shmem_running(); i++) {                data.ioc_obdo1.o_id = objid;                data.ioc_obdo1.o_mode = S_IFREG;                data.ioc_obdo1.o_valid = OBD_MD_FLID | OBD_MD_FLTYPE | OBD_MD_FLMODE;                IOC_PACK(argv[0], data);                rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_SETATTR, &data);                shmem_bump();                if (rc < 0) {                        fprintf(stderr, "error: %s: #"LPD64" - %d:%s\n",                                jt_cmdname(argv[0]), i, errno, strerror(rc = errno));                        break;                } else {                        if (be_verbose                            (verbose, &next_time, i, &next_count, count))                                printf("%s: set attr #"LPD64"\n",                                       jt_cmdname(argv[0]), i);                }        }        if (!rc) {                struct timeval end;                double diff;                gettimeofday(&end, NULL);                diff = difftime(&end, &start);                --i;                if (verbose != 0)                        printf("%s: "LPD64" attrs in %.3fs (%.3f attr/s): %s",                               jt_cmdname(argv[0]), i, diff, i / diff,                               ctime(&end.tv_sec));        }        return rc;}int jt_obd_destroy(int argc, char **argv){        struct obd_ioctl_data data;        struct timeval next_time;        __u64 count = 1, next_count;        int verbose = 1;        __u64 id;        char *end;        int rc = 0, i;        IOC_INIT(data);        if (argc < 2 || argc > 4)                return CMD_HELP;        id = strtoull(argv[1], &end, 0);        if (*end || id == 0 || errno != 0) {                fprintf(stderr, "error: %s: invalid objid '%s'\n",                        jt_cmdname(argv[0]), argv[1]);                return CMD_HELP;        }        if (argc > 2) {                count = strtoull(argv[2], &end, 0);                if (*end) {                        fprintf(stderr,                                "error: %s: invalid iteration count '%s'\n",                                jt_cmdname(argv[0]), argv[2]);                        return CMD_HELP;                }        }        if (argc > 3) {                verbose = get_verbose(argv[0], argv[3]);                if (verbose == BAD_VERBOSE)                        return CMD_HELP;        }        printf("%s: "LPD64" objects\n", jt_cmdname(argv[0]), count);        gettimeofday(&next_time, NULL);        next_time.tv_sec -= verbose;        for (i = 1, next_count = verbose; i <= count && shmem_running(); i++, id++) {                data.ioc_obdo1.o_id = id;                data.ioc_obdo1.o_mode = S_IFREG | 0644;                data.ioc_obdo1.o_valid = OBD_MD_FLID | OBD_MD_FLMODE;                IOC_PACK(argv[0], data);                rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_DESTROY, buf);                IOC_UNPACK(argv[0], data);                shmem_bump();                if (rc < 0) {                        fprintf(stderr, "error: %s: objid "LPX64": %s\n",                                jt_cmdname(argv[0]), id, strerror(rc = errno));                        break;                }                if (be_verbose(verbose, &next_time, i, &next_count, count))                        printf("%s: #%d is object id "LPX64"\n",                               jt_cmdname(argv[0]), i, id);        }        return rc;}int jt_obd_getattr(int argc, char **argv){        struct obd_ioctl_data data;        char *end;        int rc;        if (argc != 2)                return CMD_HELP;        IOC_INIT(data);        data.ioc_obdo1.o_id = strtoull(argv[1], &end, 0);        if (*end) {                fprintf(stderr, "error: %s: invalid objid '%s'\n",                        jt_cmdname(argv[0]), argv[1]);                return CMD_HELP;        }        /* to help obd filter */        data.ioc_obdo1.o_mode = 0100644;        data.ioc_obdo1.o_valid = 0xffffffff;        printf("%s: object id "LPX64"\n", jt_cmdname(argv[0]),data.ioc_obdo1.o_id);        IOC_PACK(argv[0], data);        rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_GETATTR, buf);        IOC_UNPACK(argv[0], data);        if (rc) {                fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]),                        strerror(rc = errno));        } else {                printf("%s: object id "LPX64", mode %o\n", jt_cmdname(argv[0]),                       data.ioc_obdo1.o_id, data.ioc_obdo1.o_mode);        }        return rc;}int jt_obd_test_getattr(int argc, char **argv){        struct obd_ioctl_data data;        struct timeval start, next_time;        __u64 i, count, next_count;        int verbose = 1;        obd_id objid = 3;        char *end;        int rc = 0;

⌨️ 快捷键说明

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