Skip to content

Commit 025bcbd

Browse files
JunPiaoHWtorvalds
authored andcommitted
ocfs2: return -EROFS to mount.ocfs2 if inode block is invalid
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]>
1 parent dd7b5f9 commit 025bcbd

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)