git: 3a98b98be504 - stable/13 - swap_pager: lock vnode in swapdev_strategy()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 02 Dec 2021 02:31:53 UTC
The branch stable/13 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=3a98b98be504e5ba3faf0fdf58271681d9eee5a1 commit 3a98b98be504e5ba3faf0fdf58271681d9eee5a1 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2021-11-24 11:26:46 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2021-12-02 02:21:15 +0000 swap_pager: lock vnode in swapdev_strategy() (cherry picked from commit b19740f4ce7a542783f87de2fee48476a7801d86) --- sys/vm/swap_pager.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index 8363dce52683..78533c9fb5e6 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -3036,16 +3036,19 @@ swapdev_strategy(struct buf *bp, struct swdevt *sp) vp2 = sp->sw_id; vhold(vp2); if (bp->b_iocmd == BIO_WRITE) { + vn_lock(vp2, LK_EXCLUSIVE | LK_RETRY); if (bp->b_bufobj) bufobj_wdrop(bp->b_bufobj); bufobj_wref(&vp2->v_bufobj); + } else { + vn_lock(vp2, LK_SHARED | LK_RETRY); } if (bp->b_bufobj != &vp2->v_bufobj) bp->b_bufobj = &vp2->v_bufobj; bp->b_vp = vp2; bp->b_iooffset = dbtob(bp->b_blkno); bstrategy(bp); - return; + VOP_UNLOCK(vp2); } static void