[Ocfs2-devel] [PATCH] ocfs2: unlock osb_super_lockres when refresh slot info failed
Xue jiufei
xuejiufei at huawei.com
Fri Dec 21 22:52:25 PST 2012
Function ocfs2_super_lock() actually do two jobs: applying for EX
lock of osb_super_lockres and refreshing slot info. If it happened
that a node cannot refresh slot info after acquired the lock, it will
never drop it. And other nodes who applying for osb_super_lockres will
wait for it for ever.
This patch drop super lock when ocfs2_refresh_slot_info() return
error.
Signed-off-by: xuejiufei <xuejiufei at huawei.com>
---
fs/ocfs2/dlmglue.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 4f7795f..205f9eb 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
@@ -2546,7 +2546,7 @@ int ocfs2_super_lock(struct ocfs2_super *osb,
status = ocfs2_should_refresh_lock_res(lockres);
if (status < 0) {
mlog_errno(status);
- goto bail;
+ goto unlock;
}
if (status) {
status = ocfs2_refresh_slot_info(osb);
@@ -2557,6 +2557,10 @@ int ocfs2_super_lock(struct ocfs2_super *osb,
mlog_errno(status);
ocfs2_track_lock_refresh(lockres);
}
+unlock:
+ if (status < 0)
+ ocfs2_super_unlock(osb, ex);
+
bail:
return status;
}
--
1.7.8.6
More information about the Ocfs2-devel
mailing list