diff options
author | Kenneth R Westerback <krw@cvs.openbsd.org> | 2011-04-15 14:57:30 +0000 |
---|---|---|
committer | Kenneth R Westerback <krw@cvs.openbsd.org> | 2011-04-15 14:57:30 +0000 |
commit | b4beef39345d1dbe85f71c6935ff2742c4b8a5b8 (patch) | |
tree | 9e953ccf05e5ba2fbe93b2d58c5fdb2fa680cafb /sys/arch/mvme88k | |
parent | 333e7f4bad1ad8fde2bfadcf79001104562ccc74 (diff) |
In days of yore one could arbitrarily whack buffer flags. Those days
are past. Use CLR() and SET() to modify necessary flags while leaving
the flags used by the buffer cache in peace.
Should make bufcache code much less confused about the state of the
bufs used in reading/writing disklabels. Other such flag abuses no
doubt await a visit.
Errors in original diff found by miod@.
ok beck@ deraadt@
Diffstat (limited to 'sys/arch/mvme88k')
-rw-r--r-- | sys/arch/mvme88k/mvme88k/disksubr.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/arch/mvme88k/mvme88k/disksubr.c b/sys/arch/mvme88k/mvme88k/disksubr.c index d1e72dd942c..796a4c6c07e 100644 --- a/sys/arch/mvme88k/mvme88k/disksubr.c +++ b/sys/arch/mvme88k/mvme88k/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.66 2011/04/06 13:46:50 miod Exp $ */ +/* $OpenBSD: disksubr.c,v 1.67 2011/04/15 14:57:29 krw Exp $ */ /* * Copyright (c) 1998 Steve Murphree, Jr. * Copyright (c) 1995 Dale Rahn. @@ -63,7 +63,8 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), bp->b_blkno = LABELSECTOR; bp->b_bcount = lp->d_secsize; - bp->b_flags = B_BUSY | B_READ | B_RAW; + CLR(bp->b_flags, B_WRITE | B_DONE); + SET(bp->b_flags, B_BUSY | B_READ | B_RAW); (*strat)(bp); if (biowait(bp)) { error = bp->b_error; @@ -110,14 +111,16 @@ writedisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp) /* Read it in, slap the new label in, and write it back out */ bp->b_blkno = LABELSECTOR; bp->b_bcount = lp->d_secsize; - bp->b_flags = B_BUSY | B_READ | B_RAW; + CLR(bp->b_flags, B_WRITE | B_DONE); + SET(bp->b_flags, B_BUSY | B_READ | B_RAW); (*strat)(bp); if ((error = biowait(bp)) != 0) goto done; bsdtocpulabel(lp, (struct mvmedisklabel *)bp->b_data); - bp->b_flags = B_BUSY | B_WRITE | B_RAW; + CLR(bp->b_flags, B_READ | B_DONE); + SET(bp->b_flags, B_BUSY | B_WRITE | B_RAW); (*strat)(bp); error = biowait(bp); |