[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [dm-devel] Query about dm device max_discard_sectors



On Sun, Mar 25 2012 at  6:46pm -0400,
Amar Mudrankit <amar mudrankit gmail com> wrote:

> 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.

I'm just curious but: what will your target do in general?
 
> In my target, I set:
> 
> ti->num_discard_requests = 1;
> ti->discards_supported = 1;

You'll also want to set ti->discards_supported

see: http://git.kernel.org/linus/4c259327

> 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?

All DM targets should implement .iterate_devices -- intent is to iterate
over all data devices.

You'll also want to implement .io_hints to set limits->max_discard_sectors 
(like drivers/md/dm-thin.c does).

Mike


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]