aboutsummaryrefslogtreecommitdiff
path: root/arch/s390/hypfs/inode.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2008-07-15 13:45:59 +0200
committerIngo Molnar <mingo@elte.hu>2008-07-15 13:45:59 +0200
commit91d0322bef047e2916b3e52741411bffc63929cb (patch)
tree44c4fd13cc17755a6db8a3d70cffb86e57a838dc /arch/s390/hypfs/inode.c
parent065cb3dfe24978651caedfa54da585388ad15dde (diff)
parent50515af207d410c9f228380e529c56f43c3de0bd (diff)
Merge branch 'linus' into x86/urgent
Diffstat (limited to 'arch/s390/hypfs/inode.c')
-rw-r--r--arch/s390/hypfs/inode.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/arch/s390/hypfs/inode.c b/arch/s390/hypfs/inode.c
index 4b010ff814c..7383781f3e6 100644
--- a/arch/s390/hypfs/inode.c
+++ b/arch/s390/hypfs/inode.c
@@ -150,33 +150,24 @@ static ssize_t hypfs_aio_read(struct kiocb *iocb, const struct iovec *iov,
unsigned long nr_segs, loff_t offset)
{
char *data;
- size_t len;
+ ssize_t ret;
struct file *filp = iocb->ki_filp;
/* XXX: temporary */
char __user *buf = iov[0].iov_base;
size_t count = iov[0].iov_len;
- if (nr_segs != 1) {
- count = -EINVAL;
- goto out;
- }
+ if (nr_segs != 1)
+ return -EINVAL;
data = filp->private_data;
- len = strlen(data);
- if (offset > len) {
- count = 0;
- goto out;
- }
- if (count > len - offset)
- count = len - offset;
- if (copy_to_user(buf, data + offset, count)) {
- count = -EFAULT;
- goto out;
- }
- iocb->ki_pos += count;
+ ret = simple_read_from_buffer(buf, count, &offset, data, strlen(data));
+ if (ret <= 0)
+ return ret;
+
+ iocb->ki_pos += ret;
file_accessed(filp);
-out:
- return count;
+
+ return ret;
}
static ssize_t hypfs_aio_write(struct kiocb *iocb, const struct iovec *iov,
unsigned long nr_segs, loff_t offset)