> On Aug 8, 2015, at 11:12 AM, Nicholas Krause <xerofo...@gmail.com> wrote: > > This fixes concurrent access issues in the function recover_dentry > by locking and locking another the block labeled retry with the > functions f2fs_lock_op/f2fs_unlock_op on a pointer of the > superblock used by the passed inode structure pointer by this
Recovery and checkpoint will block each other with cp_mutex firstly, so f2fs_lock_all in its only caller checkpoint have no chance to race with any f2fs_lock_op in recovery procedure. It’s not needed to call f2fs_lock_op here. Thanks, > > Signed-off-by: Nicholas Krause <xerofo...@gmail.com> > --- > fs/f2fs/recovery.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c > index 24a8c1d..b86ea29 100644 > --- a/fs/f2fs/recovery.c > +++ b/fs/f2fs/recovery.c > @@ -70,6 +70,7 @@ static struct fsync_inode_entry *get_fsync_inode(struct > list_head *head, > static int recover_dentry(struct inode *inode, struct page *ipage) > { > struct f2fs_inode *raw_inode = F2FS_INODE(ipage); > + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); > nid_t pino = le32_to_cpu(raw_inode->i_pino); > struct f2fs_dir_entry *de; > struct qstr name; > @@ -97,6 +98,7 @@ static int recover_dentry(struct inode *inode, struct page > *ipage) > goto out_err; > } > retry: > + f2fs_lock_op(sbi); > de = f2fs_find_entry(dir, &name, &page); > if (de && inode->i_ino == le32_to_cpu(de->ino)) > goto out_unmap_put; > @@ -117,6 +119,7 @@ retry: > } > f2fs_delete_entry(de, page, dir, einode); > iput(einode); > + f2fs_unlock_op(sbi); > goto retry; > } > err = __f2fs_add_link(dir, &name, inode, inode->i_ino, inode->i_mode); > @@ -129,7 +132,8 @@ retry: > add_dirty_dir_inode(dir); > set_inode_flag(F2FS_I(dir), FI_DELAY_IPUT); > } > - > + > + f2fs_unlock_op(sbi); > goto out; > > out_unmap_put: > -- > 2.1.4 > > > ------------------------------------------------------------------------------ > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel ------------------------------------------------------------------------------ _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel