All of lore.kernel.org
 help / color / mirror / Atom feed
From: Byungchul Park <byungchul@sk.com>
To: linux-kernel@vger.kernel.org,
	almaz.alexandrovich@paragon-software.com, ntfs3@lists.linux.dev
Cc: kernel_team@skhynix.com, torvalds@linux-foundation.org,
	akpm@linux-foundation.org, yeoreum.yun@arm.com,
	yunseong.kim@ericsson.com, gwan-gyeong.mun@intel.com,
	harry.yoo@oracle.com, ysk@kzalloc.com
Subject: [RFC] DEPT report on around ntfs3 and filemap
Date: Mon, 23 Jun 2025 11:31:49 +0900	[thread overview]
Message-ID: <20250623023149.GA70156@system.software.com> (raw)

Hi folks,

Thanks to Yunseong, we got a DEPT report in ntfs3.  It doesn't mean it's
an obvious deadlock, but after digging into the report, I'm wondering if
it could happen by any chance.  The scenario that I'm concerning is:

  CONTEXT A			  CONTEXT B

  ntfs_fill_super()
    inode_read_data() // for sbi->def_table and sbi->upcase
      ...			  ntfs_lookup()
				    mutex_lock(&ni->ni_lock) // hold
				    dir_search_u()
				      ...
				        btfs_bread()
        folio_lock() // hold
        filemap_read_folio() // with folio lock held
				          ...
				            __find_get_block_slow()
				              folio_lock() // stuck
          ntfs_read_folio()
	    mutex_lock(&ni->ni_lock) // stuck

Am I missing something?  One thing possibily I'm missing is that the two
ni_locks never contend, but I'm not sure if it's true for the all
possible cases e.g. manipulating block dev directly.

FYI, the following is the DEPT report we got.

	Byungchul
