Skip to content

Commit 5b3ae39

Browse files
JunPiaoHWZhengShunQian
authored andcommitted
ocfs2: return -EROFS to mount.ocfs2 if inode block is invalid
[ Upstream commit 025bcbd ] If metadata is corrupted such as 'invalid inode block', we will get failed by calling 'mount()' and then set filesystem readonly as below: ocfs2_mount ocfs2_initialize_super ocfs2_init_global_system_inodes ocfs2_iget ocfs2_read_locked_inode ocfs2_validate_inode_block ocfs2_error ocfs2_handle_error ocfs2_set_ro_flag(osb, 0); // set readonly In this situation we need return -EROFS to 'mount.ocfs2', so that user can fix it by fsck. And then mount again. In addition, 'mount.ocfs2' should be updated correspondingly as it only return 1 for all errno. And I will post a patch for 'mount.ocfs2' too. Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Jun Piao <[email protected]> Reviewed-by: Alex Chen <[email protected]> Reviewed-by: Joseph Qi <[email protected]> Reviewed-by: Changwei Ge <[email protected]> Reviewed-by: Gang He <[email protected]> Cc: Mark Fasheh <[email protected]> Cc: Joel Becker <[email protected]> Cc: Junxiao Bi <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]> Signed-off-by: Sasha Levin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 9e6b65d commit 5b3ae39

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

fs/ocfs2/super.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -477,9 +477,8 @@ static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb)
477477
new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
478478
if (!new) {
479479
ocfs2_release_system_inodes(osb);
480-
status = -EINVAL;
480+
status = ocfs2_is_soft_readonly(osb) ? -EROFS : -EINVAL;
481481
mlog_errno(status);
482-
/* FIXME: Should ERROR_RO_FS */
483482
mlog(ML_ERROR, "Unable to load system inode %d, "
484483
"possibly corrupt fs?", i);
485484
goto bail;
@@ -508,7 +507,7 @@ static int ocfs2_init_local_system_inodes(struct ocfs2_super *osb)
508507
new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
509508
if (!new) {
510509
ocfs2_release_system_inodes(osb);
511-
status = -EINVAL;
510+
status = ocfs2_is_soft_readonly(osb) ? -EROFS : -EINVAL;
512511
mlog(ML_ERROR, "status=%d, sysfile=%d, slot=%d\n",
513512
status, i, osb->slot_num);
514513
goto bail;

0 commit comments

Comments
 (0)