uio: fix finding mm index for vma
authorHillf Danton <dhillf@gmail.com>
Mon, 28 Mar 2011 21:33:26 +0000 (23:33 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 19 Apr 2011 23:56:02 +0000 (16:56 -0700)
When finding mm index for vma it looks more flexible that the mm could
be sparse, and both the size of mm and the pgoff of vma could give
correct selection.

Signed-off-by: Hillf Danton <dhillf@gmail.com>
Signed-off-by: Hans J. Koch <hjk@hansjkoch.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/uio/uio.c

index 51fe1795d5a8197678a5a00763f62e8a9fe59183..10a029b24159a818e4bf4c83f8ae0bdc2b926524 100644 (file)
@@ -587,14 +587,12 @@ static ssize_t uio_write(struct file *filep, const char __user *buf,
 
 static int uio_find_mem_index(struct vm_area_struct *vma)
 {
-       int mi;
        struct uio_device *idev = vma->vm_private_data;
 
-       for (mi = 0; mi < MAX_UIO_MAPS; mi++) {
-               if (idev->info->mem[mi].size == 0)
+       if (vma->vm_pgoff < MAX_UIO_MAPS) {
+               if (idev->info->mem[vma->vm_pgoff].size == 0)
                        return -1;
-               if (vma->vm_pgoff == mi)
-                       return mi;
+               return (int)vma->vm_pgoff;
        }
        return -1;
 }