?? obd.c
字號:
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 + -