|
@@ -68,6 +68,8 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
|
|
|
*/
|
|
|
req_sects = min_t(sector_t, nr_sects,
|
|
|
q->limits.max_discard_sectors);
|
|
|
+ if (!req_sects)
|
|
|
+ goto fail;
|
|
|
if (req_sects > UINT_MAX >> 9)
|
|
|
req_sects = UINT_MAX >> 9;
|
|
|
|
|
@@ -105,6 +107,14 @@ int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
|
|
|
|
|
|
*biop = bio;
|
|
|
return 0;
|
|
|
+
|
|
|
+fail:
|
|
|
+ if (bio) {
|
|
|
+ submit_bio_wait(bio);
|
|
|
+ bio_put(bio);
|
|
|
+ }
|
|
|
+ *biop = NULL;
|
|
|
+ return -EOPNOTSUPP;
|
|
|
}
|
|
|
EXPORT_SYMBOL(__blkdev_issue_discard);
|
|
|
|