Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
LU-9679 lustre: avoid cast of file->private_data
[fs/lustre-release.git]
/
lustre
/
mdc
/
lproc_mdc.c
diff --git
a/lustre/mdc/lproc_mdc.c
b/lustre/mdc/lproc_mdc.c
index
1530dd1
..
cf21905
100644
(file)
--- 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;