2008-02-02 23:03:44

by Miklos Szeredi

[permalink] [raw]
Subject: [patch 1/3] mm: bdi: fix read_ahead_kb_store()

From: Miklos Szeredi <[email protected]>

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 <[email protected]>
---

Index: linux/mm/backing-dev.c
===================================================================
--- linux.orig/mm/backing-dev.c 2008-02-02 23:21:50.000000000 +0100
+++ linux/mm/backing-dev.c 2008-02-02 23:26:01.000000000 +0100
@@ -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))
Index: linux/mm/page-writeback.c
===================================================================
--- linux.orig/mm/page-writeback.c 2008-02-02 20:51:26.000000000 +0100
+++ linux/mm/page-writeback.c 2008-02-02 23:26:15.000000000 +0100
@@ -288,7 +288,7 @@ int bdi_set_max_ratio(struct backing_dev
}
spin_unlock_irqrestore(&bdi_lock, flags);

- return 0;
+ return ret;
}
EXPORT_SYMBOL(bdi_set_max_ratio);


--