Skip to content

Commit 66aaeed

Browse files
JunPiaoHWgregkh
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 710b512 commit 66aaeed

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
@@ -474,9 +474,8 @@ static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb)
474474
new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
475475
if (!new) {
476476
ocfs2_release_system_inodes(osb);
477-
status = -EINVAL;
477+
status = ocfs2_is_soft_readonly(osb) ? -EROFS : -EINVAL;
478478
mlog_errno(status);
479-
/* FIXME: Should ERROR_RO_FS */
480479
mlog(ML_ERROR, "Unable to load system inode %d, "
481480
"possibly corrupt fs?", i);
482481
goto bail;
@@ -505,7 +504,7 @@ static int ocfs2_init_local_system_inodes(struct ocfs2_super *osb)
505504
new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
506505
if (!new) {
507506
ocfs2_release_system_inodes(osb);
508-
status = -EINVAL;
507+
status = ocfs2_is_soft_readonly(osb) ? -EROFS : -EINVAL;
509508
mlog(ML_ERROR, "status=%d, sysfile=%d, slot=%d\n",
510509
status, i, osb->slot_num);
511510
goto bail;

0 commit comments

Comments
 (0)