Whamcloud - gitweb
LU-9679 lustre: avoid cast of file->private_data
[fs/lustre-release.git] / lustre / mdc / lproc_mdc.c
index 1530dd1..cf21905 100644 (file)
@@ -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;