- if (write) {
- rc = lprocfs_str_with_units_to_s64(buffer, *lenp, &val, 'M');
- if (rc)
- return rc;
-
- if (val < 0)
- return -ERANGE;
-
- val >>= PAGE_SHIFT;
-
- /* Don't allow them to let dirty pages exceed 90% of system
- * memory and set a hard minimum of 4MB. */
- if (val > ((totalram_pages / 10) * 9)) {
- CERROR("Refusing to set max dirty pages to %lld, "
- "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 (val < 4 << (20 - PAGE_SHIFT)) {
- obd_max_dirty_pages = 4 << (20 - PAGE_SHIFT);
- } else {
- obd_max_dirty_pages = val;
- }
- } else {
- char buf[21];
- int len;
-
- len = lprocfs_read_frac_helper(buf, sizeof(buf),
- *(unsigned long *)table->data,
- 1 << (20 - PAGE_SHIFT));
- if (len > *lenp)
- len = *lenp;
- buf[len] = '\0';
- if (copy_to_user(buffer, buf, len))
- return -EFAULT;
- *lenp = len;