aboutsummaryrefslogtreecommitdiff
path: root/sys/gnu
diff options
context:
space:
mode:
authorKirk McKusick <mckusick@FreeBSD.org>1999-06-26 02:47:16 +0000
committerKirk McKusick <mckusick@FreeBSD.org>1999-06-26 02:47:16 +0000
commit67812eacd74d5841e890b703d4ec2d5a76288830 (patch)
treedaad70481467b7aa233a8f5e919b7eec6d7cc908 /sys/gnu
parent5a903f8d735f0cc4a378e9f85fa3ad30a675df06 (diff)
downloadsrc-67812eacd74d5841e890b703d4ec2d5a76288830.tar.gz
src-67812eacd74d5841e890b703d4ec2d5a76288830.zip
Convert buffer locking from using the B_BUSY and B_WANTED flags to using
lockmgr locks. This commit should be functionally equivalent to the old semantics. That is, all buffer locking is done with LK_EXCLUSIVE requests. Changes to take advantage of LK_SHARED and LK_RECURSIVE will be done in future commits.
Notes
Notes: svn path=/head/; revision=48225
Diffstat (limited to 'sys/gnu')
-rw-r--r--sys/gnu/ext2fs/ext2_vnops.c3
-rw-r--r--sys/gnu/ext2fs/fs.h2
-rw-r--r--sys/gnu/fs/ext2fs/ext2_vnops.c3
-rw-r--r--sys/gnu/fs/ext2fs/fs.h2
4 files changed, 4 insertions, 6 deletions
diff --git a/sys/gnu/ext2fs/ext2_vnops.c b/sys/gnu/ext2fs/ext2_vnops.c
index c3b1263830f3..82eedd8996cf 100644
--- a/sys/gnu/ext2fs/ext2_vnops.c
+++ b/sys/gnu/ext2fs/ext2_vnops.c
@@ -198,12 +198,11 @@ loop:
s = splbio();
for (bp = TAILQ_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) {
nbp = TAILQ_NEXT(bp, b_vnbufs);
- if ((bp->b_flags & B_BUSY))
+ if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT))
continue;
if ((bp->b_flags & B_DELWRI) == 0)
panic("ext2_fsync: not dirty");
bremfree(bp);
- bp->b_flags |= B_BUSY;
splx(s);
/*
* Wait for I/O associated with indirect blocks to complete,
diff --git a/sys/gnu/ext2fs/fs.h b/sys/gnu/ext2fs/fs.h
index 17b5beb7fa16..b8dab54606ae 100644
--- a/sys/gnu/ext2fs/fs.h
+++ b/sys/gnu/ext2fs/fs.h
@@ -173,8 +173,8 @@ extern u_char *fragtbl[];
s = splbio(); \
flags = (bp)->b_flags; \
(bp)->b_flags &= ~(B_DIRTY | B_LOCKED); \
+ BUF_LOCK(bp, LK_EXCLUSIVE); \
bremfree(bp); \
- (bp)->b_flags |= B_BUSY; \
splx(s); \
if (flags & B_DIRTY) \
bdwrite(bp); \
diff --git a/sys/gnu/fs/ext2fs/ext2_vnops.c b/sys/gnu/fs/ext2fs/ext2_vnops.c
index c3b1263830f3..82eedd8996cf 100644
--- a/sys/gnu/fs/ext2fs/ext2_vnops.c
+++ b/sys/gnu/fs/ext2fs/ext2_vnops.c
@@ -198,12 +198,11 @@ loop:
s = splbio();
for (bp = TAILQ_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) {
nbp = TAILQ_NEXT(bp, b_vnbufs);
- if ((bp->b_flags & B_BUSY))
+ if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT))
continue;
if ((bp->b_flags & B_DELWRI) == 0)
panic("ext2_fsync: not dirty");
bremfree(bp);
- bp->b_flags |= B_BUSY;
splx(s);
/*
* Wait for I/O associated with indirect blocks to complete,
diff --git a/sys/gnu/fs/ext2fs/fs.h b/sys/gnu/fs/ext2fs/fs.h
index 17b5beb7fa16..b8dab54606ae 100644
--- a/sys/gnu/fs/ext2fs/fs.h
+++ b/sys/gnu/fs/ext2fs/fs.h
@@ -173,8 +173,8 @@ extern u_char *fragtbl[];
s = splbio(); \
flags = (bp)->b_flags; \
(bp)->b_flags &= ~(B_DIRTY | B_LOCKED); \
+ BUF_LOCK(bp, LK_EXCLUSIVE); \
bremfree(bp); \
- (bp)->b_flags |= B_BUSY; \
splx(s); \
if (flags & B_DIRTY) \
bdwrite(bp); \