From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755428AbdL2Ip5 (ORCPT ); Fri, 29 Dec 2017 03:45:57 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:58737 "EHLO huawei.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1755328AbdL2Ip4 (ORCPT ); Fri, 29 Dec 2017 03:45:56 -0500 Subject: Re: [f2fs-dev] [PATCH] f2fs: recover directory operations by fsync To: Jaegeuk Kim , , References: <20171228162217.42041-1-jaegeuk@kernel.org> From: Chao Yu Message-ID: <3a36802c-3de2-5361-5f66-df868d3ed9a1@huawei.com> Date: Fri, 29 Dec 2017 16:45:50 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <20171228162217.42041-1-jaegeuk@kernel.org> Content-Type: text/plain; charset="windows-1252" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.134.22.195] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017/12/29 0:22, Jaegeuk Kim wrote: > This fixes generic/342 which doesn't recover renamed file which was fsynced > before. It will be done via another fsync on newly created file. > > Signed-off-by: Jaegeuk Kim > --- > fs/f2fs/dir.c | 2 ++ > fs/f2fs/f2fs.h | 2 ++ > fs/f2fs/file.c | 3 +++ > fs/f2fs/namei.c | 4 ++++ > 4 files changed, 11 insertions(+) > > diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c > index 724304dc6143..f00b5ed8c011 100644 > --- a/fs/f2fs/dir.c > +++ b/fs/f2fs/dir.c > @@ -713,6 +713,8 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page, > > f2fs_update_time(F2FS_I_SB(dir), REQ_TIME); > > + add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO); > + > if (f2fs_has_inline_dentry(dir)) > return f2fs_delete_inline_entry(dentry, page, dir, inode); > > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > index 398ed95d4036..b32eacf11270 100644 > --- a/fs/f2fs/f2fs.h > +++ b/fs/f2fs/f2fs.h > @@ -181,6 +181,7 @@ enum { > ORPHAN_INO, /* for orphan ino list */ > APPEND_INO, /* for append ino list */ > UPDATE_INO, /* for update ino list */ > + TRANS_DIR_INO, /* for trasactions dir ino list */ > FLUSH_INO, /* for multiple device flushing */ > MAX_INO_ENTRY, /* max. list */ > }; > @@ -930,6 +931,7 @@ enum cp_reason_type { > CP_NODE_NEED_CP, > CP_FASTBOOT_MODE, > CP_SPEC_LOG_NUM, > + CP_RECOVER_DIR, Need to add description of CP_RECOVER_DIR in show_fsync_cpreason? Otherwise, looks good to me. Reviewed-by: Chao Yu Thanks, > }; > > enum iostat_type { > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > index 5a3b9a07d72d..66a51e9fbe83 100644 > --- a/fs/f2fs/file.c > +++ b/fs/f2fs/file.c > @@ -165,6 +165,9 @@ static inline enum cp_reason_type need_do_checkpoint(struct inode *inode) > cp_reason = CP_FASTBOOT_MODE; > else if (sbi->active_logs == 2) > cp_reason = CP_SPEC_LOG_NUM; > + else if (need_dentry_mark(sbi, inode->i_ino) && > + exist_written_data(sbi, F2FS_I(inode)->i_pino, TRANS_DIR_INO)) > + cp_reason = CP_RECOVER_DIR; > > return cp_reason; > } > diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c > index e3a0f4f65851..a885c6e659f8 100644 > --- a/fs/f2fs/namei.c > +++ b/fs/f2fs/namei.c > @@ -935,6 +935,7 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry, > } > f2fs_i_links_write(old_dir, false); > } > + add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO); > > f2fs_unlock_op(sbi); > > @@ -1089,6 +1090,9 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry, > } > f2fs_mark_inode_dirty_sync(new_dir, false); > > + add_ino_entry(sbi, old_dir->i_ino, TRANS_DIR_INO); > + add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO);> + > f2fs_unlock_op(sbi); > > if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir)) >