Free the request page if an I/O error occurs while reading from swap.
After such a failure, the page is invalid, so there's point in keeping it around. Moreover, such pages were not being inserted into the active queue, making them unreclaimable until a subsequent write or delete made them valid. Reported by: alc Reviewed by: alc (previous revision) MFC after: 1 week
This commit is contained in:
parent
cc2fe2b0fb
commit
01bc16bb0e
@ -1030,7 +1030,7 @@ mdstart_swap(struct md_s *sc, struct bio *bp)
|
||||
rv = vm_pager_get_pages(sc->object, &m, 1,
|
||||
NULL, NULL);
|
||||
if (rv == VM_PAGER_ERROR) {
|
||||
vm_page_xunbusy(m);
|
||||
md_swap_page_free(m);
|
||||
break;
|
||||
} else if (rv == VM_PAGER_FAIL) {
|
||||
/*
|
||||
@ -1060,7 +1060,7 @@ mdstart_swap(struct md_s *sc, struct bio *bp)
|
||||
rv = vm_pager_get_pages(sc->object, &m, 1,
|
||||
NULL, NULL);
|
||||
if (rv == VM_PAGER_ERROR) {
|
||||
vm_page_xunbusy(m);
|
||||
md_swap_page_free(m);
|
||||
break;
|
||||
} else if (rv == VM_PAGER_FAIL)
|
||||
pmap_zero_page(m);
|
||||
@ -1085,7 +1085,7 @@ mdstart_swap(struct md_s *sc, struct bio *bp)
|
||||
rv = vm_pager_get_pages(sc->object, &m, 1,
|
||||
NULL, NULL);
|
||||
if (rv == VM_PAGER_ERROR) {
|
||||
vm_page_xunbusy(m);
|
||||
md_swap_page_free(m);
|
||||
break;
|
||||
} else if (rv == VM_PAGER_FAIL) {
|
||||
md_swap_page_free(m);
|
||||
|
Loading…
x
Reference in New Issue
Block a user