mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-04 04:04:19 +00:00
blk-cgroup: simplify blkg freeing from initialization failure paths
There is no need to delay freeing a blkg to a workqueue when freeing it after an initialization failure. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Tejun Heo <tj@kernel.org> Link: https://lore.kernel.org/r/20230203150400.3199230-5-hch@lst.de Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
0b6f93bdf0
commit
27b642b07a
@ -114,10 +114,8 @@ static bool blkcg_policy_enabled(struct request_queue *q,
|
|||||||
return pol && test_bit(pol->plid, q->blkcg_pols);
|
return pol && test_bit(pol->plid, q->blkcg_pols);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void blkg_free_workfn(struct work_struct *work)
|
static void blkg_free(struct blkcg_gq *blkg)
|
||||||
{
|
{
|
||||||
struct blkcg_gq *blkg = container_of(work, struct blkcg_gq,
|
|
||||||
free_work);
|
|
||||||
struct request_queue *q = blkg->q;
|
struct request_queue *q = blkg->q;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -143,23 +141,9 @@ static void blkg_free_workfn(struct work_struct *work)
|
|||||||
kfree(blkg);
|
kfree(blkg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
static void blkg_free_workfn(struct work_struct *work)
|
||||||
* blkg_free - free a blkg
|
|
||||||
* @blkg: blkg to free
|
|
||||||
*
|
|
||||||
* Free @blkg which may be partially allocated.
|
|
||||||
*/
|
|
||||||
static void blkg_free(struct blkcg_gq *blkg)
|
|
||||||
{
|
{
|
||||||
if (!blkg)
|
blkg_free(container_of(work, struct blkcg_gq, free_work));
|
||||||
return;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Both ->pd_free_fn() and request queue's release handler may
|
|
||||||
* sleep, so free us by scheduling one work func
|
|
||||||
*/
|
|
||||||
INIT_WORK(&blkg->free_work, blkg_free_workfn);
|
|
||||||
schedule_work(&blkg->free_work);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __blkg_release(struct rcu_head *rcu)
|
static void __blkg_release(struct rcu_head *rcu)
|
||||||
@ -170,7 +154,10 @@ static void __blkg_release(struct rcu_head *rcu)
|
|||||||
|
|
||||||
/* release the blkcg and parent blkg refs this blkg has been holding */
|
/* release the blkcg and parent blkg refs this blkg has been holding */
|
||||||
css_put(&blkg->blkcg->css);
|
css_put(&blkg->blkcg->css);
|
||||||
blkg_free(blkg);
|
|
||||||
|
/* ->pd_free_fn() may sleep, so free from a work queue */
|
||||||
|
INIT_WORK(&blkg->free_work, blkg_free_workfn);
|
||||||
|
schedule_work(&blkg->free_work);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user