From: Miklos Szeredi This managed to completely evade testing :( Fix return value to be count or -errno. Also bring the function in line with the other store functions on this object, which have more strict input checking. Also fix bdi_set_max_ratio() to actually return an error, instead of always zero. Signed-off-by: Miklos Szeredi Signed-off-by: Andrew Morton --- mm/backing-dev.c | 11 ++++++++--- page-writeback.c | 0 2 files changed, 8 insertions(+), 3 deletions(-) diff -puN mm/backing-dev.c~mm-bdi-export-bdi-attributes-in-sysfs-fix mm/backing-dev.c --- a/mm/backing-dev.c~mm-bdi-export-bdi-attributes-in-sysfs-fix +++ a/mm/backing-dev.c @@ -16,10 +16,15 @@ static ssize_t read_ahead_kb_store(struc { struct backing_dev_info *bdi = dev_get_drvdata(dev); char *end; + unsigned long read_ahead_kb; + ssize_t ret = -EINVAL; - bdi->ra_pages = simple_strtoul(buf, &end, 10) >> (PAGE_SHIFT - 10); - - return end - buf; + read_ahead_kb = simple_strtoul(buf, &end, 10); + if (*buf && (end[0] == '\0' || (end[0] == '\n' && end[1] == '\0'))) { + bdi->ra_pages = read_ahead_kb >> (PAGE_SHIFT - 10); + ret = count; + } + return ret; } #define K(pages) ((pages) << (PAGE_SHIFT - 10)) diff -puN mm/page-writeback.c~mm-bdi-export-bdi-attributes-in-sysfs-fix mm/page-writeback.c _