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

📄 obd.c

📁 lustre 1.6.5 source code
💻 C
📖 第 1 页 / 共 5 页
字号:
        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 + -