lustre_cfg.c

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

C
741
字号
/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * *  Copyright (C) 2002 Cluster File Systems, Inc. *   Author: Peter J. Braam <braam@clusterfs.com> *   Author: Phil Schwan <phil@clusterfs.com> *   Author: Andreas Dilger <adilger@clusterfs.com> *   Author: Robert Read <rread@clusterfs.com> * *   This file is part of Lustre, http://www.lustre.org. * *   Lustre is free software; you can redistribute it and/or *   modify it under the terms of version 2 of the GNU General Public *   License as published by the Free Software Foundation. * *   Lustre is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. * *   You should have received a copy of the GNU General Public License *   along with Lustre; if not, write to the Free Software *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */#include <stdlib.h>#include <sys/ioctl.h>#include <stdio.h>#include <stdarg.h>#include <ctype.h>#include <glob.h>#ifndef __KERNEL__#include <liblustre.h>#endif#include <lustre_lib.h>#include <lustre_cfg.h>#include <lustre/lustre_idl.h>#include <lustre_dlm.h>#include <obd.h>          /* for struct lov_stripe_md */#include <obd_lov.h>#include <lustre/lustre_build_version.h>#include <unistd.h>#include <sys/un.h>#include <time.h>#include <sys/time.h>#include <errno.h>#include <string.h>#include "obdctl.h"#include <lnet/lnetctl.h>#include "parser.h"#include <stdio.h>static char * lcfg_devname;int lcfg_set_devname(char *name){        if (name) {                if (lcfg_devname)                        free(lcfg_devname);                /* quietly strip the unnecessary '$' */                if (*name == '$' || *name == '%')                        name++;                if (isdigit(*name)) {                         /* We can't translate from dev # to name */                        lcfg_devname = NULL;                } else {                        lcfg_devname = strdup(name);                }        } else {                lcfg_devname = NULL;        }         return 0;}char * lcfg_get_devname(void){        return lcfg_devname;}int jt_lcfg_device(int argc, char **argv){        return jt_obd_device(argc, argv);}int jt_lcfg_attach(int argc, char **argv){        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        int rc;        if (argc != 4)                return CMD_HELP;        lustre_cfg_bufs_reset(&bufs, NULL);        lustre_cfg_bufs_set_string(&bufs, 1, argv[1]);        lustre_cfg_bufs_set_string(&bufs, 0, argv[2]);        lustre_cfg_bufs_set_string(&bufs, 2, argv[3]);        lcfg = lustre_cfg_new(LCFG_ATTACH, &bufs);        rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg);        lustre_cfg_free(lcfg);        if (rc < 0) {                fprintf(stderr, "error: %s: LCFG_ATTACH %s\n",                        jt_cmdname(argv[0]), strerror(rc = errno));        } else if (argc == 3) {                char name[1024];                lcfg_set_devname(argv[2]);                if (strlen(argv[2]) > 128) {                        printf("Name too long to set environment\n");                        return -EINVAL;                }                snprintf(name, 512, "LUSTRE_DEV_%s", argv[2]);                rc = setenv(name, argv[1], 1);                if (rc) {                        printf("error setting env variable %s\n", name);                }        } else {                lcfg_set_devname(argv[2]);        }        return rc;}int jt_lcfg_setup(int argc, char **argv){        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        int i;        int rc;        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);        if (argc > 6)                return CMD_HELP;        for (i = 1; i < argc; i++) {                lustre_cfg_bufs_set_string(&bufs, i, argv[i]);        }        lcfg = lustre_cfg_new(LCFG_SETUP, &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;}int jt_obd_detach(int argc, char **argv){        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        int rc;        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);        if (argc != 1)                return CMD_HELP;        lcfg = lustre_cfg_new(LCFG_DETACH, &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;}int jt_obd_cleanup(int argc, char **argv){        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        char force = 'F';        char failover = 'A';        char flags[3] = { 0 };        int flag_cnt = 0, n;        int rc;        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);        if (argc < 1 || argc > 3)                return CMD_HELP;        /* we are protected from overflowing our buffer by the argc         * check above         */        for (n = 1; n < argc; n++) {                if (strcmp(argv[n], "force") == 0) {                        flags[flag_cnt++] = force;                } else if (strcmp(argv[n], "failover") == 0) {                        flags[flag_cnt++] = failover;                } else {                        fprintf(stderr, "unknown option: %s", argv[n]);                        return CMD_HELP;                }        }        if (flag_cnt) {                lustre_cfg_bufs_set_string(&bufs, 1, flags);        }        lcfg = lustre_cfg_new(LCFG_CLEANUP, &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;}static int do_add_uuid(char * func, char *uuid, lnet_nid_t nid) {        int rc;        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        lustre_cfg_bufs_reset(&bufs, lcfg_devname);        if (uuid)                lustre_cfg_bufs_set_string(&bufs, 1, uuid);        lcfg = lustre_cfg_new(LCFG_ADD_UUID, &bufs);        lcfg->lcfg_nid = nid;        /* Poison NAL -- pre 1.4.6 will LASSERT on 0 NAL, this way it            doesn't work without crashing (bz 10130) */        lcfg->lcfg_nal = 0x5a;#if 0        fprintf(stderr, "adding\tnid: %d\tuuid: %s\n",               lcfg->lcfg_nid, uuid);#endif        rc = lcfg_ioctl(func, OBD_DEV_ID, lcfg);        lustre_cfg_free(lcfg);        if (rc) {                fprintf(stderr, "IOC_PORTAL_ADD_UUID failed: %s\n",                        strerror(errno));                return -1;        }        printf ("Added uuid %s: %s\n", uuid, libcfs_nid2str(nid));        return 0;}int jt_lcfg_add_uuid(int argc, char **argv){        lnet_nid_t nid;                if (argc != 3) {                                return CMD_HELP;        }        nid = libcfs_str2nid(argv[2]);        if (nid == LNET_NID_ANY) {                fprintf (stderr, "Can't parse NID %s\n", argv[2]);                return (-1);        }        return do_add_uuid(argv[0], argv[1], nid);}int obd_add_uuid(char *uuid, lnet_nid_t nid){        return do_add_uuid("obd_add_uuid", uuid, nid);}int jt_lcfg_del_uuid(int argc, char **argv){        int rc;        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        if (argc != 2) {                fprintf(stderr, "usage: %s <uuid>\n", argv[0]);                return 0;        }        lustre_cfg_bufs_reset(&bufs, lcfg_devname);        if (strcmp (argv[1], "_all_"))                lustre_cfg_bufs_set_string(&bufs, 1, argv[1]);                lcfg = lustre_cfg_new(LCFG_DEL_UUID, &bufs);        rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg);        lustre_cfg_free(lcfg);        if (rc) {                fprintf(stderr, "IOC_PORTAL_DEL_UUID failed: %s\n",                        strerror(errno));                return -1;        }        return 0;}int jt_lcfg_del_mount_option(int argc, char **argv){        int rc;        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        if (argc != 2)                return CMD_HELP;        lustre_cfg_bufs_reset(&bufs, lcfg_devname);        /* profile name */        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;}int jt_lcfg_set_timeout(int argc, char **argv){        int rc;        struct lustre_cfg_bufs bufs;        struct lustre_cfg *lcfg;        fprintf(stderr, "%s has been deprecated. Use conf_param instead.\n"                "e.g. conf_param lustre-MDT0000 obd_timeout=50\n",                jt_cmdname(argv[0]));        return CMD_HELP;        if (argc != 2)                return CMD_HELP;        lustre_cfg_bufs_reset(&bufs, lcfg_devname);        lcfg = lustre_cfg_new(LCFG_SET_TIMEOUT, &bufs);        lcfg->lcfg_num = atoi(argv[1]);                rc = lcfg_ioctl(argv[0], OBD_DEV_ID, lcfg);        //rc = lcfg_mgs_ioctl(argv[0], OBD_DEV_ID, lcfg);

⌨️ 快捷键说明

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