diff mbox

f2fs: do not write any node pages related to orphan inodes

Message ID 1439330562-17646-1-git-send-email-jaegeuk@kernel.org (mailing list archive)
State New, archived
Headers show

Commit Message

Jaegeuk Kim Aug. 11, 2015, 10:02 p.m. UTC
We should not write node pages when deleting orphan inodes.
In order to do that, we can eaisly set POR_DOING flag earlier before entering
orphan inode routine.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
 fs/f2fs/recovery.c | 3 ---
 fs/f2fs/super.c    | 6 +++++-
 2 files changed, 5 insertions(+), 4 deletions(-)

Comments

?? Aug. 12, 2015, 9:45 a.m. UTC | #1
Hi Jaegeuk,

> -----Original Message-----
> From: Jaegeuk Kim [mailto:jaegeuk@kernel.org]
> Sent: Wednesday, August 12, 2015 6:03 AM
> To: linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org;
> linux-f2fs-devel@lists.sourceforge.net
> Cc: Jaegeuk Kim
> Subject: [f2fs-dev] [PATCH] f2fs: do not write any node pages related to orphan inodes
> 
> We should not write node pages when deleting orphan inodes.
> In order to do that, we can eaisly set POR_DOING flag earlier before entering
> orphan inode routine.

If no error occurs in recover_orphan_inodes, it will clear SBI_POR_DOING before
return, so our protect region is broken since we remove SBI_POR_DOING setting in
the beginning of recover_fsync_data.

How about removing all SBI_POR_DOING related ops in recover_orphan_inodes?

> 
> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> ---
>  fs/f2fs/recovery.c | 3 ---
>  fs/f2fs/super.c    | 6 +++++-
>  2 files changed, 5 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
> index d2ef0c9..cdcca7c 100644
> --- a/fs/f2fs/recovery.c
> +++ b/fs/f2fs/recovery.c
> @@ -545,9 +545,6 @@ int recover_fsync_data(struct f2fs_sb_info *sbi)
> 
>  	INIT_LIST_HEAD(&inode_list);
> 
> -	/* step #1: find fsynced inode numbers */

Nitpick, this makes the left comment "/* step #2: recover data */" looks
strange, how about modifying the left one too?

Thanks,

--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index d2ef0c9..cdcca7c 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -545,9 +545,6 @@  int recover_fsync_data(struct f2fs_sb_info *sbi)
 
 	INIT_LIST_HEAD(&inode_list);
 
-	/* step #1: find fsynced inode numbers */
-	set_sbi_flag(sbi, SBI_POR_DOING);
-
 	/* prevent checkpoint */
 	mutex_lock(&sbi->cp_mutex);
 
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 4db5cd9..cfe3f95 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -1165,7 +1165,9 @@  try_onemore:
 	mutex_init(&sbi->writepages);
 	mutex_init(&sbi->cp_mutex);
 	init_rwsem(&sbi->node_write);
-	clear_sbi_flag(sbi, SBI_POR_DOING);
+
+	/* disallow all the data/node/meta page writes */
+	set_sbi_flag(sbi, SBI_POR_DOING);
 	spin_lock_init(&sbi->stat_lock);
 
 	init_rwsem(&sbi->read_io.io_rwsem);
@@ -1309,6 +1311,8 @@  try_onemore:
 			goto free_kobj;
 		}
 	}
+	/* recover_fsync_data() cleared this already */
+	clear_sbi_flag(sbi, SBI_POR_DOING);
 
 	/*
 	 * If filesystem is not mounted as read-only then