diff options
| author | Jaegeuk Kim <jaegeuk@kernel.org> | 2018-04-24 22:43:01 -0600 |
|---|---|---|
| committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2018-07-08 17:28:58 -0700 |
| commit | cb38cc4e1d02dcad7bbaad1bd7d5e1dc2ac2b78b (patch) | |
| tree | 949ce8c5d722127b549cd3f45a35f8f69427b7be | |
| parent | 26bf4e8a96aada18cf1b23a920f1f3ee50b5b739 (diff) | |
f2fs: enforce fsync_mode=strict for renamed directory
This is to give a option for user to be able to recover B/foo in the below
case.
mkdir A
sync()
rename(A, B)
creat (B/foo)
fsync (B/foo)
---crash---
Sugessted-by: Velayudhan Pillai <vijay@cs.utexas.edu>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
| -rw-r--r-- | fs/f2fs/namei.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c index dd77ecbd536d..e6ddc9be1e60 100644 --- a/fs/f2fs/namei.c +++ b/fs/f2fs/namei.c @@ -970,8 +970,11 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry, f2fs_put_page(old_dir_page, 0); f2fs_i_links_write(old_dir, false); } - if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT) + if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT) { add_ino_entry(sbi, new_dir->i_ino, TRANS_DIR_INO); + if (S_ISDIR(old_inode->i_mode)) + add_ino_entry(sbi, old_inode->i_ino, TRANS_DIR_INO); + } f2fs_unlock_op(sbi); |
