X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmdc%2Flproc_mdc.c;h=cf21905c214fb959944de09eee6beef490f0be96;hp=1530dd14c5c11b01d908cd04cab9519e4fe44489;hb=f07508d17b49574c7ea47a855c6e8af2b23c3add;hpb=e1b63fd21177b40d5c23cedd9e5d81b461db53c3 diff --git a/lustre/mdc/lproc_mdc.c b/lustre/mdc/lproc_mdc.c index 1530dd1..cf21905 100644 --- a/lustre/mdc/lproc_mdc.c +++ b/lustre/mdc/lproc_mdc.c @@ -149,15 +149,14 @@ static int mdc_max_dirty_mb_seq_show(struct seq_file *m, void *v) { struct obd_device *dev = m->private; struct client_obd *cli = &dev->u.cli; - long val; - int mult; + unsigned long val; spin_lock(&cli->cl_loi_list_lock); - val = cli->cl_dirty_max_pages; + val = PAGES_TO_MiB(cli->cl_dirty_max_pages); spin_unlock(&cli->cl_loi_list_lock); - mult = 1 << (20 - PAGE_SHIFT); - return lprocfs_seq_read_frac_helper(m, val, mult); + seq_printf(m, "%lu\n", val); + return 0; } static ssize_t mdc_max_dirty_mb_seq_write(struct file *file, @@ -167,18 +166,26 @@ static ssize_t mdc_max_dirty_mb_seq_write(struct file *file, struct seq_file *sfl = file->private_data; struct obd_device *dev = sfl->private; struct client_obd *cli = &dev->u.cli; - s64 pages_number; + char kernbuf[22] = ""; + u64 pages_number; int rc; - rc = lprocfs_str_with_units_to_s64(buffer, count, &pages_number, 'M'); - if (rc) - return rc; + if (count >= sizeof(kernbuf)) + return -EINVAL; - pages_number >>= PAGE_SHIFT; + if (copy_from_user(kernbuf, buffer, count)) + return -EFAULT; + kernbuf[count] = 0; + + rc = sysfs_memparse(kernbuf, count, &pages_number, "MiB"); + if (rc < 0) + return rc; + /* MB -> pages */ + pages_number = round_up(pages_number, 1024 * 1024) >> PAGE_SHIFT; if (pages_number <= 0 || - pages_number >= OSC_MAX_DIRTY_MB_MAX << (20 - PAGE_SHIFT) || - pages_number > totalram_pages / 4) /* 1/4 of RAM */ + pages_number >= MiB_TO_PAGES(OSC_MAX_DIRTY_MB_MAX) || + pages_number > cfs_totalram_pages() / 4) /* 1/4 of RAM */ return -ERANGE; spin_lock(&cli->cl_loi_list_lock); @@ -252,7 +259,8 @@ mdc_cached_mb_seq_write(struct file *file, const char __user *buffer, struct seq_file *sfl = file->private_data; struct obd_device *dev = sfl->private; struct client_obd *cli = &dev->u.cli; - __s64 pages_number; + u64 pages_number; + const char *tmp; long rc; char kernbuf[128]; @@ -263,17 +271,13 @@ mdc_cached_mb_seq_write(struct file *file, const char __user *buffer, return -EFAULT; kernbuf[count] = 0; - buffer += lprocfs_find_named_value(kernbuf, "used_mb:", &count) - - kernbuf; - rc = lprocfs_str_with_units_to_s64(buffer, count, &pages_number, 'M'); - if (rc) + tmp = lprocfs_find_named_value(kernbuf, "used_mb:", &count); + rc = sysfs_memparse(tmp, count, &pages_number, "MiB"); + if (rc < 0) return rc; pages_number >>= PAGE_SHIFT; - if (pages_number < 0) - return -ERANGE; - rc = atomic_long_read(&cli->cl_lru_in_list) - pages_number; if (rc > 0) { struct lu_env *env; @@ -465,11 +469,11 @@ static ssize_t mdc_dom_min_repsize_seq_write(struct file *file, const char __user *buffer, size_t count, loff_t *off) { - struct obd_device *dev; + struct seq_file *m = file->private_data; + struct obd_device *dev = m->private; unsigned int val; int rc; - dev = ((struct seq_file *)file->private_data)->private; rc = kstrtouint_from_user(buffer, count, 0, &val); if (rc) return rc;