summaryrefslogtreecommitdiffstats
path: root/drivers/iommu/io-pgtable.c
diff options
context:
space:
mode:
authorYu Kuai <yukuai3@huawei.com>2022-08-29 10:22:40 +0800
committerJens Axboe <axboe@kernel.dk>2022-09-12 00:19:48 -0600
commita880ae93e5b5bb5d8d5500077a391e3f5ec7715c (patch)
tree62e67e5081b5436c3ab91445387c6382f039cf0b /drivers/iommu/io-pgtable.c
parent681cd46fff8cd81e387747c7850f2e730d3e0b74 (diff)
downloadlinux-a880ae93e5b5bb5d8d5500077a391e3f5ec7715c.tar.gz
linux-a880ae93e5b5bb5d8d5500077a391e3f5ec7715c.tar.bz2
linux-a880ae93e5b5bb5d8d5500077a391e3f5ec7715c.zip
blk-throttle: fix io hung due to configuration updates
If new configuration is submitted while a bio is throttled, then new waiting time is recalculated regardless that the bio might already wait for some time: tg_conf_updated throtl_start_new_slice tg_update_disptime throtl_schedule_next_dispatch Then io hung can be triggered by always submmiting new configuration before the throttled bio is dispatched. Fix the problem by respecting the time that throttled bio already waited. In order to do that, add new fields to record how many bytes/io are waited, and use it to calculate wait time for throttled bio under new configuration. Some simple test: 1) cd /sys/fs/cgroup/blkio/ echo $$ > cgroup.procs echo "8:0 2048" > blkio.throttle.write_bps_device { sleep 2 echo "8:0 1024" > blkio.throttle.write_bps_device } & dd if=/dev/zero of=/dev/sda bs=8k count=1 oflag=direct 2) cd /sys/fs/cgroup/blkio/ echo $$ > cgroup.procs echo "8:0 1024" > blkio.throttle.write_bps_device { sleep 4 echo "8:0 2048" > blkio.throttle.write_bps_device } & dd if=/dev/zero of=/dev/sda bs=8k count=1 oflag=direct test results: io finish time before this patch with this patch 1) 10s 6s 2) 8s 6s Signed-off-by: Yu Kuai <yukuai3@huawei.com> Reviewed-by: Michal Koutný <mkoutny@suse.com> Acked-by: Tejun Heo <tj@kernel.org> Link: https://lore.kernel.org/r/20220829022240.3348319-5-yukuai1@huaweicloud.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/iommu/io-pgtable.c')
0 files changed, 0 insertions, 0 deletions