[SCSI] sg: do not set VM_IO flag on mmap-ed pages

Further to the problem discussed in this post:
http://marc.theaimsgroup.com/?l=linux-scsi&m=112540053711489&w=2

It seems that the sg driver does not need to set the VM_IO flag
on pages that it memory maps to the user space since they are
not from the IO space. Ahmed Teirelbar <ahmed.teirelbar@adic.com>
wants the facility and has tested this patch as I have without
adverse effects.

The oops protection is still important. Some users really did
try and use dio transfers from the sg driver to memory mapped
IO space (on a video capture card if my memory serves) during the
lk 2.4 series. I'm not sure how successful it was but that will
now be politely refused in lk 2.6.13+ .

Changelog:
- set the page flags for sg's reserved buffer mmap-ed
to the user space to VM_RESERVED (rather than
VM_RESERVED | VM_IO )

Signed-off-by: Douglas Gilbert <dougg@torque.net>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>

authored by

Douglas Gilbert and committed by
James Bottomley
1c8e71d7 788ce43a

+2 -2
+2 -2
drivers/scsi/sg.c
··· 61 62 #ifdef CONFIG_SCSI_PROC_FS 63 #include <linux/proc_fs.h> 64 - static char *sg_version_date = "20050901"; 65 66 static int sg_proc_init(void); 67 static void sg_proc_cleanup(void); ··· 1299 sg_rb_correct4mmap(rsv_schp, 1); /* do only once per fd lifetime */ 1300 sfp->mmap_called = 1; 1301 } 1302 - vma->vm_flags |= (VM_RESERVED | VM_IO); 1303 vma->vm_private_data = sfp; 1304 vma->vm_ops = &sg_mmap_vm_ops; 1305 return 0;
··· 61 62 #ifdef CONFIG_SCSI_PROC_FS 63 #include <linux/proc_fs.h> 64 + static char *sg_version_date = "20050908"; 65 66 static int sg_proc_init(void); 67 static void sg_proc_cleanup(void); ··· 1299 sg_rb_correct4mmap(rsv_schp, 1); /* do only once per fd lifetime */ 1300 sfp->mmap_called = 1; 1301 } 1302 + vma->vm_flags |= VM_RESERVED; 1303 vma->vm_private_data = sfp; 1304 vma->vm_ops = &sg_mmap_vm_ops; 1305 return 0;