From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joe Thornber Subject: Re: [PATCH] dm-thin: Export proper discard_granularity Date: Thu, 12 Jun 2014 09:54:55 +0100 Message-ID: <20140612085454.GA905@debian> References: <1402489929-16466-1-git-send-email-lczerner@redhat.com> Reply-To: device-mapper development Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <1402489929-16466-1-git-send-email-lczerner@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com To: device-mapper development Cc: Lukas Czerner List-Id: dm-devel.ids ack On Wed, Jun 11, 2014 at 02:32:09PM +0200, Lukas Czerner wrote: > Currently if the underlying device is discard capable and the > discard_passdown is enabled, the discard_granularity will be inherited > from that device. > > This will pose a problem in the case that the device discard_granularity > is smaller than thin volume chunk size, because in that case discard > requests will not be chunk size aligned so it will be ignored by > dm-thin. > > Fix this by setting thin volume discard granularity to the bigger of the > two max(device discard_granularity, thin volume chunk size). Strictly > speaking it is not necessary to get the bigger of the two, because > the thin volume chunk size will always be >= device discard_granularity. > However I believe that the reason for this is only because dm-thin can > not handle discard requests bigger than chunk size which is hopefully > going to change soon. This way it is future proof. > > RHBZ: 1106856 > > Reported-by: Zdenek Kabelac > Signed-off-by: Lukas Czerner > --- > drivers/md/dm-thin.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c > index 242ac2e..fdd7089 100644 > --- a/drivers/md/dm-thin.c > +++ b/drivers/md/dm-thin.c > @@ -3068,7 +3068,9 @@ static void set_discard_limits(struct pool_c *pt, struct queue_limits *limits) > */ > if (pt->adjusted_pf.discard_passdown) { > data_limits = &bdev_get_queue(pt->data_dev->bdev)->limits; > - limits->discard_granularity = data_limits->discard_granularity; > + limits->discard_granularity = > + max(data_limits->discard_granularity, > + pool->sectors_per_block << SECTOR_SHIFT); > } else > limits->discard_granularity = pool->sectors_per_block << SECTOR_SHIFT; > } > -- > 1.8.3.1 > > -- > dm-devel mailing list > dm-devel@redhat.com > https://www.redhat.com/mailman/listinfo/dm-devel