mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
mm/page_io: don't nest queue_lock under rcu in bio_associate_blkg_from_page()
Take a css reference under RCU, drop RCU, and then associate the bio with the blkg. This avoids nesting queue_lock under RCU and prepares to protect blkcg with blkcg_mutex instead of queue_lock. Use css_tryget() instead of css_tryget_online() so swap writeback for pages charged to a dying memcg still passes the dying css to bio_associate_blkg_from_css(). That preserves the existing closest-live ancestor fallback instead of charging those bios to the root blkg. Signed-off-by: Yu Kuai <yukuai@fygo.io> Link: https://patch.msgid.link/c910d2c39d3ec97f67de68af636a52394342d55f.1780621988.git.yukuai@fygo.io Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
4cfd7c1cff
commit
f928145cbc
|
|
@ -317,8 +317,13 @@ static void bio_associate_blkg_from_page(struct bio *bio, struct folio *folio)
|
|||
rcu_read_lock();
|
||||
memcg = folio_memcg(folio);
|
||||
css = cgroup_e_css(memcg->css.cgroup, &io_cgrp_subsys);
|
||||
bio_associate_blkg_from_css(bio, css);
|
||||
if (!css || !css_tryget(css))
|
||||
css = NULL;
|
||||
rcu_read_unlock();
|
||||
|
||||
bio_associate_blkg_from_css(bio, css);
|
||||
if (css)
|
||||
css_put(css);
|
||||
}
|
||||
#else
|
||||
#define bio_associate_blkg_from_page(bio, folio) do { } while (0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user