From: Al Viro Date: Tue, 16 Jul 2013 13:58:45 +0000 (+0400) Subject: coh901318: don't open-code simple_read_from_buffer() X-Git-Tag: v3.12-rc1~141^2~19 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5d30b4274f1f3315f48ad4b2a9a41abc94d11d16;p=platform%2Fkernel%2Flinux-stable.git coh901318: don't open-code simple_read_from_buffer() ... and BTW, failing copy_to_user() means EFAULT, not EINVAL Signed-off-by: Al Viro --- diff --git a/drivers/dma/coh901318.c b/drivers/dma/coh901318.c index 9bfaddd..31011d2 100644 --- a/drivers/dma/coh901318.c +++ b/drivers/dma/coh901318.c @@ -1339,15 +1339,14 @@ static int coh901318_debugfs_read(struct file *file, char __user *buf, { u64 started_channels = debugfs_dma_base->pm.started_channels; int pool_count = debugfs_dma_base->pool.debugfs_pool_counter; - int i; - int ret = 0; char *dev_buf; char *tmp; - int dev_size; + int ret; + int i; dev_buf = kmalloc(4*1024, GFP_KERNEL); if (dev_buf == NULL) - goto err_kmalloc; + return -ENOMEM; tmp = dev_buf; tmp += sprintf(tmp, "DMA -- enabled dma channels\n"); @@ -1357,26 +1356,11 @@ static int coh901318_debugfs_read(struct file *file, char __user *buf, tmp += sprintf(tmp, "channel %d\n", i); tmp += sprintf(tmp, "Pool alloc nbr %d\n", pool_count); - dev_size = tmp - dev_buf; - - /* No more to read if offset != 0 */ - if (*f_pos > dev_size) - goto out; - if (count > dev_size - *f_pos) - count = dev_size - *f_pos; - - if (copy_to_user(buf, dev_buf + *f_pos, count)) - ret = -EINVAL; - ret = count; - *f_pos += count; - - out: + ret = simple_read_from_buffer(buf, count, f_pos, dev_buf, + tmp - dev_buf); kfree(dev_buf); return ret; - - err_kmalloc: - return 0; } static const struct file_operations coh901318_debugfs_status_operations = {