The Linux Kernel Mailing List
 help / color / mirror / Atom feed
* [PATCH] blk-mq: add missing call to srcu_barrier() in blk_mq_free_tag_set()
       [not found] <CGME20260812060521eucas1p109a53a37ed0557d06aa7a68b613352aa@eucas1p1.samsung.com>
@ 2026-08-12  6:05 ` Marek Szyprowski
  2026-08-12 14:07   ` Paul E. McKenney
  2026-08-15  1:34   ` Zqiang
  0 siblings, 2 replies; 3+ messages in thread
From: Marek Szyprowski @ 2026-08-12  6:05 UTC (permalink / raw)
  To: linux-block, linux-kernel
  Cc: Marek Szyprowski, Jens Axboe, Zqiang, Paul E . McKenney

Commit 05c3e88488ed ("srcu: Queue sdp->work when the delay timer is
successfully deleted") added a check in cleanup_srcu_struct() if the
call to srcu_barrier() has been made before calling it, which
revealed a missing call to srcu_barrier() before calling
cleanup_srcu_struct(set->srcu). Fix this.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
This fixes the following issue observed recently in linux-next:
------------[ cut here ]------------
 WARNING: kernel/rcu/srcutree.c:706 at cleanup_srcu_struct+0x194/0x3d4, CPU#1: kworker/1:2/156
 Modules linked in: s5p_mfc exynos_gsc s5p_jpeg videobuf2_dma_contig v4l2_mem2mem videobuf2_memops videobuf2_v4l2 videobuf2_common videodev mc
 CPU: 1 UID: 0 PID: 156 Comm: kworker/1:2 Not tainted 7.2.0-rc3-00006-g05c3e88488ed-dirty #13430 PREEMPT
 Hardware name: Samsung Exynos (Flattened Device Tree)
 Workqueue: usb_hub_wq hub_event
 Call trace:
  unwind_backtrace from show_stack+0x10/0x14
  show_stack from dump_stack_lvl+0x6c/0x8c
  dump_stack_lvl from __warn+0x90/0x204
  __warn from warn_slowpath_fmt+0x1b4/0x1bc
  warn_slowpath_fmt from cleanup_srcu_struct+0x194/0x3d4
  cleanup_srcu_struct from blk_mq_free_tag_set+0x138/0x158
  blk_mq_free_tag_set from scsi_mq_free_tags+0x10/0x1c
  scsi_mq_free_tags from scsi_remove_host+0x14c/0x170
  scsi_remove_host from uas_disconnect+0x70/0x84
  uas_disconnect from usb_unbind_interface+0x78/0x2b4
  usb_unbind_interface from device_release_driver_internal+0x194/0x208
  device_release_driver_internal from bus_remove_device+0xf8/0x1c8
  bus_remove_device from device_del+0x138/0x3b0
  device_del from usb_disable_device+0xec/0x22c
  usb_disable_device from usb_disconnect+0xf8/0x2bc
  usb_disconnect from hub_event+0x9a8/0x1c3c
  hub_event from process_one_work+0x258/0x798
  process_one_work from worker_thread+0x1bc/0x3cc
  worker_thread from kthread+0x138/0x16c
  kthread from ret_from_fork+0x14/0x28
 Exception stack(0xf0dfdfb0 to 0xf0dfdff8)
 dfa0:                                     00000000 00000000 00000000 00000000
 dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
 dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
 irq event stamp: 23097
 hardirqs last  enabled at (23109): [<c0100bf8>] __irq_svc+0xb8/0xd0
 hardirqs last disabled at (23118): [<c0100b94>] __irq_svc+0x54/0xd0
 softirqs last  enabled at (23094): [<c013ef54>] handle_softirqs+0x32c/0x58c
 softirqs last disabled at (23065): [<c013f360>] __irq_exit_rcu+0x144/0x1f0
 ---[ end trace 0000000000000000 ]---
---
 block/blk-mq.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/block/blk-mq.c b/block/blk-mq.c
index 2c850330a32b..a26a11c73ee3 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -4975,6 +4975,7 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set)
 	srcu_barrier(&set->tags_srcu);
 	cleanup_srcu_struct(&set->tags_srcu);
 	if (set->flags & BLK_MQ_F_BLOCKING) {
+		srcu_barrier(set->srcu);
 		cleanup_srcu_struct(set->srcu);
 		kfree(set->srcu);
 	}
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] blk-mq: add missing call to srcu_barrier() in blk_mq_free_tag_set()
  2026-08-12  6:05 ` [PATCH] blk-mq: add missing call to srcu_barrier() in blk_mq_free_tag_set() Marek Szyprowski
@ 2026-08-12 14:07   ` Paul E. McKenney
  2026-08-15  1:34   ` Zqiang
  1 sibling, 0 replies; 3+ messages in thread
