diff options
author | Kurt Hackel <kurt.hackel@oracle.com> | 2006-01-18 20:02:56 -0500 |
---|---|---|
committer | Mark Fasheh <mark.fasheh@oracle.com> | 2006-02-16 15:00:48 -0500 |
commit | e2b5e4506f5c5187b91d7a79fbad28fe3ebd2fc5 (patch) | |
tree | 4a00cffdfa93009639da2f3edfc5c9797f33608e /fs/ocfs2 | |
parent | 898efface1a5076cbae5af87b935212b1869971b (diff) |
[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: Kurt Hackel <kurt.hackel@oracle.com>
Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2')
-rw-r--r-- | fs/ocfs2/dlm/dlmconvert.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/fs/ocfs2/dlm/dlmconvert.c b/fs/ocfs2/dlm/dlmconvert.c index 6001b22a997d..f5c2f1979ad3 100644 --- a/fs/ocfs2/dlm/dlmconvert.c +++ b/fs/ocfs2/dlm/dlmconvert.c | |||
@@ -421,7 +421,7 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data) | |||
421 | struct dlm_lockstatus *lksb; | 421 | struct dlm_lockstatus *lksb; |
422 | enum dlm_status status = DLM_NORMAL; | 422 | enum dlm_status status = DLM_NORMAL; |
423 | u32 flags; | 423 | u32 flags; |
424 | int call_ast = 0, kick_thread = 0; | 424 | int call_ast = 0, kick_thread = 0, ast_reserved = 0; |
425 | 425 | ||
426 | if (!dlm_grab(dlm)) { | 426 | if (!dlm_grab(dlm)) { |
427 | dlm_error(DLM_REJECTED); | 427 | dlm_error(DLM_REJECTED); |
@@ -490,6 +490,7 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data) | |||
490 | status = __dlm_lockres_state_to_status(res); | 490 | status = __dlm_lockres_state_to_status(res); |
491 | if (status == DLM_NORMAL) { | 491 | if (status == DLM_NORMAL) { |
492 | __dlm_lockres_reserve_ast(res); | 492 | __dlm_lockres_reserve_ast(res); |
493 | ast_reserved = 1; | ||
493 | res->state |= DLM_LOCK_RES_IN_PROGRESS; | 494 | res->state |= DLM_LOCK_RES_IN_PROGRESS; |
494 | status = __dlmconvert_master(dlm, res, lock, flags, | 495 | status = __dlmconvert_master(dlm, res, lock, flags, |
495 | cnv->requested_type, | 496 | cnv->requested_type, |
@@ -512,10 +513,10 @@ leave: | |||
512 | else | 513 | else |
513 | dlm_lock_put(lock); | 514 | dlm_lock_put(lock); |
514 | 515 | ||
515 | /* either queue the ast or release it */ | 516 | /* either queue the ast or release it, if reserved */ |
516 | if (call_ast) | 517 | if (call_ast) |
517 | dlm_queue_ast(dlm, lock); | 518 | dlm_queue_ast(dlm, lock); |
518 | else | 519 | else if (ast_reserved) |
519 | dlm_lockres_release_ast(dlm, res); | 520 | dlm_lockres_release_ast(dlm, res); |
520 | 521 | ||
521 | if (kick_thread) | 522 | if (kick_thread) |