diff --git a/[refs] b/[refs] index 235611b522c6..9dddc2ff0970 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 390192b300570b2bc721d77067ca133f58015ae8 +refs/heads/master: 0f79960391a5a1e3679956024e18aeeb0369ac44 diff --git a/trunk/block/blk-lib.c b/trunk/block/blk-lib.c index 78e627e2581d..64974b1c7cca 100644 --- a/trunk/block/blk-lib.c +++ b/trunk/block/blk-lib.c @@ -59,7 +59,10 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector, * granularity */ max_discard_sectors = min(q->limits.max_discard_sectors, UINT_MAX >> 9); - if (q->limits.discard_granularity) { + if (!unlikely(!max_discard_sectors)) { + /* Avoid infinite loop below. Being cautious never hurts. */ + return -EOPNOTSUPP; + } else if (q->limits.discard_granularity) { unsigned int disc_sects = q->limits.discard_granularity >> 9; max_discard_sectors &= ~(disc_sects - 1);