From: Paul E. McKenney @ 2026-08-12 14:07 UTC (permalink / raw)
  To: Marek Szyprowski; +Cc: linux-block, linux-kernel, Jens Axboe, Zqiang

On Wed, Aug 12, 2026 at 08:05:08AM +0200, Marek Szyprowski wrote:
> Commit 05c3e88488ed ("srcu: Queue sdp->work when the delay timer is
> successfully deleted") added a check in cleanup_srcu_struct() if the
> call to srcu_barrier() has been made before calling it, which
> revealed a missing call to srcu_barrier() before calling
> cleanup_srcu_struct(set->srcu). Fix this.
> 
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

Reviewed-by: Paul E. McKenney <paulmck@kernel.org>

> ---
> This fixes the following issue observed recently in linux-next:
> ------------[ cut here ]------------
>  WARNING: kernel/rcu/srcutree.c:706 at cleanup_srcu_struct+0x194/0x3d4, CPU#1: kworker/1:2/156
>  Modules linked in: s5p_mfc exynos_gsc s5p_jpeg videobuf2_dma_contig v4l2_mem2mem videobuf2_memops videobuf2_v4l2 videobuf2_common videodev mc
>  CPU: 1 UID: 0 PID: 156 Comm: kworker/1:2 Not tainted 7.2.0-rc3-00006-g05c3e88488ed-dirty #13430 PREEMPT
>  Hardware name: Samsung Exynos (Flattened Device Tree)
>  Workqueue: usb_hub_wq hub_event
>  Call trace:
>   unwind_backtrace from show_stack+0x10/0x14
>   show_stack from dump_stack_lvl+0x6c/0x8c
>   dump_stack_lvl from __warn+0x90/0x204
>   __warn from warn_slowpath_fmt+0x1b4/0x1bc
>   warn_slowpath_fmt from cleanup_srcu_struct+0x194/0x3d4
>   cleanup_srcu_struct from blk_mq_free_tag_set+0x138/0x158
>   blk_mq_free_tag_set from scsi_mq_free_tags+0x10/0x1c
>   scsi_mq_free_tags from scsi_remove_host+0x14c/0x170
>   scsi_remove_host from uas_disconnect+0x70/0x84
>   uas_disconnect from usb_unbind_interface+0x78/0x2b4
>   usb_unbind_interface from device_release_driver_internal+0x194/0x208
>   device_release_driver_internal from bus_remove_device+0xf8/0x1c8
>   bus_remove_device from device_del+0x138/0x3b0
>   device_del from usb_disable_device+0xec/0x22c
>   usb_disable_device from usb_disconnect+0xf8/0x2bc
>   usb_disconnect from hub_event+0x9a8/0x1c3c
>   hub_event from process_one_work+0x258/0x798
>   process_one_work from worker_thread+0x1bc/0x3cc
>   worker_thread from kthread+0x138/0x16c
>   kthread from ret_from_fork+0x14/0x28
>  Exception stack(0xf0dfdfb0 to 0xf0dfdff8)
>  dfa0:                                     00000000 00000000 00000000 00000000
>  dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
>  dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
>  irq event stamp: 23097
>  hardirqs last  enabled at (23109): [<c0100bf8>] __irq_svc+0xb8/0xd0
>  hardirqs last disabled at (23118): [<c0100b94>] __irq_svc+0x54/0xd0
>  softirqs last  enabled at (23094): [<c013ef54>] handle_softirqs+0x32c/0x58c
>  softirqs last disabled at (23065): [<c013f360>] __irq_exit_rcu+0x144/0x1f0
>  ---[ end trace 0000000000000000 ]---
> ---
>  block/blk-mq.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/block/blk-mq.c b/block/blk-mq.c
> index 2c850330a32b..a26a11c73ee3 100644
> --- a/block/blk-mq.c
> +++ b/block/blk-mq.c
> @@ -4975,6 +4975,7 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set)
>  	srcu_barrier(&set->tags_srcu);
>  	cleanup_srcu_struct(&set->tags_srcu);
>  	if (set->flags & BLK_MQ_F_BLOCKING) {
> +		srcu_barrier(set->srcu);
>  		cleanup_srcu_struct(set->srcu);
>  		kfree(set->srcu);
>  	}
> -- 
> 2.43.0
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] blk-mq: add missing call to srcu_barrier() in blk_mq_free_tag_set()
  2026-08-12  6:05 ` [PATCH] blk-mq: add missing call to srcu_barrier() in blk_mq_free_tag_set() Marek Szyprowski
  2026-08-12 14:07   ` Paul E. McKenney
