Re: [PATCH 2/3] block: make __blkdev_issue_zero_pages() less confusing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/6/20 6:53 AM, Tom Yan wrote:
Instead of using the same check for the two layers of loops, count
bio pages in the inner loop instead.

Signed-off-by: Tom Yan <tom.ty89@xxxxxxxxx>
---
  block/blk-lib.c | 11 +++++------
  1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/block/blk-lib.c b/block/blk-lib.c
index c1e9388a8fb8..354dcab760c7 100644
--- a/block/blk-lib.c
+++ b/block/blk-lib.c
@@ -318,7 +318,7 @@ static int __blkdev_issue_zero_pages(struct block_device *bdev,
  	struct request_queue *q = bdev_get_queue(bdev);
  	struct bio *bio = *biop;
  	int bi_size = 0;
-	unsigned int sz;
+	unsigned int sz, bio_nr_pages;
if (!q)
  		return -ENXIO;
@@ -327,19 +327,18 @@ static int __blkdev_issue_zero_pages(struct block_device *bdev,
  		return -EPERM;
while (nr_sects != 0) {
-		bio = blk_next_bio(bio, __blkdev_sectors_to_bio_pages(nr_sects),
-				   gfp_mask);
+		bio_nr_pages = __blkdev_sectors_to_bio_pages(nr_sects);
+		bio = blk_next_bio(bio, bio_nr_pages, gfp_mask);
  		bio->bi_iter.bi_sector = sector;
  		bio_set_dev(bio, bdev);
  		bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
- while (nr_sects != 0) {
+		while (bio_nr_pages != 0) {
  			sz = min((sector_t) PAGE_SIZE, nr_sects << 9);

nr_sects will need to be modified, too, if we iterate over bio_nr_pages instead of nr_sects.

  			bi_size = bio_add_page(bio, ZERO_PAGE(0), sz, 0);
  			nr_sects -= bi_size >> 9;
  			sector += bi_size >> 9;
-			if (bi_size < sz)
-				break;
+			bio_nr_pages--;
  		}
  		cond_resched();
  	}


Cheers,

Hannes
--
Dr. Hannes Reinecke                Kernel Storage Architect
hare@xxxxxxx                              +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux