GFS2: fail mount if journal recovery fails
authorDavid Teigland <teigland@redhat.com>
Mon, 9 Jan 2012 20:29:20 +0000 (15:29 -0500)
committerSteven Whitehouse <swhiteho@redhat.com>
Wed, 11 Jan 2012 09:24:48 +0000 (09:24 +0000)
If the first mounter fails to recover one of the journals
during mount, the mount should fail.

Signed-off-by: David Teigland <teigland@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/incore.h
fs/gfs2/recovery.c

index e5701c70f6fbf64f8ec11f9cc1b7a3483329b2be..97742a7ea9ccf02e58c7ae8f64228790fdf0c8d7 100644 (file)
@@ -429,6 +429,7 @@ struct gfs2_jdesc {
 #define JDF_RECOVERY 1
        unsigned int jd_jid;
        unsigned int jd_blocks;
+       int jd_recover_error;
 };
 
 struct gfs2_statfs_change_host {
index 80701d1566a140e9ed643912e5244aa1c58f680c..963b2d75200c7fc5ae62591f458133540178db30 100644 (file)
@@ -583,6 +583,7 @@ fail_gunlock_j:
 
        fs_info(sdp, "jid=%u: %s\n", jd->jd_jid, (error) ? "Failed" : "Done");
 fail:
+       jd->jd_recover_error = error;
        gfs2_recovery_done(sdp, jd->jd_jid, LM_RD_GAVEUP);
 done:
        clear_bit(JDF_RECOVERY, &jd->jd_flags);
@@ -611,6 +612,6 @@ int gfs2_recover_journal(struct gfs2_jdesc *jd, bool wait)
                wait_on_bit(&jd->jd_flags, JDF_RECOVERY, gfs2_recovery_wait,
                            TASK_UNINTERRUPTIBLE);
 
-       return 0;
+       return wait ? jd->jd_recover_error : 0;
 }