queue_io() was checking the DMF_SUSPENDED flag rather than the new DMF_BLOCK_IO flag. This meant suspend could deadlock under load. --- diff/drivers/md/dm.c 2002-11-29 14:57:32.000000000 +0000 +++ source/drivers/md/dm.c 2002-12-03 11:34:59.000000000 +0000 @@ -292,7 +292,7 @@ down_write(&md->lock); - if (!test_bit(DMF_SUSPENDED, &md->flags)) { + if (!test_bit(DMF_BLOCK_IO, &md->flags)) { up_write(&md->lock); free_deferred(di); return 1;