Change dm_table_pre/postsuspend_targets to accept NULL. --- diff/drivers/md/dm-table.c 2005-07-06 18:52:32.000000000 +0100 +++ source/drivers/md/dm-table.c 2005-07-06 18:52:18.000000000 +0100 @@ -869,11 +869,17 @@ void dm_table_presuspend_targets(struct dm_table *t) { + if (!t) + return; + return suspend_targets(t, 0); } void dm_table_postsuspend_targets(struct dm_table *t) { + if (!t) + return; + return suspend_targets(t, 1); } --- diff/drivers/md/dm.c 2005-07-06 18:52:32.000000000 +0100 +++ source/drivers/md/dm.c 2005-07-06 18:51:45.000000000 +0100 @@ -931,7 +931,7 @@ struct dm_table *map = dm_get_table(md); if (atomic_dec_and_test(&md->holders)) { - if (!dm_suspended(md) && map) { + if (!dm_suspended(md)) { dm_table_presuspend_targets(map); dm_table_postsuspend_targets(map); } @@ -1052,9 +1052,8 @@ goto out_read_unlock; map = dm_get_table(md); - if (map) - /* This does not get reverted if there's an error later. */ - dm_table_presuspend_targets(map); + /* This does not get reverted if there's an error later. */ + dm_table_presuspend_targets(map); error = __lock_fs(md); if (error) { @@ -1112,8 +1111,7 @@ set_bit(DMF_SUSPENDED, &md->flags); map = dm_get_table(md); - if (map) - dm_table_postsuspend_targets(map); + dm_table_postsuspend_targets(map); dm_table_put(map); up_write(&md->lock);