diff options
-rw-r--r-- | fs/nilfs2/segment.c | 11 | ||||
-rw-r--r-- | fs/nilfs2/super.c | 3 |
2 files changed, 9 insertions, 5 deletions
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index 9280b0f10792..ab439a7ef2d8 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c | |||
@@ -2875,8 +2875,15 @@ int nilfs_attach_segment_constructor(struct nilfs_sb_info *sbi) | |||
2875 | struct the_nilfs *nilfs = sbi->s_nilfs; | 2875 | struct the_nilfs *nilfs = sbi->s_nilfs; |
2876 | int err; | 2876 | int err; |
2877 | 2877 | ||
2878 | /* Each field of nilfs_segctor is cleared through the initialization | 2878 | if (NILFS_SC(sbi)) { |
2879 | of super-block info */ | 2879 | /* |
2880 | * This happens if the filesystem was remounted | ||
2881 | * read/write after nilfs_error degenerated it into a | ||
2882 | * read-only mount. | ||
2883 | */ | ||
2884 | nilfs_detach_segment_constructor(sbi); | ||
2885 | } | ||
2886 | |||
2880 | sbi->s_sc_info = nilfs_segctor_new(sbi); | 2887 | sbi->s_sc_info = nilfs_segctor_new(sbi); |
2881 | if (!sbi->s_sc_info) | 2888 | if (!sbi->s_sc_info) |
2882 | return -ENOMEM; | 2889 | return -ENOMEM; |
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c index 3f88401a375b..f068270f6c75 100644 --- a/fs/nilfs2/super.c +++ b/fs/nilfs2/super.c | |||
@@ -96,9 +96,6 @@ void nilfs_error(struct super_block *sb, const char *function, | |||
96 | if (!(sb->s_flags & MS_RDONLY)) { | 96 | if (!(sb->s_flags & MS_RDONLY)) { |
97 | struct the_nilfs *nilfs = sbi->s_nilfs; | 97 | struct the_nilfs *nilfs = sbi->s_nilfs; |
98 | 98 | ||
99 | if (!nilfs_test_opt(sbi, ERRORS_CONT)) | ||
100 | nilfs_detach_segment_constructor(sbi); | ||
101 | |||
102 | down_write(&nilfs->ns_sem); | 99 | down_write(&nilfs->ns_sem); |
103 | if (!(nilfs->ns_mount_state & NILFS_ERROR_FS)) { | 100 | if (!(nilfs->ns_mount_state & NILFS_ERROR_FS)) { |
104 | nilfs->ns_mount_state |= NILFS_ERROR_FS; | 101 | nilfs->ns_mount_state |= NILFS_ERROR_FS; |