[dm-devel] Re: [PATCH v2] dm: add topology support
Alasdair G Kergon
agk at redhat.com
Fri Jun 12 08:45:34 UTC 2009
On Fri, Jun 12, 2009 at 12:17:57AM -0400, Mike Snitzer wrote:
> But the following still establishes each target device's limits during
> stage1 (dm_set_device_limits). I don't see a way to avoid this given
> that we only know the table's target devices (and associated bdev and
> request_queue) through each target's ctr():
Also available from:
struct list_head *dm_table_get_devices(struct dm_table *t)
(A list of struct dm_dev_internal, defined in dm.h.)
We might need to pass the offset at which the device occurs
within the table into dm_get_device() and, for now, only storing
it there first time for each device and assume userspace has taken
account of the alignment offset consistently.
> -> blk_stack_limits(ti, bdev->q->limits)
> [NOTE: changed to: ti->limits = q->limits below]
> [NOTE: this copy can't be delayed, need
> access to target's bdev; only available through
> ctr's params]
See above.
> - if (blk_stack_limits(&ti->limits, &q->limits, 0) < 0)
> - DMWARN("%s: target device %s is misaligned",
> - dm_device_name(ti->table->md), bdevname(bdev, b));
Userspace code is responsible for avoiding these cases, but we could now
move the misalignment warnings (without failing) to dm_table_set_restrictions().
> + * Each target device in the table has a data area that is aligned
> + * (via LVM2) so the DM device's alignment_offset should be 0.
There are userspace users other than LVM2:-)
Use dm_table_get_devices() here with the offset stored earlier instead,
removing struct queue_limits from struct dm_table.
Alasdair
More information about the dm-devel
mailing list