ocfs2: retry operations when a lock is marked in recovery
Before checking for a nonexistent lock, make sure the lockres is not marked RECOVERING. The caller will just retry and the state should be fixed up when recovery completes. Signed-off-by: Kurt Hackel <kurt.hackel@oracle.com> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
This commit is contained in:
parent
f85cd47a58
commit
b220532a71
1 changed files with 20 additions and 0 deletions
|
@ -464,6 +464,12 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_lock(&res->spinlock);
|
spin_lock(&res->spinlock);
|
||||||
|
status = __dlm_lockres_state_to_status(res);
|
||||||
|
if (status != DLM_NORMAL) {
|
||||||
|
spin_unlock(&res->spinlock);
|
||||||
|
dlm_error(status);
|
||||||
|
goto leave;
|
||||||
|
}
|
||||||
list_for_each(iter, &res->granted) {
|
list_for_each(iter, &res->granted) {
|
||||||
lock = list_entry(iter, struct dlm_lock, list);
|
lock = list_entry(iter, struct dlm_lock, list);
|
||||||
if (lock->ml.cookie == cnv->cookie &&
|
if (lock->ml.cookie == cnv->cookie &&
|
||||||
|
@ -473,6 +479,20 @@ int dlm_convert_lock_handler(struct o2net_msg *msg, u32 len, void *data)
|
||||||
}
|
}
|
||||||
lock = NULL;
|
lock = NULL;
|
||||||
}
|
}
|
||||||
|
if (!lock) {
|
||||||
|
__dlm_print_one_lock_resource(res);
|
||||||
|
list_for_each(iter, &res->granted) {
|
||||||
|
lock = list_entry(iter, struct dlm_lock, list);
|
||||||
|
if (lock->ml.node == cnv->node_idx) {
|
||||||
|
mlog(0, "There is something here "
|
||||||
|
"for node %u, lock->ml.cookie=%llu, "
|
||||||
|
"cnv->cookie=%llu\n", cnv->node_idx,
|
||||||
|
lock->ml.cookie, cnv->cookie);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lock = NULL;
|
||||||
|
}
|
||||||
spin_unlock(&res->spinlock);
|
spin_unlock(&res->spinlock);
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
status = DLM_IVLOCKID;
|
status = DLM_IVLOCKID;
|
||||||
|
|
Loading…
Add table
Reference in a new issue