Skip to content

Commit a1a6bb1

Browse files
Panky-codeskawasaki
authored andcommitted
block: use largest_zero_folio in __blkdev_issue_zero_pages()
Use largest_zero_folio() in __blkdev_issue_zero_pages(). On systems with CONFIG_STATIC_PMD_ZERO_PAGE enabled, we will end up sending larger bvecs instead of multiple small ones. Noticed a 4% increase in performance on a commercial NVMe SSD which does not support OP_WRITE_ZEROES. The device's MDTS was 128K. The performance gains might be bigger if the device supports bigger MDTS. Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
1 parent 1fcdd55 commit a1a6bb1

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

block/blk-lib.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,10 @@ static void __blkdev_issue_zero_pages(struct block_device *bdev,
196196
sector_t sector, sector_t nr_sects, gfp_t gfp_mask,
197197
struct bio **biop, unsigned int flags)
198198
{
199+
struct folio *zero_folio;
200+
201+
zero_folio = largest_zero_folio();
202+
199203
while (nr_sects) {
200204
unsigned int nr_vecs = __blkdev_sectors_to_bio_pages(nr_sects);
201205
struct bio *bio;
@@ -208,15 +212,14 @@ static void __blkdev_issue_zero_pages(struct block_device *bdev,
208212
break;
209213

210214
do {
211-
unsigned int len, added;
215+
unsigned int len;
212216

213-
len = min_t(sector_t,
214-
PAGE_SIZE, nr_sects << SECTOR_SHIFT);
215-
added = bio_add_page(bio, ZERO_PAGE(0), len, 0);
216-
if (added < len)
217+
len = min_t(sector_t, folio_size(zero_folio),
218+
nr_sects << SECTOR_SHIFT);
219+
if (!bio_add_folio(bio, zero_folio, len, 0))
217220
break;
218-
nr_sects -= added >> SECTOR_SHIFT;
219-
sector += added >> SECTOR_SHIFT;
221+
nr_sects -= len >> SECTOR_SHIFT;
222+
sector += len >> SECTOR_SHIFT;
220223
} while (nr_sects);
221224

222225
*biop = bio_chain_and_submit(*biop, bio);

0 commit comments

Comments
 (0)