From: Kit Westneat Date: Fri, 4 Jan 2019 15:02:21 +0000 (-0500) Subject: LU-8939 nodemap: remove deprecated lproc files X-Git-Tag: 2.12.51~25 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=a9b830da51bd4d37cb7188c11ab101a40bc57f7f;ds=sidebyside LU-8939 nodemap: remove deprecated lproc files Before the MGS was able to transfer the nodemap configuration to the MDSes and OSSes, people had to use lproc interfaces in order to load the configuration. This patch removes those deprecated interfaces. Signed-off-by: Kit Westneat Change-Id: I8c8f38755cf2870fbabca9e96d7d51a9ac290193 Reviewed-on: https://review.whamcloud.com/24352 Tested-by: Jenkins Reviewed-by: Andreas Dilger Reviewed-by: James Simmons Tested-by: Maloo Reviewed-by: Sebastien Buisson Reviewed-by: Oleg Drokin --- diff --git a/config/lustre-build.m4 b/config/lustre-build.m4 index 7fec7bb..9110b4d 100644 --- a/config/lustre-build.m4 +++ b/config/lustre-build.m4 @@ -597,7 +597,6 @@ LB_CONFIG_SERVERS # Tests depends from utils (multiop from liblustreapi) AS_IF([test "x$enable_utils" = xno], [enable_tests="no"]) -m4_ifdef([LC_NODEMAP_PROC_DEBUG], [LC_NODEMAP_PROC_DEBUG]) LIBCFS_CONFIG_CDEBUG LC_QUOTA diff --git a/lnet/lnet/nidstrings.c b/lnet/lnet/nidstrings.c index fe3add7..824bdf4 100644 --- a/lnet/lnet/nidstrings.c +++ b/lnet/lnet/nidstrings.c @@ -451,256 +451,6 @@ int cfs_print_nidlist(char *buffer, int count, struct list_head *nidlist) } EXPORT_SYMBOL(cfs_print_nidlist); -/** - * Determines minimum and maximum addresses for a single - * numeric address range - * - * \param ar - * \param[out] *min_nid __u32 representation of min NID - * \param[out] *max_nid __u32 representation of max NID - * \retval -EINVAL unsupported LNET range - * \retval -ERANGE non-contiguous LNET range - */ -static int cfs_ip_ar_min_max(struct addrrange *ar, __u32 *min_nid, - __u32 *max_nid) -{ - struct cfs_expr_list *expr_list; - struct cfs_range_expr *range; - unsigned int min_ip[4] = {0}; - unsigned int max_ip[4] = {0}; - int cur_octet = 0; - bool expect_full_octet = false; - - list_for_each_entry(expr_list, &ar->ar_numaddr_ranges, el_link) { - int re_count = 0; - - list_for_each_entry(range, &expr_list->el_exprs, re_link) { - /* XXX: add support for multiple & non-contig. re's */ - if (re_count > 0) - return -EINVAL; - - /* if a previous octet was ranged, then all remaining - * octets must be full for contiguous range */ - if (expect_full_octet && (range->re_lo != 0 || - range->re_hi != 255)) - return -ERANGE; - - if (range->re_stride != 1) - return -ERANGE; - - if (range->re_lo > range->re_hi) - return -EINVAL; - - if (range->re_lo != range->re_hi) - expect_full_octet = true; - - min_ip[cur_octet] = range->re_lo; - max_ip[cur_octet] = range->re_hi; - - re_count++; - } - - cur_octet++; - } - - if (min_nid != NULL) - *min_nid = ((min_ip[0] << 24) | (min_ip[1] << 16) | - (min_ip[2] << 8) | min_ip[3]); - - if (max_nid != NULL) - *max_nid = ((max_ip[0] << 24) | (max_ip[1] << 16) | - (max_ip[2] << 8) | max_ip[3]); - - return 0; -} - -/** - * Determines minimum and maximum addresses for a single - * numeric address range - * - * \param ar - * \param[out] *min_nid __u32 representation of min NID - * \param[out] *max_nid __u32 representation of max NID - * \retval -EINVAL unsupported LNET range - */ -static int cfs_num_ar_min_max(struct addrrange *ar, __u32 *min_nid, - __u32 *max_nid) -{ - struct cfs_expr_list *el; - struct cfs_range_expr *re; - unsigned int min_addr = 0; - unsigned int max_addr = 0; - - list_for_each_entry(el, &ar->ar_numaddr_ranges, el_link) { - int re_count = 0; - - list_for_each_entry(re, &el->el_exprs, re_link) { - if (re_count > 0) - return -EINVAL; - if (re->re_lo > re->re_hi) - return -EINVAL; - - if (re->re_lo < min_addr || min_addr == 0) - min_addr = re->re_lo; - if (re->re_hi > max_addr) - max_addr = re->re_hi; - - re_count++; - } - } - - if (min_nid != NULL) - *min_nid = min_addr; - if (max_nid != NULL) - *max_nid = max_addr; - - return 0; -} - -/** - * Takes a linked list of nidrange expressions, determines the minimum - * and maximum nid and creates appropriate nid structures - * - * \param[out] *min_nid string representation of min NID - * \param[out] *max_nid string representation of max NID - * \retval -EINVAL unsupported LNET range - * \retval -ERANGE non-contiguous LNET range - */ -int cfs_nidrange_find_min_max(struct list_head *nidlist, char *min_nid, - char *max_nid, size_t nidstr_length) -{ - struct nidrange *first_nidrange; - int netnum; - struct netstrfns *nf; - char *lndname; - __u32 min_addr; - __u32 max_addr; - char min_addr_str[IPSTRING_LENGTH]; - char max_addr_str[IPSTRING_LENGTH]; - int rc; - - first_nidrange = list_entry(nidlist->next, struct nidrange, nr_link); - - netnum = first_nidrange->nr_netnum; - nf = first_nidrange->nr_netstrfns; - lndname = nf->nf_name; - - rc = nf->nf_min_max(nidlist, &min_addr, &max_addr); - if (rc < 0) - return rc; - - nf->nf_addr2str(min_addr, min_addr_str, sizeof(min_addr_str)); - nf->nf_addr2str(max_addr, max_addr_str, sizeof(max_addr_str)); - - snprintf(min_nid, nidstr_length, "%s@%s%d", min_addr_str, lndname, - netnum); - snprintf(max_nid, nidstr_length, "%s@%s%d", max_addr_str, lndname, - netnum); - - return 0; -} -EXPORT_SYMBOL(cfs_nidrange_find_min_max); - -/** - * Determines the min and max NID values for num LNDs - * - * \param *nidlist - * \param[out] *min_nid if provided, returns string representation of min NID - * \param[out] *max_nid if provided, returns string representation of max NID - * \retval -EINVAL unsupported LNET range - * \retval -ERANGE non-contiguous LNET range - */ -static int cfs_num_min_max(struct list_head *nidlist, __u32 *min_nid, - __u32 *max_nid) -{ - struct nidrange *nr; - struct addrrange *ar; - unsigned int tmp_min_addr = 0; - unsigned int tmp_max_addr = 0; - unsigned int min_addr = 0; - unsigned int max_addr = 0; - int nidlist_count = 0; - int rc; - - list_for_each_entry(nr, nidlist, nr_link) { - if (nidlist_count > 0) - return -EINVAL; - - list_for_each_entry(ar, &nr->nr_addrranges, ar_link) { - rc = cfs_num_ar_min_max(ar, &tmp_min_addr, - &tmp_max_addr); - if (rc < 0) - return rc; - - if (tmp_min_addr < min_addr || min_addr == 0) - min_addr = tmp_min_addr; - if (tmp_max_addr > max_addr) - max_addr = tmp_min_addr; - } - } - if (max_nid != NULL) - *max_nid = max_addr; - if (min_nid != NULL) - *min_nid = min_addr; - - return 0; -} - -/** - * Takes an nidlist and determines the minimum and maximum - * ip addresses. - * - * \param *nidlist - * \param[out] *min_nid if provided, returns string representation of min NID - * \param[out] *max_nid if provided, returns string representation of max NID - * \retval -EINVAL unsupported LNET range - * \retval -ERANGE non-contiguous LNET range - */ -static int cfs_ip_min_max(struct list_head *nidlist, __u32 *min_nid, - __u32 *max_nid) -{ - struct nidrange *nr; - struct addrrange *ar; - __u32 tmp_min_ip_addr = 0; - __u32 tmp_max_ip_addr = 0; - __u32 min_ip_addr = 0; - __u32 max_ip_addr = 0; - int nidlist_count = 0; - int rc; - - list_for_each_entry(nr, nidlist, nr_link) { - if (nidlist_count > 0) - return -EINVAL; - - if (nr->nr_all) { - min_ip_addr = 0; - max_ip_addr = 0xffffffff; - break; - } - - list_for_each_entry(ar, &nr->nr_addrranges, ar_link) { - rc = cfs_ip_ar_min_max(ar, &tmp_min_ip_addr, - &tmp_max_ip_addr); - if (rc < 0) - return rc; - - if (tmp_min_ip_addr < min_ip_addr || min_ip_addr == 0) - min_ip_addr = tmp_min_ip_addr; - if (tmp_max_ip_addr > max_ip_addr) - max_ip_addr = tmp_max_ip_addr; - } - - nidlist_count++; - } - - if (max_nid != NULL) - *max_nid = max_ip_addr; - if (min_nid != NULL) - *min_nid = min_ip_addr; - - return 0; -} - static int libcfs_lo_str2addr(const char *str, int nob, __u32 *addr) { @@ -908,8 +658,8 @@ static struct netstrfns libcfs_netstrfns[] = { .nf_str2addr = libcfs_lo_str2addr, .nf_parse_addrlist = libcfs_num_parse, .nf_print_addrlist = libcfs_num_addr_range_print, - .nf_match_addr = libcfs_num_match, - .nf_min_max = cfs_num_min_max }, + .nf_match_addr = libcfs_num_match + }, { .nf_type = SOCKLND, .nf_name = "tcp", .nf_modname = "ksocklnd", @@ -917,8 +667,8 @@ static struct netstrfns libcfs_netstrfns[] = { .nf_str2addr = libcfs_ip_str2addr, .nf_parse_addrlist = cfs_ip_addr_parse, .nf_print_addrlist = libcfs_ip_addr_range_print, - .nf_match_addr = cfs_ip_addr_match, - .nf_min_max = cfs_ip_min_max }, + .nf_match_addr = cfs_ip_addr_match + }, { .nf_type = O2IBLND, .nf_name = "o2ib", .nf_modname = "ko2iblnd", @@ -926,8 +676,8 @@ static struct netstrfns libcfs_netstrfns[] = { .nf_str2addr = libcfs_ip_str2addr, .nf_parse_addrlist = cfs_ip_addr_parse, .nf_print_addrlist = libcfs_ip_addr_range_print, - .nf_match_addr = cfs_ip_addr_match, - .nf_min_max = cfs_ip_min_max }, + .nf_match_addr = cfs_ip_addr_match + }, { .nf_type = GNILND, .nf_name = "gni", .nf_modname = "kgnilnd", @@ -935,8 +685,8 @@ static struct netstrfns libcfs_netstrfns[] = { .nf_str2addr = libcfs_num_str2addr, .nf_parse_addrlist = libcfs_num_parse, .nf_print_addrlist = libcfs_num_addr_range_print, - .nf_match_addr = libcfs_num_match, - .nf_min_max = cfs_num_min_max }, + .nf_match_addr = libcfs_num_match + }, { .nf_type = GNIIPLND, .nf_name = "gip", .nf_modname = "kgnilnd", @@ -944,8 +694,8 @@ static struct netstrfns libcfs_netstrfns[] = { .nf_str2addr = libcfs_ip_str2addr, .nf_parse_addrlist = cfs_ip_addr_parse, .nf_print_addrlist = libcfs_ip_addr_range_print, - .nf_match_addr = cfs_ip_addr_match, - .nf_min_max = cfs_ip_min_max }, + .nf_match_addr = cfs_ip_addr_match + }, { .nf_type = PTL4LND, .nf_name = "ptlf", .nf_modname = "kptl4lnd", @@ -953,8 +703,8 @@ static struct netstrfns libcfs_netstrfns[] = { .nf_str2addr = libcfs_num_str2addr, .nf_parse_addrlist = libcfs_num_parse, .nf_print_addrlist = libcfs_num_addr_range_print, - .nf_match_addr = libcfs_num_match, - .nf_min_max = cfs_num_min_max}, + .nf_match_addr = libcfs_num_match + }, }; static const size_t libcfs_nnetstrfns = ARRAY_SIZE(libcfs_netstrfns); diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 227fd38..493e4e2 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -3336,23 +3336,6 @@ AS_IF([test "x$enable_quota" != xno -a "x$enable_utils" != xno], [ ]) # LC_QUOTA # -# LC_CONFIG_NODEMAP_PROC_DEBUG -# -# enable nodemap proc file debugging -# -AC_DEFUN([LC_NODEMAP_PROC_DEBUG], [ -AC_MSG_CHECKING([whether to enable nodemap proc debug]) -AC_ARG_ENABLE([nodemap_proc_debug], - AC_HELP_STRING([--enable-nodemap-proc-debug], - [enable nodemap proc debug]), - [], [enable_nodemap_proc_debug="no"]) -AC_MSG_RESULT([$enable_nodemap_proc_debug]) -AS_IF([test "x$enable_nodemap_proc_debug" != xno], - [AC_DEFINE(NODEMAP_PROC_DEBUG, 1, - [enable nodemap proc debug support])]) -]) # LC_NODEMAP_PROC_DEBUG - -# # LC_OSD_ADDON # # configure support for optional OSD implementation diff --git a/lustre/ptlrpc/nodemap_internal.h b/lustre/ptlrpc/nodemap_internal.h index 6d6b9d7..4b8312e 100644 --- a/lustre/ptlrpc/nodemap_internal.h +++ b/lustre/ptlrpc/nodemap_internal.h @@ -35,12 +35,6 @@ #define DEFAULT_NODEMAP "default" -/* Turn on proc debug interface to allow OSS and - * MDS nodes to configure nodemap independently of - * MGS (since the nodemap distribution is not written - * yet */ -#define NODEMAP_PROC_DEBUG 1 - /* Default nobody uid and gid values */ #define NODEMAP_NOBODY_UID 99 diff --git a/lustre/ptlrpc/nodemap_lproc.c b/lustre/ptlrpc/nodemap_lproc.c index 29ba26b..d0858d1 100644 --- a/lustre/ptlrpc/nodemap_lproc.c +++ b/lustre/ptlrpc/nodemap_lproc.c @@ -568,609 +568,20 @@ static int nodemap_audit_mode_seq_show(struct seq_file *m, void *data) return 0; } -#ifdef NODEMAP_PROC_DEBUG -/** - * Helper functions to set nodemap flags. - * - * \param[in] buffer string, which is "1" or "0" to set/unset flag - * \param[in] count \a buffer length - * \param[out] flag_p where to store flag value - * \retval \a count on success - * \retval negative number on error - */ -static int nodemap_proc_read_flag(const char __user *buffer, - unsigned long count, unsigned int *flag_p) -{ - char scratch[NODEMAP_LPROC_FLAG_LEN + 1]; - long unsigned int flag_buf; - int rc; - - if (count == 0) - return 0; - - if (count >= sizeof(scratch)) - return -EINVAL; - - if (copy_from_user(scratch, buffer, count)) - return -EFAULT; - - scratch[count] = '\0'; - rc = kstrtoul(scratch, 10, &flag_buf); - if (rc != 0) - return -EINVAL; - - *flag_p = flag_buf; - - return count; -} - -/** - * Set the squash UID. - * - * \param[in] file proc file - * \param[in] buffer string representing squash UID to set - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -nodemap_squash_uid_seq_write(struct file *file, const char __user *buffer, - size_t count, loff_t *off) -{ - char squash[NODEMAP_LPROC_ID_LEN + 1]; - struct seq_file *m = file->private_data; - long unsigned int squash_uid; - int rc; - - if (count == 0) - return 0; - - if (count >= sizeof(squash)) - return -EINVAL; - - if (copy_from_user(squash, buffer, count)) - return -EFAULT; - - squash[count] = '\0'; - rc = kstrtoul(squash, 10, &squash_uid); - if (rc != 0) - return -EINVAL; - - rc = nodemap_set_squash_uid(m->private, squash_uid); - if (rc != 0) - return rc; - - return count; -} - -/** - * Set the squash GID. - * - * \param[in] file proc file - * \param[in] buffer string representing squash GID to set - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -nodemap_squash_gid_seq_write(struct file *file, const char __user *buffer, - size_t count, loff_t *off) -{ - char squash[NODEMAP_LPROC_ID_LEN + 1]; - struct seq_file *m = file->private_data; - long unsigned int squash_gid; - int rc; - - if (count == 0) - return 0; - - if (count >= sizeof(squash)) - return -EINVAL; - - if (copy_from_user(squash, buffer, count)) - return -EFAULT; - - squash[count] = '\0'; - rc = kstrtoul(squash, 10, &squash_gid); - if (rc != 0) - return -EINVAL; - - rc = nodemap_set_squash_gid(m->private, squash_gid); - if (rc != 0) - return rc; - - return count; -} - -/** - * Set/unset the trusted flag. - * - * \param[in] file proc file - * \param[in] buffer string, "1" or "0" - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -nodemap_trusted_seq_write(struct file *file, const char __user *buffer, - size_t count, loff_t *off) -{ - struct seq_file *m = file->private_data; - int flags; - int rc; - - rc = nodemap_proc_read_flag(buffer, count, &flags); - if (rc < 0) - return rc; - - rc = nodemap_set_trust_client_ids(m->private, flags); - if (rc != 0) - return rc; - - return count; -} - -/** - * Set/unset the admin flag. - * - * \param[in] file proc file - * \param[in] buffer string, "1" or "0" - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -nodemap_admin_seq_write(struct file *file, const char __user *buffer, - size_t count, loff_t *off) -{ - struct seq_file *m = file->private_data; - int flags; - int rc; - - rc = nodemap_proc_read_flag(buffer, count, &flags); - if (rc < 0) - return rc; - - rc = nodemap_set_allow_root(m->private, flags); - if (rc != 0) - return rc; - - return count; -} - -/** - * Add a nodemap. - * - * \param[in] file proc file - * \param[in] buffer string, name of the nodemap to add - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -lprocfs_add_nodemap_seq_write(struct file *file, const char __user *buffer, - size_t count, loff_t *off) -{ - char nodemap_name[LUSTRE_NODEMAP_NAME_LENGTH + 1]; - char *cpybuf = NULL; - char *pos; - int rc; - - if (count == 0) - return 0; - - if (count >= sizeof(nodemap_name)) - return -EINVAL; - - if (copy_from_user(nodemap_name, buffer, count)) - return -EFAULT; - - nodemap_name[count] = '\0'; - - cpybuf = nodemap_name; - pos = strsep(&cpybuf, " \n"); - if (pos == NULL) - return -EINVAL; - - rc = nodemap_add(nodemap_name); - if (rc == 0) - rc = count; - - return rc; -} -LPROC_SEQ_FOPS_WR_ONLY(nodemap, add_nodemap); - -/** - * Delete a nodemap. - * - * \param[in] file proc file - * \param[in] buffer string, name of the nodemap to delete - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -lprocfs_del_nodemap_seq_write(struct file *file, const char __user *buffer, - size_t count, loff_t *off) -{ - char nodemap_name[LUSTRE_NODEMAP_NAME_LENGTH + 1]; - char *cpybuf = NULL; - char *pos; - int rc = count; - - if (count == 0) - return 0; - - if (count >= sizeof(nodemap_name)) - return -EINVAL; - - if (copy_from_user(nodemap_name, buffer, count)) - return -EFAULT; - - nodemap_name[count] = '\0'; - - cpybuf = nodemap_name; - pos = strsep(&cpybuf, " \n"); - if (pos == NULL) - return -EINVAL; - - rc = nodemap_del(nodemap_name); - if (rc == 0) - rc = count; - - return rc; - -} -LPROC_SEQ_FOPS_WR_ONLY(nodemap, del_nodemap); - -/** - * Helper function to parse a NID string. - * - * \param[in] rangestr string representation of NIDs, see libcfs_str2nid() - * \param[out] nids array of two nids - * \retval 0 on success - * \retval negative number on error - */ -static int parse_nids(char *rangestr, lnet_nid_t nids[2]) -{ - struct list_head nidlist; - char nidstr[2][LNET_NIDSTR_SIZE]; - char nidrange_str[2 * LNET_NIDSTR_SIZE + 2]; - int rc = 0; - - INIT_LIST_HEAD(&nidlist); - - if (cfs_parse_nidlist(rangestr, strlen(rangestr), - &nidlist) <= 0) - return -EINVAL; - - rc = cfs_nidrange_find_min_max(&nidlist, nidstr[0], nidstr[1], - LNET_NIDSTR_SIZE); - if (rc < 0) - return rc; - - snprintf(nidrange_str, sizeof(nidrange_str), "%s:%s", - nidstr[0], nidstr[1]); - - rc = nodemap_parse_range(nidrange_str, nids); - if (rc != 0) - return -EINVAL; - - cfs_free_nidlist(&nidlist); - - return 0; -} - -/** - * Add a NID range to nodemap. - * - * \param[in] file proc file - * \param[in] buffer string, " " - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -lprocfs_add_nodemap_range_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) -{ - char name_range[LUSTRE_NODEMAP_NAME_LENGTH + - LNET_NIDSTR_SIZE * 2 + 2]; - char *cpybuf = NULL; - char *name; - char *rangestr = NULL; - lnet_nid_t nids[2]; - int rc; - - if (count == 0) - return 0; - - if (count >= sizeof(name_range)) - GOTO(out, rc = -EINVAL); - - if (copy_from_user(name_range, buffer, count)) - GOTO(out, rc = -EFAULT); - - name_range[count] = '\0'; - - cpybuf = name_range; - name = strsep(&cpybuf, " "); - if (name == NULL) - GOTO(out, rc = -EINVAL); - - rangestr = strsep(&cpybuf, " \n"); - if (rangestr == NULL) - GOTO(out, rc = -EINVAL); - - rc = parse_nids(rangestr, nids); - if (rc != 0) - GOTO(out, rc = rc); - - rc = nodemap_add_range(name, nids); - if (rc != 0) - GOTO(out, rc = -EINVAL); - - if (rc == 0) - rc = count; - -out: - return rc; -} -LPROC_SEQ_FOPS_WR_ONLY(nodemap, add_nodemap_range); - -/** - * Delete a NID range from nodemap. - * - * \param[in] file proc file - * \param[in] buffer string, " " - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -lprocfs_del_nodemap_range_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) -{ - char name_range[LUSTRE_NODEMAP_NAME_LENGTH + - LNET_NIDSTR_SIZE * 2 + 2]; - char *cpybuf = NULL; - char *name; - char *rangestr = NULL; - lnet_nid_t nids[2]; - int rc; - - if (count == 0) - return 0; - - if (count >= sizeof(name_range)) - GOTO(out, rc = -EINVAL); - - if (copy_from_user(name_range, buffer, count)) - GOTO(out, rc = -EFAULT); - - name_range[count] = '\0'; - - cpybuf = name_range; - name = strsep(&cpybuf, " "); - if (name == NULL) - GOTO(out, rc = -EINVAL); - - rangestr = strsep(&cpybuf, " \n"); - if (rangestr == NULL) - GOTO(out, rc = -EINVAL); - - rc = parse_nids(rangestr, nids); - if (rc != 0) - GOTO(out, rc = rc); - - rc = nodemap_del_range(name, nids); - if (rc != 0) - GOTO(out, rc = -EINVAL); - - if (rc == 0) - rc = count; - -out: - return rc; -} -LPROC_SEQ_FOPS_WR_ONLY(nodemap, del_nodemap_range); - -/** - * Add an idmap to nodemap. - * - * \param[in] file proc file - * \param[in] buffer string, " " - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -lprocfs_add_nodemap_idmap_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) -{ - char name_idmapstr[LUSTRE_NODEMAP_NAME_LENGTH + 16]; - char *cpybuf = NULL; - char *name; - char *idtypestr = NULL; - char *idmapstr = NULL; - __u32 idmap[2]; - int rc = count; - - if (count == 0) - return 0; - - if (count >= sizeof(name_idmapstr)) - GOTO(out, rc = -EINVAL); - - if (copy_from_user(name_idmapstr, buffer, count)) - GOTO(out, rc = -EFAULT); - - name_idmapstr[count] = '\0'; - - cpybuf = name_idmapstr; - name = strsep(&cpybuf, " "); - if (name == NULL) - GOTO(out, rc = -EINVAL); - - idtypestr = strsep(&cpybuf, " "); - if (idtypestr == NULL) - GOTO(out, rc = -EINVAL); - - idmapstr = strsep(&cpybuf, " \n"); - if (idmapstr == NULL) - GOTO(out, rc = -EINVAL); - - rc = nodemap_parse_idmap(idmapstr, idmap); - if (rc != 0) - GOTO(out, rc = -EINVAL); - - if (strcmp(idtypestr, "uid") == 0) - rc = nodemap_add_idmap(name, NODEMAP_UID, idmap); - else if (strcmp(idtypestr, "gid") == 0) - rc = nodemap_add_idmap(name, NODEMAP_GID, idmap); - else - GOTO(out, rc = -EINVAL); - - if (rc != 0) - GOTO(out, rc = -EINVAL); - - if (rc == 0) - rc = count; - -out: - return rc; -} -LPROC_SEQ_FOPS_WR_ONLY(nodemap, add_nodemap_idmap); - -/** - * Delete an idmap from nodemap. - * - * \param[in] file proc file - * \param[in] buffer string, " " - * \param[in] count \a buffer length - * \param[in] off unused - * \retval \a count on success - * \retval negative number on error - */ -static ssize_t -lprocfs_del_nodemap_idmap_seq_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *off) -{ - char name_idmapstr[LUSTRE_NODEMAP_NAME_LENGTH + 16]; - char *cpybuf = NULL; - char *name; - char *idtypestr = NULL; - char *idmapstr = NULL; - __u32 idmap[2]; - int rc = count; - - if (count == 0) - return 0; - - if (count >= sizeof(name_idmapstr)) - GOTO(out, rc = -EINVAL); - - if (copy_from_user(name_idmapstr, buffer, count)) - GOTO(out, rc = -EFAULT); - - name_idmapstr[count] = '\0'; - - cpybuf = name_idmapstr; - name = strsep(&cpybuf, " "); - if (name == NULL) - GOTO(out, rc = -EINVAL); - - idtypestr = strsep(&cpybuf, " "); - if (idtypestr == NULL) - GOTO(out, rc = -EINVAL); - - idmapstr = strsep(&cpybuf, " \n"); - if (idmapstr == NULL) - GOTO(out, rc = -EINVAL); - - rc = nodemap_parse_idmap(idmapstr, idmap); - if (rc != 0) - GOTO(out, rc = -EINVAL); - - if (strcmp(idtypestr, "uid") == 0) - rc = nodemap_del_idmap(name, NODEMAP_UID, idmap); - else if (strcmp(idtypestr, "gid") == 0) - rc = nodemap_del_idmap(name, NODEMAP_GID, idmap); - else - GOTO(out, rc = -EINVAL); - - if (rc != 0) - GOTO(out, rc = -EINVAL); - - if (rc == 0) - rc = count; - -out: - return rc; -} -LPROC_SEQ_FOPS_WR_ONLY(nodemap, del_nodemap_idmap); -#endif /* NODEMAP_PROC_DEBUG */ - static struct lprocfs_vars lprocfs_nm_module_vars[] = { { .name = "active", .fops = &nodemap_active_fops, }, -#ifdef NODEMAP_PROC_DEBUG - { - .name = "add_nodemap", - .fops = &nodemap_add_nodemap_fops, - }, - { - .name = "remove_nodemap", - .fops = &nodemap_del_nodemap_fops, - }, - { - .name = "add_nodemap_range", - .fops = &nodemap_add_nodemap_range_fops, - }, - { - .name = "del_nodemap_range", - .fops = &nodemap_del_nodemap_range_fops, - }, - { - .name = "add_nodemap_idmap", - .fops = &nodemap_add_nodemap_idmap_fops, - }, - { - .name = "del_nodemap_idmap", - .fops = &nodemap_del_nodemap_idmap_fops, - }, -#endif /* NODEMAP_PROC_DEBUG */ { NULL } }; -#ifdef NODEMAP_PROC_DEBUG -LPROC_SEQ_FOPS(nodemap_trusted); -LPROC_SEQ_FOPS(nodemap_admin); -LPROC_SEQ_FOPS(nodemap_squash_uid); -LPROC_SEQ_FOPS(nodemap_squash_gid); -#else LPROC_SEQ_FOPS_RO(nodemap_trusted); LPROC_SEQ_FOPS_RO(nodemap_admin); LPROC_SEQ_FOPS_RO(nodemap_squash_uid); LPROC_SEQ_FOPS_RO(nodemap_squash_gid); -#endif LPROC_SEQ_FOPS_RO(nodemap_deny_unknown); LPROC_SEQ_FOPS_RO(nodemap_map_mode);