diff mbox

[1/3] block: break discard submissions into the user defined size

Message ID 1525360843-6504-2-git-send-email-axboe@kernel.dk (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Jens Axboe May 3, 2018, 3:20 p.m. UTC
Don't build discards bigger than what the user asked for, if the
user decided to limit the size by writing to 'discard_max_bytes'.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
 block/blk-lib.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

Comments

Christoph Hellwig May 7, 2018, 9:51 a.m. UTC | #1
On Thu, May 03, 2018 at 09:20:41AM -0600, Jens Axboe wrote:
> Don't build discards bigger than what the user asked for, if the
> user decided to limit the size by writing to 'discard_max_bytes'.
> 
> Signed-off-by: Jens Axboe <axboe@kernel.dk>

Why do this here when blk_bio_discard_split already takes care of it?
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jens Axboe May 7, 2018, 3:47 p.m. UTC | #2
On 5/7/18 3:51 AM, Christoph Hellwig wrote:
> On Thu, May 03, 2018 at 09:20:41AM -0600, Jens Axboe wrote:
>> Don't build discards bigger than what the user asked for, if the
>> user decided to limit the size by writing to 'discard_max_bytes'.
>>
>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> 
> Why do this here when blk_bio_discard_split already takes care of it?

Functionally it should be the same, just seems pointless to defer
the chopping if we can build them the right size to begin with.
diff mbox

Patch

diff --git a/block/blk-lib.c b/block/blk-lib.c
index a676084d4740..7417d617091b 100644
--- a/block/blk-lib.c
+++ b/block/blk-lib.c
@@ -62,10 +62,11 @@  int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
 		unsigned int req_sects;
 		sector_t end_sect, tmp;
 
-		/* Make sure bi_size doesn't overflow */
-		req_sects = min_t(sector_t, nr_sects, UINT_MAX >> 9);
+		/* Issue in chunks of the user defined max discard setting */
+		req_sects = min_t(sector_t, nr_sects,
+					q->limits.max_discard_sectors);
 
-		/**
+		/*
 		 * If splitting a request, and the next starting sector would be
 		 * misaligned, stop the discard at the previous aligned sector.
 		 */