diff options
author | Christoph Hellwig <hch@lst.de> | 2023-03-27 02:49:49 +0200 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2023-04-17 18:01:22 +0200 |
commit | 896d7c1a90f33e9c6ee9002d53980dde4d8b99ee (patch) | |
tree | 24f48dbbbd99537e78e3628d6fd733423a8a646b /fs/btrfs | |
parent | btrfs: don't free the async_extent in submit_uncompressed_range (diff) | |
download | linux-896d7c1a90f33e9c6ee9002d53980dde4d8b99ee.tar.xz linux-896d7c1a90f33e9c6ee9002d53980dde4d8b99ee.zip |
btrfs: also use kthread_associate_blkcg for uncompressible ranges
submit_one_async_extent needs to use submit_one_async_extent no matter
if the range it handles ends up beeing compressed or not as the deadlock
risk due to cgroup thottling is the same. Call kthread_associate_blkcg
earlier to cover submit_uncompressed_range case as well.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/inode.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 5db8b6cffb24..5c216cab2076 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -983,6 +983,9 @@ static int submit_one_async_extent(struct btrfs_inode *inode, u64 start = async_extent->start; u64 end = async_extent->start + async_extent->ram_size - 1; + if (async_chunk->blkcg_css) + kthread_associate_blkcg(async_chunk->blkcg_css); + /* * If async_chunk->locked_page is in the async_extent range, we need to * handle it. @@ -1053,8 +1056,6 @@ static int submit_one_async_extent(struct btrfs_inode *inode, NULL, EXTENT_LOCKED | EXTENT_DELALLOC, 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 */ async_extent->ram_size, /* num_bytes */ ins.objectid, /* disk_bytenr */ @@ -1062,10 +1063,10 @@ static int submit_one_async_extent(struct btrfs_inode *inode, async_extent->pages, /* compressed_pages */ async_extent->nr_pages, async_chunk->write_flags, true); - if (async_chunk->blkcg_css) - kthread_associate_blkcg(NULL); *alloc_hint = ins.objectid + ins.offset; done: + if (async_chunk->blkcg_css) + kthread_associate_blkcg(NULL); kfree(async_extent); return ret; |