On Mon, Jun 19, 2023 at 09:37:14PM +0800, Li Dong wrote: > Function xx causes a deadlock,because s_vfs_rename_mutex was not released when return > > Signed-off-by: Li Dong <lidong@xxxxxxxx> > --- This is a cross-directory rename which requires s_vfs_rename_mutex to be held. You're suggesting to drop it, violating basic locking assumptions with dire consequences: lock_rename_child() { c1->d_parent != p2 -> acquire s_vfs_rename_mutex } pairs with old_parent = c1->d_parent; unlock_rename(old_parent, p2) { if (old_parent != p2) -> release s_vfs_rename_mutex } See the usage in ksmbd: trap = lock_rename_child(old_child, new_path.dentry); old_parent = dget(old_child->d_parent); unlock_rename(old_parent, new_path.dentry);