aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2
diff options
context:
space:
mode:
authorJunxiao Bi <junxiao.bi@oracle.com>2013-02-21 16:42:45 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-02-28 06:32:25 -0800
commit099f19c0426e465c44b66cc93f923461af6e5f8d (patch)
treedd0bfa77a49727119c00ced90b1cb3d010101bb3 /fs/ocfs2
parent9a84bc2154b9787917cfc69cd619110bb9ab802f (diff)
downloadkernel_samsung_smdk4412-099f19c0426e465c44b66cc93f923461af6e5f8d.zip
kernel_samsung_smdk4412-099f19c0426e465c44b66cc93f923461af6e5f8d.tar.gz
kernel_samsung_smdk4412-099f19c0426e465c44b66cc93f923461af6e5f8d.tar.bz2
ocfs2: unlock super lock if lockres refresh failed
commit 3278bb748d2437eb1464765f36429e5d6aa91c38 upstream. If lockres refresh failed, the super lock will never be released which will cause some processes on other cluster nodes hung forever. Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Mark Fasheh <mfasheh@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/ocfs2')
-rw-r--r--fs/ocfs2/dlmglue.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 7642d7c..ab4046f 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
@@ -2539,6 +2539,7 @@ int ocfs2_super_lock(struct ocfs2_super *osb,
* everything is up to the caller :) */
status = ocfs2_should_refresh_lock_res(lockres);
if (status < 0) {
+ ocfs2_cluster_unlock(osb, lockres, level);
mlog_errno(status);
goto bail;
}
@@ -2547,8 +2548,10 @@ int ocfs2_super_lock(struct ocfs2_super *osb,
ocfs2_complete_lock_res_refresh(lockres, status);
- if (status < 0)
+ if (status < 0) {
+ ocfs2_cluster_unlock(osb, lockres, level);
mlog_errno(status);
+ }
ocfs2_track_lock_refresh(lockres);
}
bail: