When dm_suspend() is interrupted, it's possible that some bios are queued to deferred list. DMF_BLOCK_IO modification must be protected by io->lock. Signed-off-by: Jun'ichi Nomura --- linux-2.6.16-rc5.orig/drivers/md/dm.c 2006-02-27 00:09:35.000000000 -0500 +++ linux-2.6.16-rc5/drivers/md/dm.c 2006-03-08 14:54:09.000000000 -0500 @@ -1152,9 +1152,10 @@ int dm_suspend(struct mapped_device *md, /* were we interrupted ? */ r = -EINTR; if (atomic_read(&md->pending)) { + clear_bit(DMF_BLOCK_IO, &md->flags); + __flush_deferred_io(md, bio_list_get(&md->deferred)); up_write(&md->io_lock); unlock_fs(md); - clear_bit(DMF_BLOCK_IO, &md->flags); goto out; } up_write(&md->io_lock);