Message ID | d934383ea528d920a95b6107daad6023b516f0f4.1576109087.git.dennis@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] btrfs: punt all bios created in btrfs_submit_compressed_write() | expand |
On 11 Dec 2019, at 19:07, Dennis Zhou wrote: > 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") > Cc: Chris Mason <clm@fb.com> > Signed-off-by: Dennis Zhou <dennis@kernel.org> Good catch Dennis. The compression code should end up limiting the size of the bio such that we'll never actually fail to bio_add_page(), but this is still the right thing to do. Reviewed-by: Chris Mason <clm@fb.com> -chris
On Wed, Dec 11, 2019 at 04:07:06PM -0800, Dennis Zhou wrote: > 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") > Cc: Chris Mason <clm@fb.com> > Signed-off-by: Dennis Zhou <dennis@kernel.org> 1 and 2 queued for 5.5-rc, thanks.
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c index ed05e5277399..4ce81571f0cd 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) {
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") Cc: Chris Mason <clm@fb.com> Signed-off-by: Dennis Zhou <dennis@kernel.org> --- fs/btrfs/compression.c | 4 ++++ 1 file changed, 4 insertions(+)