forked from Minki/linux
dlmfs: convert dlmfs_file_read() to copy_to_user()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
3d3185ae59
commit
0702e4f390
@ -227,7 +227,7 @@ static ssize_t dlmfs_file_read(struct file *filp,
|
||||
loff_t *ppos)
|
||||
{
|
||||
int bytes_left;
|
||||
ssize_t readlen, got;
|
||||
ssize_t got;
|
||||
char *lvb_buf;
|
||||
struct inode *inode = file_inode(filp);
|
||||
|
||||
@ -237,36 +237,31 @@ static ssize_t dlmfs_file_read(struct file *filp,
|
||||
if (*ppos >= i_size_read(inode))
|
||||
return 0;
|
||||
|
||||
/* don't read past the lvb */
|
||||
if (count > i_size_read(inode) - *ppos)
|
||||
count = i_size_read(inode) - *ppos;
|
||||
|
||||
if (!count)
|
||||
return 0;
|
||||
|
||||
if (!access_ok(buf, count))
|
||||
return -EFAULT;
|
||||
|
||||
/* don't read past the lvb */
|
||||
if ((count + *ppos) > i_size_read(inode))
|
||||
readlen = i_size_read(inode) - *ppos;
|
||||
else
|
||||
readlen = count;
|
||||
|
||||
lvb_buf = kmalloc(readlen, GFP_NOFS);
|
||||
lvb_buf = kmalloc(count, GFP_NOFS);
|
||||
if (!lvb_buf)
|
||||
return -ENOMEM;
|
||||
|
||||
got = user_dlm_read_lvb(inode, lvb_buf, readlen);
|
||||
got = user_dlm_read_lvb(inode, lvb_buf, count);
|
||||
if (got) {
|
||||
BUG_ON(got != readlen);
|
||||
bytes_left = __copy_to_user(buf, lvb_buf, readlen);
|
||||
readlen -= bytes_left;
|
||||
BUG_ON(got != count);
|
||||
bytes_left = copy_to_user(buf, lvb_buf, count);
|
||||
count -= bytes_left;
|
||||
} else
|
||||
readlen = 0;
|
||||
count = 0;
|
||||
|
||||
kfree(lvb_buf);
|
||||
|
||||
*ppos = *ppos + readlen;
|
||||
*ppos = *ppos + count;
|
||||
|
||||
mlog(0, "read %zd bytes\n", readlen);
|
||||
return readlen;
|
||||
mlog(0, "read %zu bytes\n", count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t dlmfs_file_write(struct file *filp,
|
||||
|
Loading…
Reference in New Issue
Block a user