Commit e2b5e450 authored by Kurt Hackel's avatar Kurt Hackel Committed by Mark Fasheh

[PATCH] ocfs2: fix release of ast never reserved

* fix a bug in dlm_convert_lock_handler where dlm_lockres_release_ast was
  being called even if no ast was ever reserved
Signed-off-by: default avatarKurt Hackel <kurt.hackel@oracle.com>
Signed-off-by: default avatarMark Fasheh <mark.fasheh@oracle.com>
parent 898effac
...@@ -421,7 +421,7 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data) ...@@ -421,7 +421,7 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data)
struct dlm_lockstatus *lksb; struct dlm_lockstatus *lksb;
enum dlm_status status = DLM_NORMAL; enum dlm_status status = DLM_NORMAL;
u32 flags; u32 flags;
int call_ast = 0, kick_thread = 0; int call_ast = 0, kick_thread = 0, ast_reserved = 0;
if (!dlm_grab(dlm)) { if (!dlm_grab(dlm)) {
dlm_error(DLM_REJECTED); dlm_error(DLM_REJECTED);
...@@ -490,6 +490,7 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data) ...@@ -490,6 +490,7 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data)
status = __dlm_lockres_state_to_status(res); status = __dlm_lockres_state_to_status(res);
if (status == DLM_NORMAL) { if (status == DLM_NORMAL) {
__dlm_lockres_reserve_ast(res); __dlm_lockres_reserve_ast(res);
ast_reserved = 1;
res->state |= DLM_LOCK_RES_IN_PROGRESS; res->state |= DLM_LOCK_RES_IN_PROGRESS;
status = __dlmconvert_master(dlm, res, lock, flags, status = __dlmconvert_master(dlm, res, lock, flags,
cnv->requested_type, cnv->requested_type,
...@@ -512,10 +513,10 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data) ...@@ -512,10 +513,10 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data)
else else
dlm_lock_put(lock); dlm_lock_put(lock);
/* either queue the ast or release it */ /* either queue the ast or release it, if reserved */
if (call_ast) if (call_ast)
dlm_queue_ast(dlm, lock); dlm_queue_ast(dlm, lock);
else else if (ast_reserved)
dlm_lockres_release_ast(dlm, res); dlm_lockres_release_ast(dlm, res);
if (kick_thread) if (kick_thread)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment