Module Name: src Committed By: mlelstv Date: Sat Feb 22 09:36:29 UTC 2025
Modified Files: src/sys/uvm: uvm_swap.c Log Message: Keep b_resid consistent on I/O errors. To generate a diff of this commit: cvs rdiff -u -r1.208 -r1.209 src/sys/uvm/uvm_swap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/uvm/uvm_swap.c diff -u src/sys/uvm/uvm_swap.c:1.208 src/sys/uvm/uvm_swap.c:1.209 --- src/sys/uvm/uvm_swap.c:1.208 Sun Apr 9 09:00:56 2023 +++ src/sys/uvm/uvm_swap.c Sat Feb 22 09:36:29 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: uvm_swap.c,v 1.208 2023/04/09 09:00:56 riastradh Exp $ */ +/* $NetBSD: uvm_swap.c,v 1.209 2025/02/22 09:36:29 mlelstv Exp $ */ /* * Copyright (c) 1995, 1996, 1997, 2009 Matthew R. Green @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.208 2023/04/09 09:00:56 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uvm_swap.c,v 1.209 2025/02/22 09:36:29 mlelstv Exp $"); #include "opt_uvmhist.h" #include "opt_compat_netbsd.h" @@ -1494,7 +1494,10 @@ out: /* Arrive here at splbio */ if (vnx->vx_pending == 0) { error = vnx->vx_error; pool_put(&vndxfer_pool, vnx); - bp->b_error = error; + if (error) { + bp->b_resid = bp->b_bcount; + bp->b_error = error; + } biodone(bp); } splx(s); @@ -1601,6 +1604,7 @@ sw_reg_iodone(struct work *wk, void *dum error = vnx->vx_error; if ((vnx->vx_flags & VX_BUSY) == 0 && vnx->vx_pending == 0) { pbp->b_error = error; + pbp->b_resid = pbp->b_bcount; biodone(pbp); pool_put(&vndxfer_pool, vnx); }