Commit 05d06a5c authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David Sterba

btrfs: move kthread_associate_blkcg out of btrfs_submit_compressed_write

btrfs_submit_compressed_write should not have to care if it is called
from a helper thread or not.  Move the kthread_associate_blkcg handling
into submit_one_async_extent, as that is the one caller that needs it.
Also move the assignment of REQ_CGROUP_PUNT into cow_file_range_async,
as that is the routine that sets up the helper thread offload.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 0f69d1f4
...@@ -286,7 +286,6 @@ void btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start, ...@@ -286,7 +286,6 @@ void btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start,
struct page **compressed_pages, struct page **compressed_pages,
unsigned int nr_pages, unsigned int nr_pages,
blk_opf_t write_flags, blk_opf_t write_flags,
struct cgroup_subsys_state *blkcg_css,
bool writeback) bool writeback)
{ {
struct btrfs_fs_info *fs_info = inode->root->fs_info; struct btrfs_fs_info *fs_info = inode->root->fs_info;
...@@ -295,10 +294,6 @@ void btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start, ...@@ -295,10 +294,6 @@ void btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start,
ASSERT(IS_ALIGNED(start, fs_info->sectorsize) && ASSERT(IS_ALIGNED(start, fs_info->sectorsize) &&
IS_ALIGNED(len, fs_info->sectorsize)); IS_ALIGNED(len, fs_info->sectorsize));
if (blkcg_css) {
kthread_associate_blkcg(blkcg_css);
write_flags |= REQ_CGROUP_PUNT;
}
write_flags |= REQ_BTRFS_ONE_ORDERED; write_flags |= REQ_BTRFS_ONE_ORDERED;
cb = alloc_compressed_bio(inode, start, REQ_OP_WRITE | write_flags, cb = alloc_compressed_bio(inode, start, REQ_OP_WRITE | write_flags,
...@@ -314,9 +309,6 @@ void btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start, ...@@ -314,9 +309,6 @@ void btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start,
btrfs_add_compressed_bio_pages(cb); btrfs_add_compressed_bio_pages(cb);
btrfs_submit_bio(&cb->bbio, 0); btrfs_submit_bio(&cb->bbio, 0);
if (blkcg_css)
kthread_associate_blkcg(NULL);
} }
/* /*
......
...@@ -92,7 +92,6 @@ void btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start, ...@@ -92,7 +92,6 @@ void btrfs_submit_compressed_write(struct btrfs_inode *inode, u64 start,
struct page **compressed_pages, struct page **compressed_pages,
unsigned int nr_pages, unsigned int nr_pages,
blk_opf_t write_flags, blk_opf_t write_flags,
struct cgroup_subsys_state *blkcg_css,
bool writeback); bool writeback);
void btrfs_submit_compressed_read(struct btrfs_bio *bbio, int mirror_num); void btrfs_submit_compressed_read(struct btrfs_bio *bbio, int mirror_num);
......
...@@ -1054,14 +1054,18 @@ static int submit_one_async_extent(struct btrfs_inode *inode, ...@@ -1054,14 +1054,18 @@ static int submit_one_async_extent(struct btrfs_inode *inode,
extent_clear_unlock_delalloc(inode, start, end, extent_clear_unlock_delalloc(inode, start, end,
NULL, EXTENT_LOCKED | EXTENT_DELALLOC, NULL, EXTENT_LOCKED | EXTENT_DELALLOC,
PAGE_UNLOCK | PAGE_START_WRITEBACK); PAGE_UNLOCK | PAGE_START_WRITEBACK);
if (async_chunk->blkcg_css)
kthread_associate_blkcg(async_chunk->blkcg_css);
btrfs_submit_compressed_write(inode, start, /* file_offset */ btrfs_submit_compressed_write(inode, start, /* file_offset */
async_extent->ram_size, /* num_bytes */ async_extent->ram_size, /* num_bytes */
ins.objectid, /* disk_bytenr */ ins.objectid, /* disk_bytenr */
ins.offset, /* compressed_len */ ins.offset, /* compressed_len */
async_extent->pages, /* compressed_pages */ async_extent->pages, /* compressed_pages */
async_extent->nr_pages, async_extent->nr_pages,
async_chunk->write_flags, async_chunk->write_flags, true);
async_chunk->blkcg_css, true); if (async_chunk->blkcg_css)
kthread_associate_blkcg(NULL);
*alloc_hint = ins.objectid + ins.offset; *alloc_hint = ins.objectid + ins.offset;
kfree(async_extent); kfree(async_extent);
return ret; return ret;
...@@ -1613,6 +1617,7 @@ static int cow_file_range_async(struct btrfs_inode *inode, ...@@ -1613,6 +1617,7 @@ static int cow_file_range_async(struct btrfs_inode *inode,
if (blkcg_css != blkcg_root_css) { if (blkcg_css != blkcg_root_css) {
css_get(blkcg_css); css_get(blkcg_css);
async_chunk[i].blkcg_css = blkcg_css; async_chunk[i].blkcg_css = blkcg_css;
async_chunk[i].write_flags |= REQ_CGROUP_PUNT;
} else { } else {
async_chunk[i].blkcg_css = NULL; async_chunk[i].blkcg_css = NULL;
} }
...@@ -10348,8 +10353,7 @@ ssize_t btrfs_do_encoded_write(struct kiocb *iocb, struct iov_iter *from, ...@@ -10348,8 +10353,7 @@ ssize_t btrfs_do_encoded_write(struct kiocb *iocb, struct iov_iter *from,
btrfs_delalloc_release_extents(inode, num_bytes); btrfs_delalloc_release_extents(inode, num_bytes);
btrfs_submit_compressed_write(inode, start, num_bytes, ins.objectid, btrfs_submit_compressed_write(inode, start, num_bytes, ins.objectid,
ins.offset, pages, nr_pages, 0, NULL, ins.offset, pages, nr_pages, 0, false);
false);
ret = orig_count; ret = orig_count;
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment