Skip to content

Commit 73a768d

Browse files
Christoph Hellwigaxboe
authored andcommitted
block: factor out a blk_write_zeroes_limit helper
Contrary to the comment in __blkdev_issue_write_zeroes, nothing here checks for a potential bi_size overflow. Add a helper mirroring the secure erase code for the check. Signed-off-by: Christoph Hellwig <[email protected]> Reviewed-by: Martin K. Petersen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jens Axboe <[email protected]>
1 parent 2f20872 commit 73a768d

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

block/blk-lib.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,24 +103,28 @@ int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
103103
}
104104
EXPORT_SYMBOL(blkdev_issue_discard);
105105

106+
static sector_t bio_write_zeroes_limit(struct block_device *bdev)
107+
{
108+
sector_t bs_mask = (bdev_logical_block_size(bdev) >> 9) - 1;
109+
110+
return min(bdev_write_zeroes_sectors(bdev),
111+
(UINT_MAX >> SECTOR_SHIFT) & ~bs_mask);
112+
}
113+
106114
static int __blkdev_issue_write_zeroes(struct block_device *bdev,
107115
sector_t sector, sector_t nr_sects, gfp_t gfp_mask,
108116
struct bio **biop, unsigned flags)
109117
{
110118
struct bio *bio = *biop;
111-
unsigned int max_sectors;
112119

113120
if (bdev_read_only(bdev))
114121
return -EPERM;
115-
116-
/* Ensure that max_sectors doesn't overflow bi_size */
117-
max_sectors = bdev_write_zeroes_sectors(bdev);
118-
119-
if (max_sectors == 0)
122+
if (!bdev_write_zeroes_sectors(bdev))
120123
return -EOPNOTSUPP;
121124

122125
while (nr_sects) {
123-
unsigned int len = min_t(sector_t, nr_sects, max_sectors);
126+
unsigned int len = min_t(sector_t, nr_sects,
127+
bio_write_zeroes_limit(bdev));
124128

125129
bio = blk_next_bio(bio, bdev, 0, REQ_OP_WRITE_ZEROES, gfp_mask);
126130
bio->bi_iter.bi_sector = sector;

0 commit comments

Comments
 (0)