summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorDennis Zhou <dennis@kernel.org>2019-12-11 16:07:06 -0800
committerDavid Sterba <dsterba@suse.com>2019-12-30 16:07:16 +0100
commit7b62e66cbbfb463a39bf83e30bdbbb4b9e83fa03 (patch)
tree2113465e2c867f36fffb374fe49417982584eaa6 /fs
parentfbd542971aa1e9ec33212afe1d9b4f1106cd85a1 (diff)
downloadlinux-stable-7b62e66cbbfb463a39bf83e30bdbbb4b9e83fa03.tar.gz
linux-stable-7b62e66cbbfb463a39bf83e30bdbbb4b9e83fa03.tar.bz2
linux-stable-7b62e66cbbfb463a39bf83e30bdbbb4b9e83fa03.zip
btrfs: punt all bios created in btrfs_submit_compressed_write()
Compressed writes happen in the background via kworkers. However, this causes bios to be attributed to root bypassing any cgroup limits from the actual writer. We tag the first bio with REQ_CGROUP_PUNT, which will punt the bio to an appropriate cgroup specific workqueue and attribute the IO properly. However, if btrfs_submit_compressed_write() creates a new bio, we don't tag it the same way. Add the appropriate tagging for subsequent bios. Fixes: ec39f7696ccfa ("Btrfs: use REQ_CGROUP_PUNT for worker thread submitted bios") Reviewed-by: Chris Mason <clm@fb.com> Signed-off-by: Dennis Zhou <dennis@kernel.org> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/compression.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index ee834ef7beb4..b08e16b8cebb 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -491,6 +491,10 @@ blk_status_t btrfs_submit_compressed_write(struct inode *inode, u64 start,
bio->bi_opf = REQ_OP_WRITE | write_flags;
bio->bi_private = cb;
bio->bi_end_io = end_compressed_bio_write;
+ if (blkcg_css) {
+ bio->bi_opf |= REQ_CGROUP_PUNT;
+ bio_associate_blkg_from_css(bio, blkcg_css);
+ }
bio_add_page(bio, page, PAGE_SIZE, 0);
}
if (bytes_left < PAGE_SIZE) {