aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_sendfile.c
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2021-01-03 16:35:42 +0000
committerMark Johnston <markj@FreeBSD.org>2021-01-03 16:50:31 +0000
commit214257da3a562d1a330a6ce784074a952d354754 (patch)
treefbb6e228f8b61278c40b859847a52ebc8a3e22db /sys/kern/kern_sendfile.c
parent2ce5eef6e23acba92d5dc2056d9be28542802750 (diff)
downloadsrc-214257da3a562d1a330a6ce784074a952d354754.tar.gz
src-214257da3a562d1a330a6ce784074a952d354754.zip
sendfile: Clear page pointers when handling a pager error
When INVARIANTS is configred, the sendfile_iodone() callback verifies that pages attached to the sendfile header are wired, but we unwire all such pages after a synchronous pager error, before calling sendfile_iodone(). Reported by: pho Tested by: pho Sponsored by: The FreeBSD Foundation
Diffstat (limited to 'sys/kern/kern_sendfile.c')
-rw-r--r--sys/kern/kern_sendfile.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/kern/kern_sendfile.c b/sys/kern/kern_sendfile.c
index 18c9ade721a9..7d7be6f072e9 100644
--- a/sys/kern/kern_sendfile.c
+++ b/sys/kern/kern_sendfile.c
@@ -540,6 +540,7 @@ sendfile_swapin(vm_object_t obj, struct sf_io *sfio, int *nios, off_t off,
("%s: page %p[%d] I/O recovery failure",
__func__, pa, j));
vm_page_unwire(pa[j], PQ_INACTIVE);
+ pa[j] = NULL;
}
return (EIO);
}