[PATCH 6/8] Cleanup slabinfo_write()

From: Matthew Dobson
Date: Mon Nov 07 2005 - 19:57:20 EST


Cleanup slabinfo_write().

mcd@arrakis:~/linux/source/linux-2.6.14+slab_cleanup/patches $ diffstat
slabinfo_write.patch
slab.c | 23 +++++++++--------------
1 files changed, 9 insertions(+), 14 deletions(-)

-Matt
Some cleanup for slabinfo_write():

* Set 'res' at declaration instead of later in the function.
* Move an if statement that clearly only needs to be evaluated once
above and outside the loop where it was.
* Move a second if statement into a loop, where it belongs.

Index: linux-2.6.14+slab_cleanup/mm/slab.c
===================================================================
--- linux-2.6.14+slab_cleanup.orig/mm/slab.c 2005-11-07 15:59:14.091887752 -0800
+++ linux-2.6.14+slab_cleanup/mm/slab.c 2005-11-07 16:00:09.005539608 -0800
@@ -3533,7 +3533,7 @@ ssize_t slabinfo_write(struct file *file
size_t count, loff_t *ppos)
{
char kbuf[MAX_SLABINFO_WRITE+1], *tmp;
- int limit, batchcount, shared, res;
+ int limit, batchcount, shared, res = -EINVAL;
struct list_head *p;

if (count > MAX_SLABINFO_WRITE)
@@ -3549,27 +3549,22 @@ ssize_t slabinfo_write(struct file *file
tmp++;
if (sscanf(tmp, " %d %d %d", &limit, &batchcount, &shared) != 3)
return -EINVAL;
+ if (limit < 1 || batchcount < 1 || batchcount > limit || shared < 0)
+ return 0;

/* Find the cache in the chain of caches. */
down(&cache_chain_sem);
- res = -EINVAL;
list_for_each(p,&cache_chain) {
kmem_cache_t *cachep = list_entry(p, kmem_cache_t, next);
+ if (strcmp(cachep->name, kbuf))
+ continue;

- if (!strcmp(cachep->name, kbuf)) {
- if (limit < 1 || batchcount < 1 ||
- batchcount > limit || shared < 0) {
- res = 0;
- } else {
- res = do_tune_cpucache(cachep, limit,
- batchcount, shared);
- }
- break;
- }
+ res = do_tune_cpucache(cachep, limit, batchcount, shared);
+ if (res >= 0)
+ res = count;
+ break;
}
up(&cache_chain_sem);
- if (res >= 0)
- res = count;
return res;
}
#endif /* CONFIG_PROC_FS */