svn commit: r218431 - stable/8/sys/dev/md
Konstantin Belousov
kib at FreeBSD.org
Tue Feb 8 09:28:29 UTC 2011
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();
More information about the svn-src-stable-8
mailing list