Author: kib
Date: Tue Feb  8 09:28:28 2011
New Revision: 218431
URL: http://svn.freebsd.org/changeset/base/218431

Log:
  MFC r217946:
  Add support for BIO_DELETE on swap-backed md(4).

Modified:
  stable/8/sys/dev/md/md.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/dev/md/md.c
==============================================================================
--- stable/8/sys/dev/md/md.c    Tue Feb  8 09:25:32 2011        (r218430)
+++ stable/8/sys/dev/md/md.c    Tue Feb  8 09:28:28 2011        (r218431)
@@ -648,7 +648,6 @@ mdstart_swap(struct md_s *sc, struct bio
                        }
                        bcopy(p, (void *)(sf_buf_kva(sf) + offs), len);
                        m->valid = VM_PAGE_BITS_ALL;
-#if 0
                } else if (bp->bio_cmd == BIO_DELETE) {
                        if (len != PAGE_SIZE && m->valid != VM_PAGE_BITS_ALL)
                                rv = vm_pager_get_pages(sc->object, &m, 1, 0);
@@ -658,16 +657,21 @@ mdstart_swap(struct md_s *sc, struct bio
                                vm_page_wakeup(m);
                                break;
                        }
-                       bzero((void *)(sf_buf_kva(sf) + offs), len);
-                       vm_page_dirty(m);
-                       m->valid = VM_PAGE_BITS_ALL;
-#endif
+                       if (len != PAGE_SIZE) {
+                               bzero((void *)(sf_buf_kva(sf) + offs), len);
+                               vm_page_clear_dirty(m, offs, len);
+                               m->valid = VM_PAGE_BITS_ALL;
+                       } else
+                               vm_pager_page_unswapped(m);
                }
                sf_buf_free(sf);
                sched_unpin();
                vm_page_wakeup(m);
                vm_page_lock_queues();
-               vm_page_activate(m);
+               if (bp->bio_cmd == BIO_DELETE && len == PAGE_SIZE)
+                       vm_page_free(m);
+               else
+                       vm_page_activate(m);
                if (bp->bio_cmd == BIO_WRITE)
                        vm_page_dirty(m);
                vm_page_unlock_queues();
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to