ext3_error() sleeps, so don't call it with the lock held. --- 25-akpm/fs/ext3/balloc.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff -puN fs/ext3/balloc.c~ext3-schedule-inside-lock-fix fs/ext3/balloc.c --- 25/fs/ext3/balloc.c~ext3-schedule-inside-lock-fix Thu Feb 19 15:37:04 2004 +++ 25-akpm/fs/ext3/balloc.c Thu Feb 19 15:38:16 2004 @@ -239,9 +239,10 @@ do_more: BUFFER_TRACE(bitmap_bh, "clear bit"); if (!ext3_clear_bit_atomic(sb_bgl_lock(sbi, block_group), bit + i, bitmap_bh->b_data)) { - ext3_error (sb, __FUNCTION__, - "bit already cleared for block %lu", - block + i); + jbd_unlock_bh_state(bitmap_bh); + ext3_error(sb, __FUNCTION__, + "bit already cleared for block %lu", block + i); + jbd_lock_bh_state(bitmap_bh); BUFFER_TRACE(bitmap_bh, "bit already cleared"); } else { dquot_freed_blocks++; _