📄 obd.c
字号:
char argstring[200]; int i, count = sizeof(argstring) - 1; IOC_INIT(data); if (argc > 5) return CMD_HELP; argstring[0] = '\0'; for (i = 1; i < argc; i++) { strncat(argstring, " ", count); count--; strncat(argstring, argv[i], count); count -= strlen(argv[i]); } if (strlen(argstring)) { data.ioc_inlbuf1 = argstring; data.ioc_inllen1 = strlen(argstring) + 1; } IOC_PACK(argv[0], data); rc = l2_ioctl(OBD_DEV_ID, IOC_LDLM_REGRESS_START, buf); if (rc) fprintf(stderr, "error: %s: test failed: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); return rc;}int jt_obd_ldlm_regress_stop(int argc, char **argv){ int rc; struct obd_ioctl_data data; IOC_INIT(data); if (argc != 1) return CMD_HELP; IOC_PACK(argv[0], data); rc = l2_ioctl(OBD_DEV_ID, IOC_LDLM_REGRESS_STOP, buf); if (rc) fprintf(stderr, "error: %s: test failed: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); return rc;}static int do_activate(int argc, char **argv, int flag){ struct obd_ioctl_data data; int rc; IOC_INIT(data); if (argc != 1) return CMD_HELP; /* reuse offset for 'active' */ data.ioc_offset = flag; IOC_PACK(argv[0], data); rc = l2_ioctl(OBD_DEV_ID, IOC_OSC_SET_ACTIVE, buf); if (rc) fprintf(stderr, "error: %s: failed: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); return rc;}int jt_obd_deactivate(int argc, char **argv){ return do_activate(argc, argv, 0);}int jt_obd_activate(int argc, char **argv){ return do_activate(argc, argv, 1);}int jt_obd_recover(int argc, char **argv){ int rc; struct obd_ioctl_data data; IOC_INIT(data); if (argc > 2) return CMD_HELP; if (argc == 2) { data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; } IOC_PACK(argv[0], data); rc = l2_ioctl(OBD_DEV_ID, OBD_IOC_CLIENT_RECOVER, buf); if (rc < 0) { fprintf(stderr, "error: %s: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); } return rc;}int jt_obd_mdc_lookup(int argc, char **argv){ struct obd_ioctl_data data; char *parent, *child; int rc, fd, verbose = 1; if (argc < 3 || argc > 4) return CMD_HELP; parent = argv[1]; child = argv[2]; if (argc == 4) verbose = get_verbose(argv[0], argv[3]); IOC_INIT(data); data.ioc_inllen1 = strlen(child) + 1; data.ioc_inlbuf1 = child; IOC_PACK(argv[0], data); fd = open(parent, O_RDONLY); if (fd < 0) { fprintf(stderr, "open \"%s\" failed: %s\n", parent, strerror(errno)); return -1; } rc = ioctl(fd, IOC_MDC_LOOKUP, buf); if (rc < 0) { fprintf(stderr, "error: %s: ioctl error: %s\n", jt_cmdname(argv[0]), strerror(rc = errno)); } close(fd); if (verbose) { IOC_UNPACK(argv[0], data); printf("%s: mode %o uid %d gid %d\n", child, data.ioc_obdo1.o_mode, data.ioc_obdo1.o_uid, data.ioc_obdo1.o_gid); } return rc;}int jt_cfg_dump_log(int argc, char **argv){ struct obd_ioctl_data data; int rc; IOC_INIT(data); if (argc != 2) return CMD_HELP; data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; IOC_PACK(argv[0], data); rc = l_ioctl(OBD_DEV_ID, OBD_IOC_DUMP_LOG, buf); if (rc < 0) fprintf(stderr, "OBD_IOC_DUMP_LOG failed: %s\n", strerror(errno)); return rc;}int jt_llog_catlist(int argc, char **argv){ struct obd_ioctl_data data; int rc; if (argc != 1) return CMD_HELP; IOC_INIT(data); data.ioc_inllen1 = max - size_round(sizeof(data)); IOC_PACK(argv[0], data); rc = l_ioctl(OBD_DEV_ID, OBD_IOC_CATLOGLIST, buf); if (rc == 0) fprintf(stdout, "%s", ((struct obd_ioctl_data*)buf)->ioc_bulk); else fprintf(stderr, "OBD_IOC_CATLOGLIST failed: %s\n", strerror(errno)); return rc;}int jt_llog_info(int argc, char **argv){ struct obd_ioctl_data data; int rc; if (argc != 2) return CMD_HELP; IOC_INIT(data); data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; data.ioc_inllen2 = max - size_round(sizeof(data)) - size_round(data.ioc_inllen1); IOC_PACK(argv[0], data); rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_INFO, buf); if (rc == 0) fprintf(stdout, "%s", ((struct obd_ioctl_data*)buf)->ioc_bulk); else fprintf(stderr, "OBD_IOC_LLOG_INFO failed: %s\n", strerror(errno)); return rc;}int jt_llog_print(int argc, char **argv){ struct obd_ioctl_data data; int rc; if (argc != 2 && argc != 4) return CMD_HELP; IOC_INIT(data); data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; if (argc == 4) { data.ioc_inllen2 = strlen(argv[2]) + 1; data.ioc_inlbuf2 = argv[2]; data.ioc_inllen3 = strlen(argv[3]) + 1; data.ioc_inlbuf3 = argv[3]; } else { char from[2] = "1", to[3] = "-1"; data.ioc_inllen2 = strlen(from) + 1; data.ioc_inlbuf2 = from; data.ioc_inllen3 = strlen(to) + 1; data.ioc_inlbuf3 = to; } data.ioc_inllen4 = max - size_round(sizeof(data)) - size_round(data.ioc_inllen1) - size_round(data.ioc_inllen2) - size_round(data.ioc_inllen3); IOC_PACK(argv[0], data); rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_PRINT, buf); if (rc == 0) fprintf(stdout, "%s", ((struct obd_ioctl_data*)buf)->ioc_bulk); else fprintf(stderr, "OBD_IOC_LLOG_PRINT failed: %s\n", strerror(errno)); return rc;}int jt_llog_cancel(int argc, char **argv){ struct obd_ioctl_data data; int rc; if (argc != 4) return CMD_HELP; IOC_INIT(data); data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; data.ioc_inllen2 = strlen(argv[2]) + 1; data.ioc_inlbuf2 = argv[2]; data.ioc_inllen3 = strlen(argv[3]) + 1; data.ioc_inlbuf3 = argv[3]; IOC_PACK(argv[0], data); rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_CANCEL, buf); if (rc == 0) fprintf(stdout, "index %s be canceled.\n", argv[3]); else fprintf(stderr, "OBD_IOC_LLOG_CANCEL failed: %s\n", strerror(errno)); return rc;}int jt_llog_check(int argc, char **argv){ struct obd_ioctl_data data; int rc; if (argc != 2 && argc != 4) return CMD_HELP; IOC_INIT(data); data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; if (argc == 4) { data.ioc_inllen2 = strlen(argv[2]) + 1; data.ioc_inlbuf2 = argv[2]; data.ioc_inllen3 = strlen(argv[3]) + 1; data.ioc_inlbuf3 = argv[3]; } else { char from[2] = "1", to[3] = "-1"; data.ioc_inllen2 = strlen(from) + 1; data.ioc_inlbuf2 = from; data.ioc_inllen3 = strlen(to) + 1; data.ioc_inlbuf3 = to; } data.ioc_inllen4 = max - size_round(sizeof(data)) - size_round(data.ioc_inllen1) - size_round(data.ioc_inllen2) - size_round(data.ioc_inllen3); IOC_PACK(argv[0], data); rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_CHECK, buf); if (rc == 0) fprintf(stdout, "%s", ((struct obd_ioctl_data*)buf)->ioc_bulk); else fprintf(stderr, "OBD_IOC_LLOG_CHECK failed: %s\n", strerror(errno)); return rc;}int jt_llog_remove(int argc, char **argv){ struct obd_ioctl_data data; int rc; if (argc != 3 && argc != 2) return CMD_HELP; IOC_INIT(data); data.ioc_inllen1 = strlen(argv[1]) + 1; data.ioc_inlbuf1 = argv[1]; if (argc == 3){ data.ioc_inllen2 = strlen(argv[2]) + 1; data.ioc_inlbuf2 = argv[2]; } IOC_PACK(argv[0], data); rc = l_ioctl(OBD_DEV_ID, OBD_IOC_LLOG_REMOVE, buf); if (rc == 0) { if (argc == 3) fprintf(stdout, "log %s are removed.\n", argv[2]); else fprintf(stdout, "the log in catalog %s are removed. \n", argv[1]); } else fprintf(stderr, "OBD_IOC_LLOG_REMOVE failed: %s\n", strerror(errno)); return rc;}/* attach a regular file to virtual block device. * return vaule: * -1: fatal error * 1: error, it always means the command run failed * 0: success */static int jt_blockdev_run_process(const char *file, char *argv[]){ pid_t pid; int rc; pid = vfork(); if (pid == 0) { /* child process */ /* don't print error messages */ close(1), close(2); (void)execvp(file, argv); exit(-1); } else if (pid > 0) { int status; rc = waitpid(pid, &status, 0); if (rc < 0 || !WIFEXITED(status)) return -1; return WEXITSTATUS(status); } return -1;}static int jt_blockdev_find_module(const char *module){ FILE *fp; int found = 0; char modname[256]; fp = fopen("/proc/modules", "r"); if (fp == NULL) return -1; while (fscanf(fp, "%s %*s %*s %*s %*s %*s", modname) == 1) { if (strcmp(module, modname) == 0) { found = 1; break; } } fclose(fp); return found;}static int jt_blockdev_probe_module(const char *module){ char buf[1024]; char *argv[10]; int c, rc; if (jt_blockdev_find_module(module) == 1) return 0; /* run modprobe first */ c = 0; argv[c++] = "/sbin/modprobe"; argv[c++] = "-q"; argv[c++] = (char *)module; argv[c++] = NULL; rc = jt_blockdev_run_process("mod
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -