Messages in this thread | | | From | Daeho Jeong <> | Date | Mon, 25 Oct 2021 09:22:13 -0700 | Subject | Re: [f2fs-dev] [PATCH] f2fs: remove circular locking between sb_internal and fs_reclaim |
| |
On Fri, Oct 22, 2021 at 8:32 AM Chao Yu <chao@kernel.org> wrote: > > On 2021/10/22 0:44, Daeho Jeong wrote: > > There is a deadlock between sb_internal lock (sb_start_intwrite()) and > > dquot related lock. > > It's because we call f2fs_truncate(), which eventually calls > > dquot_initialize(), while holding sb_internal lock. > > So, I called dquot_initialize() in advance to make the 2nd calling of > > it in f2fs_truncate() ineffective. > > This is similar with the thing in f2fs_evict_inode() in inode.c > > Well, if dquot_initialize() fails in f2fs_drop_inode(), will we still run > into deadlock? >
Do you think the same issue is in f2fs_evict_inode() in inode.c? In fact, I picked up the idea from here.
err = dquot_initialize(inode); if (err) { err = 0; set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR); }
f2fs_remove_ino_entry(sbi, inode->i_ino, APPEND_INO); f2fs_remove_ino_entry(sbi, inode->i_ino, UPDATE_INO); f2fs_remove_ino_entry(sbi, inode->i_ino, FLUSH_INO);
sb_start_intwrite(inode->i_sb); set_inode_flag(inode, FI_NO_ALLOC); i_size_write(inode, 0); retry: if (F2FS_HAS_BLOCKS(inode)) err = f2fs_truncate(inode);
| |