gfs2: fix recovery during unmount
authorDavid Teigland <teigland@redhat.com>
Tue, 1 May 2012 20:50:48 +0000 (15:50 -0500)
committerDavid Teigland <teigland@redhat.com>
Wed, 2 May 2012 19:19:12 +0000 (14:19 -0500)
Journal recovery from lock_dlm should not be ignored
if there is an unmount in progress.  Ignoring it will
causes the recovery to get stuck.  The recovery
process will correctly handle an in-progess unmount.

Signed-off-by: David Teigland <teigland@redhat.com>
fs/gfs2/sys.c

index d33172c291bad63064dba6eebdddc8daba16b3f6..9c2592b1d5ff74ab0e5c2f800b0d0e4508119021 100644 (file)
@@ -368,10 +368,7 @@ int gfs2_recover_set(struct gfs2_sbd *sdp, unsigned jid)
        struct gfs2_jdesc *jd;
        int rv;
 
-       rv = -ESHUTDOWN;
        spin_lock(&sdp->sd_jindex_spin);
-       if (test_bit(SDF_NORECOVERY, &sdp->sd_flags))
-               goto out;
        rv = -EBUSY;
        if (sdp->sd_jdesc->jd_jid == jid)
                goto out;
@@ -396,8 +393,13 @@ static ssize_t recover_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
        if (rv != 1)
                return -EINVAL;
 
-       rv = gfs2_recover_set(sdp, jid);
+       if (test_bit(SDF_NORECOVERY, &sdp->sd_flags)) {
+               rv = -ESHUTDOWN;
+               goto out;
+       }
 
+       rv = gfs2_recover_set(sdp, jid);
+out:
        return rv ? rv : len;
 }