---
 [ 2279.669417][T42160] ===================================================
 [ 2279.669468][T42160] DEPT: Circular dependency has been detected.
 [ 2279.669483][T42160] 6.15.0-rc6-00043-ga83a69ec7f9f #5 Not tainted
 [ 2279.669499][T42160] ---------------------------------------------------
 [ 2279.669511][T42160] summary
 [ 2279.669522][T42160] ---------------------------------------------------
 [ 2279.669534][T42160] *** DEADLOCK ***
 [ 2279.669534][T42160]
 [ 2279.669545][T42160] context A
 [ 2279.669557][T42160]    [S] (unknown)(pg_locked_map:0)
 [ 2279.669572][T42160]    [W] lock(&ni->ni_lock:0)
 [ 2279.669587][T42160]    [E] dept_page_clear_bit(pg_locked_map:0)
 [ 2279.669601][T42160]
 [ 2279.669611][T42160] context B
 [ 2279.669622][T42160]    [S] lock(&ni->ni_lock:0)
 [ 2279.669635][T42160]    [W] dept_page_wait_on_bit(pg_locked_map:0)
 [ 2279.669650][T42160]    [E] unlock(&ni->ni_lock:0)
 [ 2279.669663][T42160]
 [ 2279.669673][T42160] [S]: start of the event context
 [ 2279.669683][T42160] [W]: the wait blocked
 [ 2279.669693][T42160] [E]: the event not reachable
 [ 2279.669704][T42160] ---------------------------------------------------
 [ 2279.669714][T42160] context A's detail
 [ 2279.669725][T42160] ---------------------------------------------------
 [ 2279.669735][T42160] context A
 [ 2279.669746][T42160]    [S] (unknown)(pg_locked_map:0)
 [ 2279.669759][T42160]    [W] lock(&ni->ni_lock:0)
 [ 2279.669772][T42160]    [E] dept_page_clear_bit(pg_locked_map:0)
 [ 2279.669786][T42160]
 [ 2279.669796][T42160] [S] (unknown)(pg_locked_map:0):
 [ 2279.669809][T42160] (N/A)
 [ 2279.669818][T42160]
 [ 2279.669828][T42160] [W] lock(&ni->ni_lock:0):
 [ 2279.669841][T42160] [<ffff800081935bd4>] ntfs_read_folio+0x174/0x200
 [ 2279.669875][T42160] stacktrace:
 [ 2279.669901][T42160]       __mutex_lock+0x730/0xa08
 [ 2279.669932][T42160]       mutex_lock_nested+0x24/0x38
 [ 2279.669952][T42160]       ntfs_read_folio+0x174/0x200
 [ 2279.669970][T42160]       filemap_read_folio+0xc8/0x280
 [ 2279.669990][T42160]       do_read_cache_folio+0x290/0x56c
 [ 2279.670010][T42160]       read_cache_page+0x64/0x150
 [ 2279.670027][T42160]       inode_read_data+0xa4/0x9c0
 [ 2279.670046][T42160]       ntfs_fill_super+0x1fec/0x3840
 [ 2279.670072][T42160]       get_tree_bdev_flags+0x330/0x528
 [ 2279.670099][T42160]       get_tree_bdev+0x2c/0x3c
 [ 2279.670119][T42160]       ntfs_fs_get_tree+0x28/0x38
 [ 2279.670139][T42160]       vfs_get_tree+0x7c/0x2c0
 [ 2279.670158][T42160]       path_mount+0x1380/0x1d20
 [ 2279.670184][T42160]       __arm64_sys_mount+0x438/0x530
 [ 2279.670204][T42160]       invoke_syscall+0x88/0x2e0
 [ 2279.670234][T42160]       el0_svc_common.constprop.0+0xe8/0x2e0
 [ 2279.670256][T42160]
 [ 2279.670265][T42160] [E] dept_page_clear_bit(pg_locked_map:0):
 [ 2279.670279][T42160] [<ffff800081935c14>] ntfs_read_folio+0x1b4/0x200
 [ 2279.670299][T42160] stacktrace:
 [ 2279.670309][T42160]       ntfs_read_folio+0x1b4/0x200
 [ 2279.670327][T42160]       filemap_read_folio+0xc8/0x280
 [ 2279.670343][T42160]       do_read_cache_folio+0x290/0x56c
 [ 2279.670361][T42160]       read_cache_page+0x64/0x150
 [ 2279.670378][T42160]       inode_read_data+0xa4/0x9c0
 [ 2279.670396][T42160]       ntfs_fill_super+0x1fec/0x3840
 [ 2279.670418][T42160]       get_tree_bdev_flags+0x330/0x528
 [ 2279.670438][T42160]       get_tree_bdev+0x2c/0x3c
 [ 2279.670458][T42160]       ntfs_fs_get_tree+0x28/0x38
 [ 2279.670478][T42160]       vfs_get_tree+0x7c/0x2c0
 [ 2279.670497][T42160]       path_mount+0x1380/0x1d20
 [ 2279.670516][T42160]       __arm64_sys_mount+0x438/0x530
 [ 2279.670535][T42160]       invoke_syscall+0x88/0x2e0
 [ 2279.670555][T42160]       el0_svc_common.constprop.0+0xe8/0x2e0
 [ 2279.670577][T42160]       do_el0_svc+0x44/0x60
 [ 2279.670597][T42160]       el0_svc+0x50/0x188
 [ 2279.670626][T42160] ---------------------------------------------------
 [ 2279.670637][T42160] context B's detail
 [ 2279.670648][T42160] ---------------------------------------------------
 [ 2279.670659][T42160] context B
 [ 2279.670669][T42160]    [S] lock(&ni->ni_lock:0)
 [ 2279.670683][T42160]    [W] dept_page_wait_on_bit(pg_locked_map:0)
 [ 2279.670697][T42160]    [E] unlock(&ni->ni_lock:0)
 [ 2279.670710][T42160]
 [ 2279.670719][T42160] [S] lock(&ni->ni_lock:0):
 [ 2279.670732][T42160] [<ffff800081951e78>] ntfs_lookup+0x188/0x238
 [ 2279.670755][T42160] stacktrace:
 [ 2279.670764][T42160]       __mutex_lock+0x74c/0xa08
 [ 2279.670783][T42160]       mutex_lock_nested+0x24/0x38
 [ 2279.670803][T42160]       ntfs_lookup+0x188/0x238
 [ 2279.670822][T42160]       lookup_open.isra.0+0x414/0x1310
 [ 2279.670846][T42160]       path_openat+0x1174/0x2740
 [ 2279.670867][T42160]       do_filp_open+0x198/0x3a0
 [ 2279.670895][T42160]       do_sys_openat2+0x11c/0x1e0
 [ 2279.670912][T42160]       __arm64_sys_openat+0x158/0x208
 [ 2279.670929][T42160]       invoke_syscall+0x88/0x2e0
 [ 2279.670949][T42160]       el0_svc_common.constprop.0+0xe8/0x2e0
 [ 2279.670970][T42160]       do_el0_svc+0x44/0x60
 [ 2279.670990][T42160]       el0_svc+0x50/0x188
 [ 2279.671011][T42160]       el0t_64_sync_handler+0x10c/0x140
 [ 2279.671034][T42160]       el0t_64_sync+0x198/0x19c
 [ 2279.671053][T42160]
 [ 2279.671062][T42160] [W] dept_page_wait_on_bit(pg_locked_map:0):
 [ 2279.671075][T42160] [<ffff800080dfcae4>] bdev_getblk+0x174/0x218
 [ 2279.671100][T42160] stacktrace:
 [ 2279.671110][T42160]       __find_get_block_slow+0x26c/0x684
 [ 2279.671128][T42160]       bdev_getblk+0x174/0x218
 [ 2279.671145][T42160]       __bread_gfp+0x8c/0x2b8
 [ 2279.671162][T42160]       ntfs_bread+0xb8/0x22c
 [ 2279.671192][T42160]       wnd_map+0x264/0x3a0
 [ 2279.671212][T42160]       wnd_is_used+0x338/0x520
 [ 2279.671232][T42160]       run_unpack_ex+0x454/0x62c
 [ 2279.671252][T42160]       ntfs_iget5+0x980/0x3048
 [ 2279.671270][T42160]       dir_search_u+0x140/0x348
 [ 2279.671290][T42160]       ntfs_lookup+0x198/0x238
 [ 2279.671309][T42160]       lookup_open.isra.0+0x414/0x1310
 [ 2279.671328][T42160]       path_openat+0x1174/0x2740
 [ 2279.671348][T42160]       do_filp_open+0x198/0x3a0
 [ 2279.671367][T42160]       do_sys_openat2+0x11c/0x1e0
 [ 2279.671383][T42160]       __arm64_sys_openat+0x158/0x208
 [ 2279.671400][T42160]       invoke_syscall+0x88/0x2e0
 [ 2279.671420][T42160]
 [ 2279.671430][T42160] [E] unlock(&ni->ni_lock:0):
 [ 2279.671442][T42160] (N/A)
 [ 2279.671452][T42160] ---------------------------------------------------
 [ 2279.671463][T42160] information that might be helpful
 [ 2279.671473][T42160] ---------------------------------------------------
 [ 2279.671488][T42160] CPU: 2 UID: 0 PID: 42160 Comm: syz.0.6499 Not tainted 6.15.0-rc6-00043-ga83a69ec7f9f #5 PREEMPT
 [ 2279.671502][T42160] Hardware name: QEMU KVM Virtual Machine, BIOS 2025.02-8 05/13/2025
 [ 2279.671510][T42160] Call trace:
 [ 2279.671515][T42160]  show_stack+0x34/0x80 (C)
 [ 2279.671542][T42160]  dump_stack_lvl+0x104/0x180
 [ 2279.671568][T42160]  dump_stack+0x20/0x2c
 [ 2279.671583][T42160]  cb_check_dl+0x1080/0x10ec
 [ 2279.671599][T42160]  bfs+0x4d8/0x630
 [ 2279.671610][T42160]  add_dep+0x1cc/0x364
 [ 2279.671623][T42160]  __dept_event.part.0+0xde0/0x1240
 [ 2279.671636][T42160]  dept_event+0x208/0x29c
 [ 2279.671649][T42160]  folio_unlock+0x8c/0x160
 [ 2279.671678][T42160]  ntfs_read_folio+0x1b4/0x200
 [ 2279.671691][T42160]  filemap_read_folio+0xc8/0x280
 [ 2279.671702][T42160]  do_read_cache_folio+0x290/0x56c
 [ 2279.671714][T42160]  read_cache_page+0x64/0x150
 [ 2279.671726][T42160]  inode_read_data+0xa4/0x9c0
 [ 2279.671740][T42160]  ntfs_fill_super+0x1fec/0x3840
 [ 2279.671756][T42160]  get_tree_bdev_flags+0x330/0x528
 [ 2279.671771][T42160]  get_tree_bdev+0x2c/0x3c
 [ 2279.671786][T42160]  ntfs_fs_get_tree+0x28/0x38
 [ 2279.671801][T42160]  vfs_get_tree+0x7c/0x2c0
 [ 2279.671815][T42160]  path_mount+0x1380/0x1d20
 [ 2279.671829][T42160]  __arm64_sys_mount+0x438/0x530
 [ 2279.671844][T42160]  invoke_syscall+0x88/0x2e0
 [ 2279.671859][T42160]  el0_svc_common.constprop.0+0xe8/0x2e0
 [ 2279.671875][T42160]  do_el0_svc+0x44/0x60
 [ 2279.671898][T42160]  el0_svc+0x50/0x188
 [ 2279.671915][T42160]  el0t_64_sync_handler+0x10c/0x140
 [ 2279.671932][T42160]  el0t_64_sync+0x198/0x19c

                 reply	other threads:[~2025-06-23  2:31 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250623023149.GA70156@system.software.com \
    --to=byungchul@sk.com \
    --cc=akpm@linux-foundation.org \
    --cc=almaz.alexandrovich@paragon-software.com \
    --cc=gwan-gyeong.mun@intel.com \
    --cc=harry.yoo@oracle.com \
    --cc=kernel_team@skhynix.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ntfs3@lists.linux.dev \
    --cc=torvalds@linux-foundation.org \
    --cc=yeoreum.yun@arm.com \
    --cc=ysk@kzalloc.com \
    --cc=yunseong.kim@ericsson.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.