Browse Source

f2fs: support norecovery mount option

This patch adds a mount option, norecovery, which is mostly same as
disable_roll_forward. The only difference is that norecovery should be activated
with read-only mount option.

This can be used when user wants to check whether f2fs is mountable or not
without any recovery process. (e.g., xfstests/200)

Reviewed-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Jaegeuk Kim 11 years ago
parent
commit
2d834bf9ac
2 changed files with 10 additions and 0 deletions
  1. 2 0
      Documentation/filesystems/f2fs.txt
  2. 8 0
      fs/f2fs/super.c

+ 2 - 0
Documentation/filesystems/f2fs.txt

@@ -106,6 +106,8 @@ background_gc=%s       Turn on/off cleaning operations, namely garbage
                        Default value for this option is on. So garbage
                        Default value for this option is on. So garbage
                        collection is on by default.
                        collection is on by default.
 disable_roll_forward   Disable the roll-forward recovery routine
 disable_roll_forward   Disable the roll-forward recovery routine
+norecovery             Disable the roll-forward recovery routine, mounted read-
+                       only (i.e., -o ro,disable_roll_forward)
 discard                Issue discard/TRIM commands when a segment is cleaned.
 discard                Issue discard/TRIM commands when a segment is cleaned.
 no_heap                Disable heap-style segment allocation which finds free
 no_heap                Disable heap-style segment allocation which finds free
                        segments for data from the beginning of main area, while
                        segments for data from the beginning of main area, while

+ 8 - 0
fs/f2fs/super.c

@@ -42,6 +42,7 @@ static struct kset *f2fs_kset;
 enum {
 enum {
 	Opt_gc_background,
 	Opt_gc_background,
 	Opt_disable_roll_forward,
 	Opt_disable_roll_forward,
+	Opt_norecovery,
 	Opt_discard,
 	Opt_discard,
 	Opt_noheap,
 	Opt_noheap,
 	Opt_user_xattr,
 	Opt_user_xattr,
@@ -62,6 +63,7 @@ enum {
 static match_table_t f2fs_tokens = {
 static match_table_t f2fs_tokens = {
 	{Opt_gc_background, "background_gc=%s"},
 	{Opt_gc_background, "background_gc=%s"},
 	{Opt_disable_roll_forward, "disable_roll_forward"},
 	{Opt_disable_roll_forward, "disable_roll_forward"},
+	{Opt_norecovery, "norecovery"},
 	{Opt_discard, "discard"},
 	{Opt_discard, "discard"},
 	{Opt_noheap, "no_heap"},
 	{Opt_noheap, "no_heap"},
 	{Opt_user_xattr, "user_xattr"},
 	{Opt_user_xattr, "user_xattr"},
@@ -287,6 +289,12 @@ static int parse_options(struct super_block *sb, char *options)
 		case Opt_disable_roll_forward:
 		case Opt_disable_roll_forward:
 			set_opt(sbi, DISABLE_ROLL_FORWARD);
 			set_opt(sbi, DISABLE_ROLL_FORWARD);
 			break;
 			break;
+		case Opt_norecovery:
+			/* this option mounts f2fs with ro */
+			set_opt(sbi, DISABLE_ROLL_FORWARD);
+			if (!f2fs_readonly(sb))
+				return -EINVAL;
+			break;
 		case Opt_discard:
 		case Opt_discard:
 			set_opt(sbi, DISCARD);
 			set_opt(sbi, DISCARD);
 			break;
 			break;