After commit 5091cdec56fa "dm: change max_io_len() to use blk_max_size_offset()" my out-of-tree driver stopped to work. The reason is that now ti->max_io_len from such target is ignored: max_io_len() ignores ti->max_io_len, while dm_calculate_queue_limits() never stacks ti->chunk_sectors into ti_limits.chunk_sectors. Here I see two possible solutions, both are in dm_calculate_queue_limits(): 1)Move ti_limits.chunk_sectors assignment down, so it will be made right under combine_limits label. Thus, every time ti->max_io_len will transform into chunk_sectors, even in case of device has no .iterate_devices method; 2)Move io_hints call under the label (like it's made in this patch), so one can set desired chunk_sectors there. First solution looks less clear, since in two drivers chunk_sectors are assigned in io_hints (see unstripe_io_hints() and dmz_io_hints()), and this rewrites, and we should not rewrite it. Second solution does not break anything since we change only order with ->iterate_devices(device_area_is_invalid), while device_area_is_invalid never touches chunk_sectors. So I choosed it. Signed-off-by: Kirill Tkhai <ktkhai@xxxxxxxxxxxxx> --- drivers/md/dm-table.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 2073ee8d18f4..9994c767dc82 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -1453,10 +1453,6 @@ int dm_calculate_queue_limits(struct dm_table *table, if (ti->max_io_len) ti_limits.chunk_sectors = lcm_not_zero(ti->max_io_len, ti_limits.chunk_sectors); - /* Set I/O hints portion of queue limits */ - if (ti->type->io_hints) - ti->type->io_hints(ti, &ti_limits); - /* * Check each device area is consistent with the target's * overall queue limits. @@ -1466,6 +1462,10 @@ int dm_calculate_queue_limits(struct dm_table *table, return -EINVAL; combine_limits: + /* Set I/O hints portion of queue limits */ + if (ti->type->io_hints) + ti->type->io_hints(ti, &ti_limits); + /* * Merge this target's queue limits into the overall limits * for the table. -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel