For some reason dm_table_create() was allocating GFP_NOIO rather than GFP_KERNEL. --- diff/drivers/md/dm-table.c 2003-11-05 17:13:04.000000000 +0000 +++ source/drivers/md/dm-table.c 2003-11-19 13:54:11.000000000 +0000 @@ -114,7 +114,7 @@ int dm_table_create(struct dm_table **result, int mode, unsigned num_targets) { - struct dm_table *t = kmalloc(sizeof(*t), GFP_NOIO); + struct dm_table *t = kmalloc(sizeof(*t), GFP_KERNEL); if (!t) return -ENOMEM;