Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b220532a authored by Kurt Hackel's avatar Kurt Hackel Committed by Mark Fasheh
Browse files

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: default avatarKurt Hackel <kurt.hackel@oracle.com>
Signed-off-by: default avatarMark Fasheh <mark.fasheh@oracle.com>
parent f85cd47a
Loading
Loading
Loading
Loading
+20 −0
Original line number Original line Diff line number Diff line
@@ -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;