[S390] s390/vmcp: use simple_read_from_buffer()
authorAkinobu Mita <akinobu.mita@gmail.com>
Mon, 14 Jul 2008 07:59:14 +0000 (09:59 +0200)
committerHeiko Carstens <heiko.carstens@de.ibm.com>
Mon, 14 Jul 2008 08:02:15 +0000 (10:02 +0200)
Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/char/vmcp.c

index 2f419b0..af616ae 100644 (file)
@@ -61,30 +61,24 @@ static int vmcp_release(struct inode *inode, struct file *file)
 static ssize_t
 vmcp_read(struct file *file, char __user *buff, size_t count, loff_t *ppos)
 {
-       size_t tocopy;
+       ssize_t ret;
+       size_t size;
        struct vmcp_session *session;
 
-       session = (struct vmcp_session *)file->private_data;
+       session = file->private_data;
        if (mutex_lock_interruptible(&session->mutex))
                return -ERESTARTSYS;
        if (!session->response) {
                mutex_unlock(&session->mutex);
                return 0;
        }
-       if (*ppos > session->resp_size) {
-               mutex_unlock(&session->mutex);
-               return 0;
-       }
-       tocopy = min(session->resp_size - (size_t) (*ppos), count);
-       tocopy = min(tocopy, session->bufsize - (size_t) (*ppos));
+       size = min_t(size_t, session->resp_size, session->bufsize);
+       ret = simple_read_from_buffer(buff, count, ppos,
+                                       session->response, size);
 
-       if (copy_to_user(buff, session->response + (*ppos), tocopy)) {
-               mutex_unlock(&session->mutex);
-               return -EFAULT;
-       }
        mutex_unlock(&session->mutex);
-       *ppos += tocopy;
-       return tocopy;
+
+       return ret;
 }
 
 static ssize_t