diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2021-04-13 10:22:56 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2021-04-23 11:14:10 +0000 |
commit | 22f23299b7ed96932a4b9e8b3a93fc233af1f2d4 (patch) | |
tree | 61c6749972163882f79d4ce5f6bda077646a8ee2 | |
parent | c35473f4ab3a58dcc2846713c131d6983d9ed009 (diff) | |
download | src-22f23299b7ed96932a4b9e8b3a93fc233af1f2d4.tar.gz src-22f23299b7ed96932a4b9e8b3a93fc233af1f2d4.zip |
b_vflags update requries bufobj lock
(cherry picked from commit e3d675958539eee899d42438f5b46a26f3c64902)
-rw-r--r-- | sys/ufs/ffs/ffs_softdep.c | 2 | ||||
-rw-r--r-- | sys/ufs/ffs/ffs_vnops.c | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c index 786fb43c7d81..2cc16ab2a2c1 100644 --- a/sys/ufs/ffs/ffs_softdep.c +++ b/sys/ufs/ffs/ffs_softdep.c @@ -7523,7 +7523,9 @@ cleanrestart: BO_LOCK(bo); goto cleanrestart; } + BO_LOCK(bo); bp->b_vflags |= BV_SCANNED; + BO_UNLOCK(bo); bremfree(bp); if (blkoff != 0) { allocbuf(bp, blkoff); diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index 582ccccc2e12..4e4e0b78fe4d 100644 --- a/sys/ufs/ffs/ffs_vnops.c +++ b/sys/ufs/ffs/ffs_vnops.c @@ -321,8 +321,9 @@ loop: if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_SLEEPFAIL | LK_INTERLOCK, BO_LOCKPTR(bo)) != 0) { + BO_LOCK(bo); bp->b_vflags &= ~BV_SCANNED; - goto next; + goto next_locked; } } else continue; @@ -385,6 +386,7 @@ next: * to start from a known point. */ BO_LOCK(bo); +next_locked: nbp = TAILQ_FIRST(&bo->bo_dirty.bv_hd); } if (waitfor != MNT_WAIT) { |