[PATCH] Remove unnecessary kmalloc/kfree calls in mtdchar
This patch removes repeated calls to kmalloc / kfree in mtd_write / mtd_read functions, replacing them by a single kmalloc / kfree pair. Signed-off-by: Thiago Galesi <thiagogalesi@gmail.com> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
parent
cd2866faaa
commit
b802c07411
1 changed files with 21 additions and 13 deletions
|
@ -170,16 +170,22 @@ static ssize_t mtd_read(struct file *file, char __user *buf, size_t count,loff_t
|
|||
|
||||
/* FIXME: Use kiovec in 2.5 to lock down the user's buffers
|
||||
and pass them directly to the MTD functions */
|
||||
|
||||
if (count > MAX_KMALLOC_SIZE)
|
||||
kbuf=kmalloc(MAX_KMALLOC_SIZE, GFP_KERNEL);
|
||||
else
|
||||
kbuf=kmalloc(count, GFP_KERNEL);
|
||||
|
||||
if (!kbuf)
|
||||
return -ENOMEM;
|
||||
|
||||
while (count) {
|
||||
|
||||
if (count > MAX_KMALLOC_SIZE)
|
||||
len = MAX_KMALLOC_SIZE;
|
||||
else
|
||||
len = count;
|
||||
|
||||
kbuf=kmalloc(len,GFP_KERNEL);
|
||||
if (!kbuf)
|
||||
return -ENOMEM;
|
||||
|
||||
switch (MTD_MODE(file)) {
|
||||
case MTD_MODE_OTP_FACT:
|
||||
ret = mtd->read_fact_prot_reg(mtd, *ppos, len, &retlen, kbuf);
|
||||
|
@ -215,9 +221,9 @@ static ssize_t mtd_read(struct file *file, char __user *buf, size_t count,loff_t
|
|||
return ret;
|
||||
}
|
||||
|
||||
kfree(kbuf);
|
||||
}
|
||||
|
||||
kfree(kbuf);
|
||||
return total_retlen;
|
||||
} /* mtd_read */
|
||||
|
||||
|
@ -241,18 +247,21 @@ static ssize_t mtd_write(struct file *file, const char __user *buf, size_t count
|
|||
if (!count)
|
||||
return 0;
|
||||
|
||||
if (count > MAX_KMALLOC_SIZE)
|
||||
kbuf=kmalloc(MAX_KMALLOC_SIZE, GFP_KERNEL);
|
||||
else
|
||||
kbuf=kmalloc(count, GFP_KERNEL);
|
||||
|
||||
if (!kbuf)
|
||||
return -ENOMEM;
|
||||
|
||||
while (count) {
|
||||
|
||||
if (count > MAX_KMALLOC_SIZE)
|
||||
len = MAX_KMALLOC_SIZE;
|
||||
else
|
||||
len = count;
|
||||
|
||||
kbuf=kmalloc(len,GFP_KERNEL);
|
||||
if (!kbuf) {
|
||||
printk("kmalloc is null\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (copy_from_user(kbuf, buf, len)) {
|
||||
kfree(kbuf);
|
||||
return -EFAULT;
|
||||
|
@ -282,10 +291,9 @@ static ssize_t mtd_write(struct file *file, const char __user *buf, size_t count
|
|||
kfree(kbuf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
kfree(kbuf);
|
||||
}
|
||||
|
||||
kfree(kbuf);
|
||||
return total_retlen;
|
||||
} /* mtd_write */
|
||||
|
||||
|
|
Loading…
Reference in a new issue