diff mbox series

btrfs: add back cgroup writeback support for metadata

Message ID 20230530053936.104984-1-hch@lst.de (mailing list archive)
State New, archived
Headers show
Series btrfs: add back cgroup writeback support for metadata | expand

Commit Message

Christoph Hellwig May 30, 2023, 5:39 a.m. UTC
Commit c211fd861077 ("btrfs: don't use btrfs_bio_ctrl for extent buffer
writing") removed support for cgroup association for metadata writeback.
While cgroup interaction with metadata is somewhat questionable and not
done by other file systems, any kind of change to this behaviour should
not happen silently and under the hood, so bring it back.

Fixes: c211fd861077 ("btrfs: don't use btrfs_bio_ctrl for extent buffer writing")
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 fs/btrfs/extent_io.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

David Sterba May 30, 2023, 6:51 p.m. UTC | #1
On Tue, May 30, 2023 at 07:39:36AM +0200, Christoph Hellwig wrote:
> Commit c211fd861077 ("btrfs: don't use btrfs_bio_ctrl for extent buffer
> writing") removed support for cgroup association for metadata writeback.
> While cgroup interaction with metadata is somewhat questionable and not
> done by other file systems, any kind of change to this behaviour should
> not happen silently and under the hood, so bring it back.
> 
> Fixes: c211fd861077 ("btrfs: don't use btrfs_bio_ctrl for extent buffer writing")

Folded to the patch, thanks.
diff mbox series

Patch

diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index bbf212c7a43f79..87ee376b3cc812 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -1820,6 +1820,8 @@  static noinline_for_stack void write_one_eb(struct extent_buffer *eb,
 			       REQ_OP_WRITE | REQ_META | wbc_to_write_flags(wbc),
 			       eb->fs_info, extent_buffer_write_end_io, eb);
 	bbio->bio.bi_iter.bi_sector = eb->start >> SECTOR_SHIFT;
+	bio_set_dev(&bbio->bio, fs_info->fs_devices->latest_dev->bdev);
+	wbc_init_bio(wbc, &bbio->bio);
 	bbio->inode = BTRFS_I(eb->fs_info->btree_inode);
 	bbio->file_offset = eb->start;
 	if (fs_info->nodesize < PAGE_SIZE) {
@@ -1833,6 +1835,7 @@  static noinline_for_stack void write_one_eb(struct extent_buffer *eb,
 			wbc->nr_to_write--;
 		}
 		__bio_add_page(&bbio->bio, p, eb->len, eb->start - page_offset(p));
+		wbc_account_cgroup_owner(wbc, p, eb->len);
 		unlock_page(p);
 	} else {
 		for (int i = 0; i < num_extent_pages(eb); i++) {
@@ -1842,6 +1845,7 @@  static noinline_for_stack void write_one_eb(struct extent_buffer *eb,
 			clear_page_dirty_for_io(p);
 			set_page_writeback(p);
 			__bio_add_page(&bbio->bio, p, PAGE_SIZE, 0);
+			wbc_account_cgroup_owner(wbc, p, PAGE_SIZE);
 			wbc->nr_to_write--;
 			unlock_page(p);
 		}