* Re: [RFC] io_uring: fix the dead lock between io_uring and core dump
[not found] <20250226113936.385747-1-haifeng.xu@shopee.com>
@ 2025-02-27 18:24 ` kernel test robot
2025-02-28 9:40 ` Haifeng Xu
0 siblings, 1 reply; 2+ messages in thread
From: kernel test robot @ 2025-02-27 18:24 UTC (permalink / raw)
To: Haifeng Xu; +Cc: llvm, oe-kbuild-all
Hi Haifeng,
[This is a private test report for your RFC patch.]
kernel test robot noticed the following build errors:
[auto build test ERROR on tip/sched/core]
[also build test ERROR on brauner-vfs/vfs.all linus/master v6.14-rc4 next-20250227]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Haifeng-Xu/io_uring-fix-the-dead-lock-between-io_uring-and-core-dump/20250226-194045
base: tip/sched/core
patch link: https://lore.kernel.org/r/20250226113936.385747-1-haifeng.xu%40shopee.com
patch subject: [RFC] io_uring: fix the dead lock between io_uring and core dump
config: i386-buildonly-randconfig-003-20250227 (https://download.01.org/0day-ci/archive/20250228/202502280245.WT5bW0xf-lkp@intel.com/config)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250228/202502280245.WT5bW0xf-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202502280245.WT5bW0xf-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from kernel/sched/core.c:10:
In file included from include/linux/highmem.h:8:
In file included from include/linux/cacheflush.h:5:
In file included from arch/x86/include/asm/cacheflush.h:5:
In file included from include/linux/mm.h:2224:
include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
504 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
505 | item];
| ~~~~
include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
511 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~ ^
512 | NR_VM_NUMA_EVENT_ITEMS +
| ~~~~~~~~~~~~~~~~~~~~~~
>> kernel/sched/core.c:6791:40: error: no member named 'io_uring' in 'struct task_struct'
6791 | struct io_uring_task *io_uring = tsk->io_uring;
| ~~~ ^
2 warnings and 1 error generated.
vim +6791 kernel/sched/core.c
6786
6787 static inline void sched_submit_work(struct task_struct *tsk)
6788 {
6789 static DEFINE_WAIT_OVERRIDE_MAP(sched_map, LD_WAIT_CONFIG);
6790 unsigned int task_flags;
> 6791 struct io_uring_task *io_uring = tsk->io_uring;
6792
6793 /*
6794 * Establish LD_WAIT_CONFIG context to ensure none of the code called
6795 * will use a blocking primitive -- which would lead to recursion.
6796 */
6797 lock_map_acquire_try(&sched_map);
6798
6799 task_flags = tsk->flags;
6800 /*
6801 * If a worker goes to sleep, notify and ask workqueue whether it
6802 * wants to wake up a task to maintain concurrency.
6803 */
6804 if (task_flags & PF_WQ_WORKER)
6805 wq_worker_sleeping(tsk);
6806 else if (task_flags & PF_IO_WORKER)
6807 io_wq_worker_sleeping(tsk);
6808 else if ((task_flags & PF_DUMPCORE) && io_uring) {
6809 struct io_wq *wq = io_uring->io_wq;
6810
6811 io_wq_cancel_tw_create(wq);
6812 }
6813
6814 /*
6815 * spinlock and rwlock must not flush block requests. This will
6816 * deadlock if the callback attempts to acquire a lock which is
6817 * already acquired.
6818 */
6819 SCHED_WARN_ON(current->__state & TASK_RTLOCK_WAIT);
6820
6821 /*
6822 * If we are going to sleep and we have plugged IO queued,
6823 * make sure to submit it to avoid deadlocks.
6824 */
6825 blk_flush_plug(tsk->plug, true);
6826
6827 lock_map_release(&sched_map);
6828 }
6829
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [RFC] io_uring: fix the dead lock between io_uring and core dump
2025-02-27 18:24 ` [RFC] io_uring: fix the dead lock between io_uring and core dump kernel test robot
@ 2025-02-28 9:40 ` Haifeng Xu
0 siblings, 0 replies; 2+ messages in thread
From: Haifeng Xu @ 2025-02-28 9:40 UTC (permalink / raw)
To: kernel test robot; +Cc: llvm, oe-kbuild-all
On 2025/2/28 02:24, kernel test robot wrote:
> Hi Haifeng,
>
> [This is a private test report for your RFC patch.]
> kernel test robot noticed the following build errors:
>
> [auto build test ERROR on tip/sched/core]
> [also build test ERROR on brauner-vfs/vfs.all linus/master v6.14-rc4 next-20250227]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Haifeng-Xu/io_uring-fix-the-dead-lock-between-io_uring-and-core-dump/20250226-194045
> base: tip/sched/core
> patch link: https://lore.kernel.org/r/20250226113936.385747-1-haifeng.xu%40shopee.com
> patch subject: [RFC] io_uring: fix the dead lock between io_uring and core dump
> config: i386-buildonly-randconfig-003-20250227 (https://download.01.org/0day-ci/archive/20250228/202502280245.WT5bW0xf-lkp@intel.com/config)
> compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250228/202502280245.WT5bW0xf-lkp@intel.com/reproduce)
>
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202502280245.WT5bW0xf-lkp@intel.com/
>
> All errors (new ones prefixed by >>):
>
> In file included from kernel/sched/core.c:10:
> In file included from include/linux/highmem.h:8:
> In file included from include/linux/cacheflush.h:5:
> In file included from arch/x86/include/asm/cacheflush.h:5:
> In file included from include/linux/mm.h:2224:
> include/linux/vmstat.h:504:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
> 504 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
> | ~~~~~~~~~~~~~~~~~~~~~ ^
> 505 | item];
> | ~~~~
> include/linux/vmstat.h:511:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
> 511 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
> | ~~~~~~~~~~~~~~~~~~~~~ ^
> 512 | NR_VM_NUMA_EVENT_ITEMS +
> | ~~~~~~~~~~~~~~~~~~~~~~
>>> kernel/sched/core.c:6791:40: error: no member named 'io_uring' in 'struct task_struct'
> 6791 | struct io_uring_task *io_uring = tsk->io_uring;
> | ~~~ ^
> 2 warnings and 1 error generated.
>
>
The CONFIG_IO_URING isn't enables, so 'io_uring' can't be found in 'struct task_struct'.
I'll post a new version later.
> vim +6791 kernel/sched/core.c
>
> 6786
> 6787 static inline void sched_submit_work(struct task_struct *tsk)
> 6788 {
> 6789 static DEFINE_WAIT_OVERRIDE_MAP(sched_map, LD_WAIT_CONFIG);
> 6790 unsigned int task_flags;
>> 6791 struct io_uring_task *io_uring = tsk->io_uring;
> 6792
> 6793 /*
> 6794 * Establish LD_WAIT_CONFIG context to ensure none of the code called
> 6795 * will use a blocking primitive -- which would lead to recursion.
> 6796 */
> 6797 lock_map_acquire_try(&sched_map);
> 6798
> 6799 task_flags = tsk->flags;
> 6800 /*
> 6801 * If a worker goes to sleep, notify and ask workqueue whether it
> 6802 * wants to wake up a task to maintain concurrency.
> 6803 */
> 6804 if (task_flags & PF_WQ_WORKER)
> 6805 wq_worker_sleeping(tsk);
> 6806 else if (task_flags & PF_IO_WORKER)
> 6807 io_wq_worker_sleeping(tsk);
> 6808 else if ((task_flags & PF_DUMPCORE) && io_uring) {
> 6809 struct io_wq *wq = io_uring->io_wq;
> 6810
> 6811 io_wq_cancel_tw_create(wq);
> 6812 }
> 6813
> 6814 /*
> 6815 * spinlock and rwlock must not flush block requests. This will
> 6816 * deadlock if the callback attempts to acquire a lock which is
> 6817 * already acquired.
> 6818 */
> 6819 SCHED_WARN_ON(current->__state & TASK_RTLOCK_WAIT);
> 6820
> 6821 /*
> 6822 * If we are going to sleep and we have plugged IO queued,
> 6823 * make sure to submit it to avoid deadlocks.
> 6824 */
> 6825 blk_flush_plug(tsk->plug, true);
> 6826
> 6827 lock_map_release(&sched_map);
> 6828 }
> 6829
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-02-28 9:40 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250226113936.385747-1-haifeng.xu@shopee.com>
2025-02-27 18:24 ` [RFC] io_uring: fix the dead lock between io_uring and core dump kernel test robot
2025-02-28 9:40 ` Haifeng Xu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox