SCCS-vsn: sys/kern/vfs_bio.c 7.9
SCCS-vsn: sys/kern/vfs_cluster.c 7.9
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)vfs_bio.c 7.8 (Berkeley) %G%
+ * @(#)vfs_bio.c 7.9 (Berkeley) %G%
{
register struct buf *bp;
register struct bufhd *hp;
{
register struct buf *bp;
register struct bufhd *hp;
#define dp ((struct buf *)hp)
for (hp = bufhash; hp < &bufhash[BUFHSZ]; hp++) {
for (bp = dp->b_forw; bp != dp; bp = bp->b_forw) {
if (bp->b_dev != dev || (bp->b_flags & B_INVAL))
continue;
#define dp ((struct buf *)hp)
for (hp = bufhash; hp < &bufhash[BUFHSZ]; hp++) {
for (bp = dp->b_forw; bp != dp; bp = bp->b_forw) {
if (bp->b_dev != dev || (bp->b_flags & B_INVAL))
continue;
+ loop:
+ s = splbio();
+ if (bp->b_flags & B_BUSY) {
+ bp->b_flags |= B_WANTED;
+ sleep((caddr_t)bp, PRIBIO+1);
+ splx(s);
+ goto loop;
+ }
notavail(bp);
if (bp->b_flags & B_DELWRI) {
(void) bawrite(bp);
notavail(bp);
if (bp->b_flags & B_DELWRI) {
(void) bawrite(bp);
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)vfs_cluster.c 7.8 (Berkeley) %G%
+ * @(#)vfs_cluster.c 7.9 (Berkeley) %G%
{
register struct buf *bp;
register struct bufhd *hp;
{
register struct buf *bp;
register struct bufhd *hp;
#define dp ((struct buf *)hp)
for (hp = bufhash; hp < &bufhash[BUFHSZ]; hp++) {
for (bp = dp->b_forw; bp != dp; bp = bp->b_forw) {
if (bp->b_dev != dev || (bp->b_flags & B_INVAL))
continue;
#define dp ((struct buf *)hp)
for (hp = bufhash; hp < &bufhash[BUFHSZ]; hp++) {
for (bp = dp->b_forw; bp != dp; bp = bp->b_forw) {
if (bp->b_dev != dev || (bp->b_flags & B_INVAL))
continue;
+ loop:
+ s = splbio();
+ if (bp->b_flags & B_BUSY) {
+ bp->b_flags |= B_WANTED;
+ sleep((caddr_t)bp, PRIBIO+1);
+ splx(s);
+ goto loop;
+ }
notavail(bp);
if (bp->b_flags & B_DELWRI) {
(void) bawrite(bp);
notavail(bp);
if (bp->b_flags & B_DELWRI) {
(void) bawrite(bp);