FAILED: patch "[PATCH] block: add bio_start_io_acct_time() to control start_time" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e45c47d1f94e0cc7b6b079fdb4bcce2995e2adc4 Mon Sep 17 00:00:00 2001
From: Mike Snitzer <[email protected]>
Date: Fri, 28 Jan 2022 10:58:39 -0500
Subject: [PATCH] block: add bio_start_io_acct_time() to control start_time
bio_start_io_acct_time() interface is like bio_start_io_acct() that allows start_time to be passed in. This gives drivers the ability to defer starting accounting until after IO is issued (but possibily not entirely due to bio splitting).
block/blk-core.c +19 -6
@@ -1061,20 +1061,32 @@ again: }static unsigned long __part_start_io_acct (struct block_device *part, -unsigned int sectors,unsigned int op) +unsigned int sectors,unsigned int op, +unsigned long start_time) {const int sgrp =op_stat_group (op); -unsigned long now =READ_ONCE (jiffies);part_stat_lock (); -update_io_ticks (part, now, false); +update_io_ticks (part, start_time, false);part_stat_inc (part, ios[sgrp]);part_stat_add (part, sectors[sgrp], sectors);part_stat_local_inc (part, in_flight[op_is_write (op)]);part_stat_unlock (); -return now; +return start_time; +} + +/** +* bio_start_io_acct_time - start I/O accounting for bio based drivers +* @bio: bio to start account for +* @start_time: start time that should be passed back to bio_end_io_acct(). +*/ +void bio_start_io_acct_time (struct bio *bio,unsigned long start_time) +{ +__part_start_io_acct (bio->bi_bdev,bio_sectors (bio), +bio_op (bio), start_time); } +EXPORT_SYMBOL_GPL (bio_start_io_acct_time);/** * bio_start_io_acct - start I/O accounting for bio based drivers
@@ -1084,14 +1096,15 @@ static unsigned long __part_start_io_acct(struct block_device *part,*/ unsigned long bio_start_io_acct (struct bio *bio) { -return __part_start_io_acct (bio->bi_bdev,bio_sectors (bio),bio_op (bio)); +return __part_start_io_acct (bio->bi_bdev,bio_sectors (bio), +bio_op (bio), jiffies); }EXPORT_SYMBOL_GPL (bio_start_io_acct);unsigned long disk_start_io_acct (struct gendisk *disk,unsigned int sectors,unsigned int op) { -return __part_start_io_acct (disk->part0, sectors, op); +return __part_start_io_acct (disk->part0, sectors, op, jiffies); }EXPORT_SYMBOL (disk_start_io_acct);
include/linux/blkdev.h +1 -0
@@ -1258,6 +1258,7 @@ unsigned long disk_start_io_acct(struct gendisk *disk, unsigned int sectors,void disk_end_io_acct (struct gendisk *disk,unsigned int op,unsigned long start_time); +void bio_start_io_acct_time (struct bio *bio,unsigned long start_time);unsigned long bio_start_io_acct (struct bio *bio);void bio_end_io_acct_remapped (struct bio *bio,unsigned long start_time,struct block_device *orig_bdev);