[dm-devel] Query about dm device max_discard_sectors
Amar Mudrankit
amar.mudrankit at gmail.com
Sun Mar 25 22:46:26 UTC 2012
Hi all,
I am building an experimental device mapper target which is supposed to
receive
all TRIM requests (REQ_DISCARD). Irrespective of whether underlying actual
physical block device supports discards or not, my device mapper target
should
receive REQ_DISCARD bios.
In my target, I set:
ti->num_discard_requests = 1;
ti->discards_supported = 1;
It looks like setting above 2 parameters did not get me any REQ_DISCARD
requests when "fstrim" utility is used. The operations fails with
"Operation not
supported" from kernel funcion:
blkdev_issue_discard
because max_discard_sectors for device queue is set to 0.
max_discard_sectors = min(q->limits.max_discard_sectors, UINT_MAX >> 9);
if (unlikely(!max_discard_sectors))
return -EOPNOTSUPP;
When I further digged into the device mapper code, I found that
dm_calculate_queue_limits function sets the queue limits to default values
of 0 for both limits as well as ti_limits and thus blk_stack_limits
eventually
sets max_discard_sectors to 0 for the device mapper target.
So, if my device mapper target does not implement iterate_devices function
(used to set max_discard_sectors based on underlying physical device's
discard
support) or underlying physical device does not support discards, then there
is no way for device mapper target to set max_discard_sectors more than 0
to receive REQ_DISCARD commands.
Is this analysis correct? Or I am missing something?
Appreciate the help / advice.
Thanks and Regards,
Amar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20120325/6e51d998/attachment.htm>
More information about the dm-devel
mailing list