X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Flinux%2Flinux-sysctl.c;h=0c19fa9706233b384db523b0635739d497a43d7d;hb=1cd2189806c82c31256c5ef9756d1dbf97784844;hp=7287e0b73d4321ab1e37294cc5a7a69102222327;hpb=e12bbee8207c41b2be5c8bb848f03bb81e75b025;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/linux/linux-sysctl.c b/lustre/obdclass/linux/linux-sysctl.c index 7287e0b..0c19fa9 100644 --- a/lustre/obdclass/linux/linux-sysctl.c +++ b/lustre/obdclass/linux/linux-sysctl.c @@ -27,7 +27,7 @@ * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, Intel Corporation. + * Copyright (c) 2011, 2015, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -52,9 +52,10 @@ #include #include +#include #ifdef CONFIG_SYSCTL -struct ctl_table_header *obd_table_header = NULL; +static struct ctl_table_header *obd_table_header; #endif static int @@ -95,31 +96,6 @@ proc_memory_alloc(struct ctl_table *table, int write, void __user *buffer, } static int -proc_pages_alloc(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) -{ - char buf[22]; - int len; - - if (!*lenp || (*ppos && !write)) { - *lenp = 0; - return 0; - } - if (write) - return -EINVAL; - - len = snprintf(buf, sizeof(buf), LPU64"\n", obd_pages_sum()); - if (len > *lenp) - len = *lenp; - buf[len] = '\0'; - if (copy_to_user(buffer, buf, len)) - return -EFAULT; - *lenp = len; - *ppos += *lenp; - return 0; -} - -static int proc_mem_max(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { @@ -145,35 +121,10 @@ proc_mem_max(struct ctl_table *table, int write, void __user *buffer, } static int -proc_pages_max(struct ctl_table *table, int write, void __user *buffer, - size_t *lenp, loff_t *ppos) -{ - char buf[22]; - int len; - - if (!*lenp || (*ppos && !write)) { - *lenp = 0; - return 0; - } - if (write) - return -EINVAL; - - len = snprintf(buf, sizeof(buf), LPU64"\n", obd_pages_max()); - if (len > *lenp) - len = *lenp; - buf[len] = '\0'; - if (copy_to_user(buffer, buf, len)) - return -EFAULT; - *lenp = len; - *ppos += *lenp; - return 0; -} - -static int proc_max_dirty_pages_in_mb(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { - __u64 val; + __s64 val; int rc = 0; if (!table->data || !table->maxlen || !*lenp || (*ppos && !write)) { @@ -181,20 +132,27 @@ proc_max_dirty_pages_in_mb(struct ctl_table *table, int write, return 0; } if (write) { - rc = lprocfs_write_frac_u64_helper(buffer, *lenp, &val, - 1 << (20 - PAGE_CACHE_SHIFT)); - obd_max_dirty_pages = (unsigned long)val; + rc = lprocfs_str_with_units_to_s64(buffer, *lenp, &val, 'M'); + if (rc) + return rc; + + if (val < 0) + return -ERANGE; + + val >>= PAGE_CACHE_SHIFT; /* Don't allow them to let dirty pages exceed 90% of system * memory and set a hard minimum of 4MB. */ - if (obd_max_dirty_pages > ((totalram_pages / 10) * 9)) { - CERROR("Refusing to set max dirty pages to %lu, which " - "is more than 90%% of available RAM; setting " - "to %lu\n", obd_max_dirty_pages, + if (val > ((totalram_pages / 10) * 9)) { + CERROR("Refusing to set max dirty pages to "LPD64", " + "which is more than 90%% of available RAM; " + "setting to %lu\n", val, ((totalram_pages / 10) * 9)); obd_max_dirty_pages = ((totalram_pages / 10) * 9); - } else if (obd_max_dirty_pages < 4 << (20 - PAGE_CACHE_SHIFT)) { + } else if (val < 4 << (20 - PAGE_CACHE_SHIFT)) { obd_max_dirty_pages = 4 << (20 - PAGE_CACHE_SHIFT); + } else { + obd_max_dirty_pages = val; } } else { char buf[21]; @@ -214,39 +172,6 @@ proc_max_dirty_pages_in_mb(struct ctl_table *table, int write, return rc; } -#ifdef RANDOM_FAIL_ALLOC -int proc_alloc_fail_rate(struct ctl_table *table, int write, - void __user *buffer, size_t *lenp, loff_t *ppos) -{ - int rc = 0; - - if (!table->data || !table->maxlen || !*lenp || (*ppos && !write)) { - *lenp = 0; - return 0; - } - if (write) { - rc = lprocfs_write_frac_helper(buffer, *lenp, - (unsigned int*)table->data, - OBD_ALLOC_FAIL_MULT); - } else { - char buf[21]; - int len; - - len = lprocfs_read_frac_helper(buf, 21, - *(unsigned int*)table->data, - OBD_ALLOC_FAIL_MULT); - if (len > *lenp) - len = *lenp; - buf[len] = '\0'; - if (copy_to_user(buffer, buf, len)) - return -EFAULT; - *lenp = len; - } - *ppos += *lenp; - return rc; -} -#endif - #ifdef CONFIG_SYSCTL static struct ctl_table obd_table[] = { { @@ -291,14 +216,6 @@ static struct ctl_table obd_table[] = { }, { INIT_CTL_NAME - .procname = "pagesused", - .data = NULL, - .maxlen = 0, - .mode = 0444, - .proc_handler = &proc_pages_alloc - }, - { - INIT_CTL_NAME .procname = "memused_max", .data = NULL, .maxlen = 0, @@ -307,30 +224,12 @@ static struct ctl_table obd_table[] = { }, { INIT_CTL_NAME - .procname = "pagesused_max", - .data = NULL, - .maxlen = 0, - .mode = 0444, - .proc_handler = &proc_pages_max - }, - { - INIT_CTL_NAME .procname = "ldlm_timeout", .data = &ldlm_timeout, .maxlen = sizeof(int), .mode = 0644, .proc_handler = &proc_set_timeout }, -#ifdef RANDOM_FAIL_ALLOC - { - INIT_CTL_NAME - .procname = "alloc_fail_rate", - .data = &obd_alloc_fail_rate, - .maxlen = sizeof(int), - .mode = 0644, - .proc_handler = &proc_alloc_fail_rate - }, -#endif { INIT_CTL_NAME .procname = "max_dirty_mb",