[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 9:49 PM, Mike Snitzer <snitzer redhat com> wrote:
On Sun, Mar 25 2012 at  7:54pm -0400,
Mike Snitzer <snitzer redhat com> wrote:

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

Target is somewhat similar to what a Flash Translation Layer does in SSDs, but not
as fancy as that.  So, when my target maintains logical -> physical mapping, my target
will be interested in which blocks are free from file system perspective, a typical use
case of TRIM.  I guess somewhat similar to thin-provisioning.

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

ah, I now see you already did set discards_supported.

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

BTW, the dm-thin.c discard changes will be merged in 3.4, you can see
the relevant patches here:


With io_hints function pointer, I set max_discard_sectors and it is getting set properly,  and I
was able to receive and process TRIM requests.

Thank you Mike for the help !!

Thanks and Regards,

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