diff options
author | David Teigland <teigland@redhat.com> | 2012-05-01 15:50:48 -0500 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2012-05-02 14:19:12 -0500 |
commit | 1a058f5288a74a20d5567a85ab1a04a9de69a212 (patch) | |
tree | 8ed2428f8aaee127fc4a87417dd520a90f60e3a7 | |
parent | 4875647a08e35f77274838d97ca8fa44158d50e2 (diff) | |
download | linux-1a058f5288a74a20d5567a85ab1a04a9de69a212.tar.gz linux-1a058f5288a74a20d5567a85ab1a04a9de69a212.tar.bz2 linux-1a058f5288a74a20d5567a85ab1a04a9de69a212.zip |
gfs2: fix recovery during unmount
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>
-rw-r--r-- | fs/gfs2/sys.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c index d33172c291ba..9c2592b1d5ff 100644 --- a/fs/gfs2/sys.c +++ b/fs/gfs2/sys.c @@ -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; } |