@ 2026-08-15  1:34   ` Zqiang
  1 sibling, 0 replies; 3+ messages in thread
From: Zqiang @ 2026-08-15  1:34 UTC (permalink / raw)
  To: Marek Szyprowski, linux-block, linux-kernel
  Cc: Marek Szyprowski, Jens Axboe, Paul E . McKenney

> 
> Commit 05c3e88488ed ("srcu: Queue sdp->work when the delay timer is
> successfully deleted") added a check in cleanup_srcu_struct() if the
> call to srcu_barrier() has been made before calling it, which
> revealed a missing call to srcu_barrier() before calling
> cleanup_srcu_struct(set->srcu). Fix this.


This warnings should be fix in cleanup_srcu_struct().
https://lore.kernel.org/oe-lkp/202608060833.bce92909-lkp@intel.com/

and the set->srcu only be used by synchronize_srcu(), there are no
call_srcu(), so the srcu_barrier() should not be invoke before cleanup

Thanks
Zqiang



> 
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> This fixes the following issue observed recently in linux-next:
> ------------[ cut here ]------------
>  WARNING: kernel/rcu/srcutree.c:706 at cleanup_srcu_struct+0x194/0x3d4, CPU#1: kworker/1:2/156
>  Modules linked in: s5p_mfc exynos_gsc s5p_jpeg videobuf2_dma_contig v4l2_mem2mem videobuf2_memops videobuf2_v4l2 videobuf2_common videodev mc
>  CPU: 1 UID: 0 PID: 156 Comm: kworker/1:2 Not tainted 7.2.0-rc3-00006-g05c3e88488ed-dirty #13430 PREEMPT
>  Hardware name: Samsung Exynos (Flattened Device Tree)
>  Workqueue: usb_hub_wq hub_event
>  Call trace:
>  unwind_backtrace from show_stack+0x10/0x14
>  show_stack from dump_stack_lvl+0x6c/0x8c
>  dump_stack_lvl from __warn+0x90/0x204
>  __warn from warn_slowpath_fmt+0x1b4/0x1bc
>  warn_slowpath_fmt from cleanup_srcu_struct+0x194/0x3d4
>  cleanup_srcu_struct from blk_mq_free_tag_set+0x138/0x158
>  blk_mq_free_tag_set from scsi_mq_free_tags+0x10/0x1c
>  scsi_mq_free_tags from scsi_remove_host+0x14c/0x170
>  scsi_remove_host from uas_disconnect+0x70/0x84
>  uas_disconnect from usb_unbind_interface+0x78/0x2b4
>  usb_unbind_interface from device_release_driver_internal+0x194/0x208
>  device_release_driver_internal from bus_remove_device+0xf8/0x1c8
>  bus_remove_device from device_del+0x138/0x3b0
>  device_del from usb_disable_device+0xec/0x22c
>  usb_disable_device from usb_disconnect+0xf8/0x2bc
>  usb_disconnect from hub_event+0x9a8/0x1c3c
>  hub_event from process_one_work+0x258/0x798
>  process_one_work from worker_thread+0x1bc/0x3cc
>  worker_thread from kthread+0x138/0x16c
>  kthread from ret_from_fork+0x14/0x28
>  Exception stack(0xf0dfdfb0 to 0xf0dfdff8)
>  dfa0: 00000000 00000000 00000000 00000000
>  dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
>  dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
>  irq event stamp: 23097
>  hardirqs last enabled at (23109): [<c0100bf8>] __irq_svc+0xb8/0xd0
>  hardirqs last disabled at (23118): [<c0100b94>] __irq_svc+0x54/0xd0
>  softirqs last enabled at (23094): [<c013ef54>] handle_softirqs+0x32c/0x58c
>  softirqs last disabled at (23065): [<c013f360>] __irq_exit_rcu+0x144/0x1f0
>  ---[ end trace 0000000000000000 ]---
> ---
>  block/blk-mq.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/block/blk-mq.c b/block/blk-mq.c
> index 2c850330a32b..a26a11c73ee3 100644
> --- a/block/blk-mq.c
> +++ b/block/blk-mq.c
> @@ -4975,6 +4975,7 @@ void blk_mq_free_tag_set(struct blk_mq_tag_set *set)
>  srcu_barrier(&set->tags_srcu);
>  cleanup_srcu_struct(&set->tags_srcu);
>  if (set->flags & BLK_MQ_F_BLOCKING) {
> + srcu_barrier(set->srcu);
>  cleanup_srcu_struct(set->srcu);
>  kfree(set->srcu);
>  }
> -- 
> 2.43.0
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-08-15  1:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <CGME20260812060521eucas1p109a53a37ed0557d06aa7a68b613352aa@eucas1p1.samsung.com>
2026-08-12  6:05 ` [PATCH] blk-mq: add missing call to srcu_barrier() in blk_mq_free_tag_set() Marek Szyprowski
2026-08-12 14:07   ` Paul E. McKenney
2026-08-15  1:34   ` Zqiang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox