diff -urNp -- -xref/fs/jfs/jfs_logmgr.c x/fs/jfs/jfs_logmgr.c --- -xref/fs/jfs/jfs_logmgr.c 2003-02-27 08:15:29.000000000 +0100 +++ x/fs/jfs/jfs_logmgr.c 2003-03-13 05:42:34.000000000 +0100 @@ -1824,6 +1824,7 @@ static inline void lbmRedrive(struct lbu static int lbmRead(struct jfs_log * log, int pn, struct lbuf ** bpp) { struct lbuf *bp; + unsigned long flags; /* * allocate a log buffer @@ -1831,6 +1832,8 @@ static int lbmRead(struct jfs_log * log, *bpp = bp = lbmAllocate(log, pn); jfs_info("lbmRead: bp:0x%p pn:0x%x", bp, pn); + LCACHE_LOCK(flags); /* disable+lock */ + bp->l_flag |= lbmREAD; bp->l_bh.b_reqnext = NULL; clear_bit(BH_Uptodate, &bp->l_bh.b_state); @@ -1839,10 +1842,13 @@ static int lbmRead(struct jfs_log * log, set_bit(BH_Req, &bp->l_bh.b_state); bp->l_bh.b_rdev = bp->l_bh.b_dev; bp->l_bh.b_rsector = bp->l_blkno << (log->l2bsize - 9); + bh_elv_seq(&bp->l_bh) = 0; generic_make_request(READ, &bp->l_bh); run_task_queue(&tq_disk); - wait_event(bp->l_ioevent, (bp->l_flag != lbmREAD)); + LCACHE_SLEEP_COND(bp->l_ioevent, (bp->l_flag != lbmREAD), flags); + + LCACHE_UNLOCK(flags); /* unlock+enable */ return 0; } @@ -1975,6 +1981,7 @@ static void lbmStartIO(struct lbuf * bp) set_bit(BH_Req, &bp->l_bh.b_state); bp->l_bh.b_rdev = bp->l_bh.b_dev; bp->l_bh.b_rsector = bp->l_blkno << (bp->l_log->l2bsize - 9); + bh_elv_seq(&bp->l_bh) = 0; generic_make_request(WRITE, &bp->l_bh); INCREMENT(lmStat.submitted);