| From 09869de57ed2728ae3c619803932a86cb0e2c4f8 Mon Sep 17 00:00:00 2001 |
| From: Lukas Czerner <lczerner@redhat.com> |
| Date: Wed, 11 Jun 2014 12:28:43 -0400 |
| Subject: dm thin: update discard_granularity to reflect the thin-pool blocksize |
| |
| From: Lukas Czerner <lczerner@redhat.com> |
| |
| commit 09869de57ed2728ae3c619803932a86cb0e2c4f8 upstream. |
| |
| DM thinp already checks whether the discard_granularity of the data |
| device is a factor of the thin-pool block size. But when using the |
| dm-thin-pool's discard passdown support, DM thinp was not selecting the |
| max of the underlying data device's discard_granularity and the |
| thin-pool's block size. |
| |
| Update set_discard_limits() to set discard_granularity to the max of |
| these values. This enables blkdev_issue_discard() to properly align the |
| discards that are sent to the DM thin device on a full block boundary. |
| As such each discard will now cover an entire DM thin-pool block and the |
| block will be reclaimed. |
| |
| Reported-by: Zdenek Kabelac <zkabelac@redhat.com> |
| Signed-off-by: Lukas Czerner <lczerner@redhat.com> |
| Signed-off-by: Mike Snitzer <snitzer@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/md/dm-thin.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/md/dm-thin.c |
| +++ b/drivers/md/dm-thin.c |
| @@ -2925,7 +2925,8 @@ static void set_discard_limits(struct po |
| */ |
| 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; |
| } |