On Tue, Sep 18 2012 at 7:40am -0400, Alasdair G Kergon <agk@xxxxxxxxxx> wrote: > On Mon, Sep 17, 2012 at 03:44:29PM -0400, David Jeffery wrote: > > @@ -2425,6 +2425,15 @@ struct dm_table *dm_swap_table(struct mapped_device *md, struct dm_table *table) > > > + if (limits.max_sectors == UINT_MAX) > > Specifically, I don't want dm.c to be peering directly into limits. That's fine. I agree, it is wrong to have DM code be so fragile relative to potential block layer changes. > It just called calculate_queue_limits() above that. > Why is calculate_queue_limits getting the limits wrong? Because, in the mpath case David reported, there are no longer any devices in the table. So .iterate_devices doesn't have anything to work with; which means the blk_set_stacking_limits()' limits are left unchanged (e.g. limits.max_sectors is UINT_MAX). I'll try to think of a way to get dm_calculate_queue_limits() to detect: 1) that there are no devices in the table 2) that there is a live table that already has established limits 3) if 1 && 2, then use existing limits (should address David's request) -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel