X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Futils%2Flustre_cfg.c;h=b409656779e9b66fed8739c709160017cb39fd3d;hp=9079242a75ca138c9412b0a9632f67aa9f8955d7;hb=5ad45a6b28a1a4da6f22a508c0a5029c4db5e4b5;hpb=23b26e90a343ecff14c67dea1bafb65e23473cd6;ds=sidebyside diff --git a/lustre/utils/lustre_cfg.c b/lustre/utils/lustre_cfg.c index 9079242..b409656 100644 --- a/lustre/utils/lustre_cfg.c +++ b/lustre/utils/lustre_cfg.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -26,8 +24,10 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011, 2012, Whamcloud, Inc. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -77,13 +77,26 @@ static char * lcfg_devname; int lcfg_set_devname(char *name) { + char *ptr; + int digit = 1; + if (name) { if (lcfg_devname) free(lcfg_devname); /* quietly strip the unnecessary '$' */ if (*name == '$' || *name == '%') name++; - if (isdigit(*name)) { + + ptr = name; + while (*ptr != '\0') { + if (!isdigit(*ptr)) { + digit = 0; + break; + } + ptr++; + } + + if (digit) { /* We can't translate from dev # to name */ lcfg_devname = NULL; } else { @@ -646,6 +659,30 @@ static void clean_path(char *path) } } +/* Supporting file paths creates perilous behavoir: LU-888. + * Path support is deprecated. + * If a path is supplied it must begin with /proc. */ +static void lprocfs_param_pattern(const char *cmd, const char *path, char *buf, + size_t buf_size) +{ + /* test path to see if it begins with '/proc/' */ + if (strncmp(path, "/proc/", strlen("/proc/")) == 0) { + static int warned; + if (!warned) { + fprintf(stderr, "%s: specifying parameters via " + "full paths is deprecated.\n", cmd); +#if LUSTRE_VERSION_CODE >= OBD_OCD_VERSION(2,6,50,0) +#warning "remove deprecated full path tunable access" +#endif + warned = 1; + } + snprintf(buf, buf_size, "%s", path); + } else { + snprintf(buf, buf_size, "/proc/{fs,sys}/{lnet,lustre}/%s", + path); + } +} + struct param_opts { int only_path:1; int show_path:1; @@ -722,7 +759,6 @@ static int listparam_display(struct param_opts *popt, char *pattern) int jt_lcfg_listparam(int argc, char **argv) { - int fp; int rc = 0, i; struct param_opts popt; char pattern[PATH_MAX]; @@ -741,15 +777,7 @@ int jt_lcfg_listparam(int argc, char **argv) clean_path(path); - /* If the entire path is specified as input */ - fp = open(path, O_RDONLY); - if (fp < 0) { - snprintf(pattern, PATH_MAX, "/proc/{fs,sys}/{lnet,lustre}/%s", - path); - } else { - strcpy(pattern, path); - close(fp); - } + lprocfs_param_pattern(argv[0], path, pattern, sizeof(pattern)); rc = listparam_display(&popt, pattern); if (rc < 0) @@ -863,7 +891,6 @@ static int getparam_display(struct param_opts *popt, char *pattern) int jt_lcfg_getparam(int argc, char **argv) { - int fp; int rc = 0, i; struct param_opts popt; char pattern[PATH_MAX]; @@ -873,30 +900,24 @@ int jt_lcfg_getparam(int argc, char **argv) if (rc < 0 || rc >= argc) return CMD_HELP; - for (i = rc; i < argc; i++) { - path = argv[i]; + for (i = rc, rc = 0; i < argc; i++) { + int rc2; - clean_path(path); + path = argv[i]; - /* If the entire path is specified as input */ - fp = open(path, O_RDONLY); - if (fp < 0) { - snprintf(pattern, PATH_MAX, "/proc/{fs,sys}/{lnet,lustre}/%s", - path); - } else { - strcpy(pattern, path); - close(fp); - } + clean_path(path); - if (popt.only_path) - rc = listparam_display(&popt, pattern); - else - rc = getparam_display(&popt, pattern); - if (rc < 0) - return rc; - } + lprocfs_param_pattern(argv[0], path, pattern, sizeof(pattern)); - return 0; + if (popt.only_path) + rc2 = listparam_display(&popt, pattern); + else + rc2 = getparam_display(&popt, pattern); + if (rc2 < 0 && rc == 0) + rc = rc2; + } + + return rc; } static int setparam_cmdline(int argc, char **argv, struct param_opts *popt) @@ -966,7 +987,6 @@ static int setparam_display(struct param_opts *popt, char *pattern, char *value) int jt_lcfg_setparam(int argc, char **argv) { - int fp; int rc = 0, i; struct param_opts popt; char pattern[PATH_MAX]; @@ -976,7 +996,9 @@ int jt_lcfg_setparam(int argc, char **argv) if (rc < 0 || rc >= argc) return CMD_HELP; - for (i = rc; i < argc; i++) { + for (i = rc, rc = 0; i < argc; i++) { + int rc2; + if ((value = strchr(argv[i], '=')) != NULL) { /* format: set_param a=b */ *value = '\0'; @@ -994,22 +1016,15 @@ int jt_lcfg_setparam(int argc, char **argv) clean_path(path); - /* If the entire path is specified as input */ - fp = open(path, O_RDONLY); - if (fp < 0) { - snprintf(pattern, PATH_MAX, "/proc/{fs,sys}/{lnet,lustre}/%s", - path); - } else { - strcpy(pattern, path); - close(fp); - } + lprocfs_param_pattern(argv[0], path, pattern, sizeof(pattern)); - rc = setparam_display(&popt, pattern, value); + rc2 = setparam_display(&popt, pattern, value); path = NULL; value = NULL; - if (rc < 0) - return rc; - } + if (rc2 < 0 && rc == 0) + rc = rc2; + } - return 0; + return rc; } +