linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [f2fs-dev] [PATCH] f2fs:Fix concurrent access issues in the function recover_dentry
       [not found] <1439003569-17358-1-git-send-email-xerofoify@gmail.com>
@ 2015-08-08  8:26 ` Chao Yu
  2015-08-08  8:30 ` Chao Yu
  1 sibling, 0 replies; 2+ messages in thread
From: Chao Yu @ 2015-08-08  8:26 UTC (permalink / raw)
  To: Nicholas Krause; +Cc: jaegeuk, linux-kernel, linux-f2fs-devel



^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [f2fs-dev] [PATCH] f2fs:Fix concurrent access issues in the function recover_dentry
       [not found] <1439003569-17358-1-git-send-email-xerofoify@gmail.com>
  2015-08-08  8:26 ` [f2fs-dev] [PATCH] f2fs:Fix concurrent access issues in the function recover_dentry Chao Yu
@ 2015-08-08  8:30 ` Chao Yu
  1 sibling, 0 replies; 2+ messages in thread
From: Chao Yu @ 2015-08-08  8:30 UTC (permalink / raw)
  To: Nicholas Krause; +Cc: jaegeuk, linux-kernel, linux-f2fs-devel

> On Aug 8, 2015, at 11:12 AM, Nicholas Krause <xerofoify@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 <xerofoify@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


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-08-08  8:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1439003569-17358-1-git-send-email-xerofoify@gmail.com>
2015-08-08  8:26 ` [f2fs-dev] [PATCH] f2fs:Fix concurrent access issues in the function recover_dentry Chao Yu
2015-08-08  8:30 ` Chao Yu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).