[Midnightbsd-cvs] src [9464] trunk/sys/dev/md/md.c: Fix the data corruption on the swap-backed md.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun Mar 5 14:40:24 EST 2017
Revision: 9464
http://svnweb.midnightbsd.org/src/?rev=9464
Author: laffer1
Date: 2017-03-05 14:40:24 -0500 (Sun, 05 Mar 2017)
Log Message:
-----------
Fix the data corruption on the swap-backed md. Assign the rv variable a
success code if the pager was not asked for the page.
Modified Paths:
--------------
trunk/sys/dev/md/md.c
Modified: trunk/sys/dev/md/md.c
===================================================================
--- trunk/sys/dev/md/md.c 2017-03-05 19:39:41 UTC (rev 9463)
+++ trunk/sys/dev/md/md.c 2017-03-05 19:40:24 UTC (rev 9464)
@@ -669,7 +669,9 @@
sf = sf_buf_alloc(m, SFB_CPUPRIVATE);
VM_OBJECT_LOCK(sc->object);
if (bp->bio_cmd == BIO_READ) {
- if (m->valid != VM_PAGE_BITS_ALL)
+ if (m->valid == VM_PAGE_BITS_ALL)
+ rv = VM_PAGER_OK;
+ else
rv = vm_pager_get_pages(sc->object, &m, 1, 0);
if (rv == VM_PAGER_ERROR) {
sf_buf_free(sf);
@@ -691,6 +693,8 @@
} else if (bp->bio_cmd == BIO_WRITE) {
if (len != PAGE_SIZE && m->valid != VM_PAGE_BITS_ALL)
rv = vm_pager_get_pages(sc->object, &m, 1, 0);
+ else
+ rv = VM_PAGER_OK;
if (rv == VM_PAGER_ERROR) {
sf_buf_free(sf);
sched_unpin();
@@ -702,6 +706,8 @@
} 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);
+ else
+ rv = VM_PAGER_OK;
if (rv == VM_PAGER_ERROR) {
sf_buf_free(sf);
sched_unpin();
More information about the Midnightbsd-cvs
mailing list