4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Jens Axboe <[email protected]>

commit af097f5d199e2aa3ab3ef777f0716e487b8f7b08 upstream.

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

Reviewed-by: Darrick J. Wong <[email protected]>
Reviewed-by: Omar Sandoval <[email protected]>
Signed-off-by: Jens Axboe <[email protected]>
Signed-off-by: Sudip Mukherjee <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 block/blk-lib.c |   10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

--- a/block/blk-lib.c
+++ b/block/blk-lib.c
@@ -81,8 +81,14 @@ int blkdev_issue_discard(struct block_de
                        break;
                }
 
-               /* 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,
+                * ensuring that bi_size doesn't overflow
+                */
+               req_sects = min_t(sector_t, nr_sects,
+                                       q->limits.max_discard_sectors);
+               if (req_sects > UINT_MAX >> 9)
+                       req_sects = UINT_MAX >> 9;
 
                /*
                 * If splitting a request, and the next starting sector would be


Reply via email to