aboutsummaryrefslogtreecommitdiff
path: root/sys/vm/vnode_pager.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2023-03-24 21:12:21 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2023-03-31 00:47:52 +0000
commit464c507f5daa28512b934f71ccb8e1bf6af95071 (patch)
tree07c7f6908ae1e3c5bde0550ff1b96e3da72192ae /sys/vm/vnode_pager.c
parent35b68d0ac4d3b88ce8e3fa866e42e8842f5227ef (diff)
vnode_pager_input: return runningbufspace back
(cherry picked from commit 28f957b8b3a22086927451fee89789fdf596260b)
Diffstat (limited to 'sys/vm/vnode_pager.c')
-rw-r--r--sys/vm/vnode_pager.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index 08927b5671f6..68e2916daad9 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -568,6 +568,13 @@ vnode_pager_addr(struct vnode *vp, vm_ooffset_t address, daddr_t *rtaddress,
return (err);
}
+static void
+vnode_pager_input_bdone(struct buf *bp)
+{
+ runningbufwakeup(bp);
+ bdone(bp);
+}
+
/*
* small block filesystem vnode pager input
*/
@@ -614,7 +621,7 @@ vnode_pager_input_smlfs(vm_object_t object, vm_page_t m)
/* build a minimal buffer header */
bp->b_iocmd = BIO_READ;
- bp->b_iodone = bdone;
+ bp->b_iodone = vnode_pager_input_bdone;
KASSERT(bp->b_rcred == NOCRED, ("leaking read ucred"));
KASSERT(bp->b_wcred == NOCRED, ("leaking write ucred"));
bp->b_rcred = crhold(curthread->td_ucred);
@@ -1132,6 +1139,8 @@ vnode_pager_generic_getpages_done(struct buf *bp)
error = (bp->b_ioflags & BIO_ERROR) != 0 ? bp->b_error : 0;
object = bp->b_vp->v_object;
+ runningbufwakeup(bp);
+
if (error == 0 && bp->b_bcount != bp->b_npages * PAGE_SIZE) {
if (!buf_mapped(bp)) {
bp->b_data = bp->b_kvabase;