diff options
author | Chris Mason <clm@fb.com> | 2019-07-10 22:28:17 +0300 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2019-11-18 14:46:53 +0300 |
commit | ec39f7696ccfac85b3eea41eba7d6f747ee4ce8d (patch) | |
tree | 9a2da4377b0d00e0c553bbed9362cb21dc2e738f /fs/btrfs/extent_io.c | |
parent | 1d53c9e6723022b12e4a5ed4b141f67c834b7f6f (diff) | |
download | linux-ec39f7696ccfac85b3eea41eba7d6f747ee4ce8d.tar.xz |
Btrfs: use REQ_CGROUP_PUNT for worker thread submitted bios
Async CRCs and compression submit IO through helper threads, which means
they have IO priority inversions when cgroup IO controllers are in use.
This flags all of the writes submitted by btrfs helper threads as
REQ_CGROUP_PUNT. submit_bio() will punt these to dedicated per-blkcg
work items to avoid the priority inversion.
For the compression code, we take a reference on the wbc's blkg css and
pass it down to the async workers.
For the async CRCs, the bio already has the correct css, we just need to
tell the block layer to use REQ_CGROUP_PUNT.
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Chris Mason <clm@fb.com>
Modified-and-reviewed-by: Tejun Heo <tj@kernel.org>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/extent_io.c')
-rw-r--r-- | fs/btrfs/extent_io.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 4e550a3e7e34..16b5d8e02e77 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -4250,6 +4250,9 @@ int extent_write_locked_range(struct inode *inode, u64 start, u64 end, .nr_to_write = nr_pages * 2, .range_start = start, .range_end = end + 1, + /* We're called from an async helper function */ + .punt_to_cgroup = 1, + .no_cgroup_owner = 1, }; while (start <= end) { |