Linux 6.1.17
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.17 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 +- block/blk-cgroup.c | 39 ++++++++------------------------------- include/linux/blkdev.h | 1 - 3 files changed, 9 insertions(+), 33 deletions(-)
Greg Kroah-Hartman (3):
Revert "blk-cgroup: synchronize pd_free_fn() from blkg_free_workfn() and blkcg_deactivate_policy()" Revert "blk-cgroup: dropping parent refcount after pd_free_fn() is done"
Linux 6.1.17
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 16 +SUBLEVEL = 17 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
block/blk-cgroup.c +8 -31
@@ -87,32 +87,14 @@ static void blkg_free_workfn(struct work_struct *work) { struct blkcg_gq *blkg = container_of(work, struct blkcg_gq, free_work); -struct request_queue *q = blkg->q;int i; -/* -* pd_free_fn() can also be called from blkcg_deactivate_policy(), -* in order to make sure pd_free_fn() is called in order, the deletion -* of the list blkg->q_node is delayed to here from blkg_destroy(), and -* blkcg_mutex is used to synchronize blkg_free_workfn() and -* blkcg_deactivate_policy(). -*/ -if (q) -mutex_lock (&q->blkcg_mutex); -for (i =0 ; i <BLKCG_MAX_POLS ; i++)if (blkg->pd[i]) blkcg_policy[i]->pd_free_fn (blkg->pd[i]); -if (blkg->parent) -blkg_put (blkg->parent); - -if (q) { -list_del_init (&blkg->q_node); -mutex_unlock (&q->blkcg_mutex); -blk_put_queue (q); - } - +if (blkg->q) +blk_put_queue (blkg->q);free_percpu (blkg->iostat_cpu);percpu_ref_exit (&blkg->refcnt);kfree (blkg);
@@ -145,6 +127,8 @@ static void __blkg_release(struct rcu_head *rcu)/* release the blkcg and parent blkg refs this blkg has been holding */ css_put (&blkg->blkcg->css); +if (blkg->parent) +blkg_put (blkg->parent);blkg_free (blkg); }
@@ -441,14 +425,9 @@ static void blkg_destroy(struct blkcg_gq *blkg)lockdep_assert_held (&blkg->q->queue_lock);lockdep_assert_held (&blkcg->lock); -/* -* blkg stays on the queue list until blkg_free_workfn(), see details in -* blkg_free_workfn(), hence this function can be called from -* blkcg_destroy_blkgs() first and again from blkg_destroy_all() before -* blkg_free_workfn(). -*/ -if (hlist_unhashed (&blkg->blkcg_node)) -return ; +/* Something wrong if we are trying to remove same group twice */ +WARN_ON_ONCE (list_empty (&blkg->q_node)); +WARN_ON_ONCE (hlist_unhashed (&blkg->blkcg_node));for (i =0 ; i <BLKCG_MAX_POLS ; i++) {struct blkcg_policy *pol = blkcg_policy[i];
@@ -460,6 +439,7 @@ static void blkg_destroy(struct blkcg_gq *blkg) blkg->online = false;radix_tree_delete (&blkcg->blkg_tree, blkg->q->id); +list_del_init (&blkg->q_node);hlist_del_init_rcu (&blkg->blkcg_node);/*
@@ -1246,7 +1226,6 @@ int blkcg_init_disk(struct gendisk *disk)int ret;INIT_LIST_HEAD (&q->blkg_list); -mutex_init (&q->blkcg_mutex); new_blkg =blkg_alloc (&blkcg_root, disk,GFP_KERNEL );if (!new_blkg)
@@ -1484,7 +1463,6 @@ void blkcg_deactivate_policy(struct request_queue *q,if (queue_is_mq (q))blk_mq_freeze_queue (q); -mutex_lock (&q->blkcg_mutex);spin_lock_irq (&q->queue_lock);__clear_bit (pol->plid, q->blkcg_pols);
@@ -1503,7 +1481,6 @@ void blkcg_deactivate_policy(struct request_queue *q, }spin_unlock_irq (&q->queue_lock); -mutex_unlock (&q->blkcg_mutex);if (queue_is_mq (q))blk_mq_unfreeze_queue (q);
include/linux/blkdev.h +0 -1
@@ -487,7 +487,6 @@ struct request_queue {DECLARE_BITMAP (blkcg_pols,BLKCG_MAX_POLS );struct blkcg_gq *root_blkg;struct list_head blkg_list; -struct mutex blkcg_mutex;#endif struct queue_limits limits;