Author: attilio
Date: Sun Aug  4 15:56:19 2013
New Revision: 253927
URL: http://svnweb.freebsd.org/changeset/base/253927

Log:
  Remove unnecessary soft busy of the page before to do vn_rdwr() in
  kern_sendfile() which is unnecessary.
  The page is already wired so it will not be subjected to pagefault.
  The content cannot be effectively protected as it is full of races
  already.
  Multiple accesses to the same indexes are serialized through vn_rdwr().
  
  Sponsored by: EMC / Isilon storage division
  Reviewed by:  alc, jeff
  Tested by:    pho

Modified:
  head/sys/fs/tmpfs/tmpfs_vnops.c
  head/sys/kern/uipc_syscalls.c

Modified: head/sys/fs/tmpfs/tmpfs_vnops.c
==============================================================================
--- head/sys/fs/tmpfs/tmpfs_vnops.c     Sun Aug  4 11:38:08 2013        
(r253926)
+++ head/sys/fs/tmpfs/tmpfs_vnops.c     Sun Aug  4 15:56:19 2013        
(r253927)
@@ -448,10 +448,8 @@ tmpfs_nocacheread(vm_object_t tobj, vm_p
        VM_OBJECT_WLOCK(tobj);
 
        /*
-        * The kern_sendfile() code calls vn_rdwr() with the page
-        * soft-busied.  Ignore the soft-busy state here. Parallel
-        * reads of the page content from disk are prevented by
-        * VPO_BUSY.
+        * Parallel reads of the page content from disk are prevented
+        * by VPO_BUSY.
         *
         * Although the tmpfs vnode lock is held here, it is
         * nonetheless safe to sleep waiting for a free page.  The
@@ -460,7 +458,7 @@ tmpfs_nocacheread(vm_object_t tobj, vm_p
         * type object.
         */
        m = vm_page_grab(tobj, idx, VM_ALLOC_NORMAL | VM_ALLOC_RETRY |
-           VM_ALLOC_IGN_SBUSY | VM_ALLOC_NOBUSY);
+           VM_ALLOC_NOBUSY);
        if (m->valid != VM_PAGE_BITS_ALL) {
                vm_page_busy(m);
                if (vm_pager_has_page(tobj, idx, NULL, NULL)) {

Modified: head/sys/kern/uipc_syscalls.c
==============================================================================
--- head/sys/kern/uipc_syscalls.c       Sun Aug  4 11:38:08 2013        
(r253926)
+++ head/sys/kern/uipc_syscalls.c       Sun Aug  4 15:56:19 2013        
(r253927)
@@ -2246,11 +2246,6 @@ retry_space:
                                ssize_t resid;
                                int readahead = sfreadahead * MAXBSIZE;
 
-                               /*
-                                * Ensure that our page is still around
-                                * when the I/O completes.
-                                */
-                               vm_page_io_start(pg);
                                VM_OBJECT_WUNLOCK(obj);
 
                                /*
@@ -2264,11 +2259,9 @@ retry_space:
                                    trunc_page(off), UIO_NOCOPY, IO_NODELOCKED |
                                    IO_VMIO | ((readahead / bsize) << 
IO_SEQSHIFT),
                                    td->td_ucred, NOCRED, &resid, td);
-                               VM_OBJECT_WLOCK(obj);
-                               vm_page_io_finish(pg);
-                               if (!error)
-                                       VM_OBJECT_WUNLOCK(obj);
                                SFSTAT_INC(sf_iocnt);
+                               if (error)
+                                       VM_OBJECT_WLOCK(obj);
                        }
                        if (error) {
                                vm_page_lock(pg);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to