[Ocfs2-devel] [PATCH] ocfs2/dlm: a missing DLM_LOCK_RES_IN_PROGRESS set
Wengang Wang
wen.gang.wang at oracle.com
Wed Nov 24 02:50:22 PST 2010
A reminder.
thanks,
wengang.
On 10-11-19 12:23, Wengang Wang wrote:
> For remote dlm operations, local node sets DLM_LOCK_RES_IN_PROGRESS flag on
> the lockres to prevent parallel remote dlm requests.
> There is a miss of setting that flag in dlmunlock_common() for the remote
> case which leads to a later remote dlm request goes on.
>
> Signed-off-by: Wengang Wang <wen.gang.wang at oracle.com>
> ---
> fs/ocfs2/dlm/dlmunlock.c | 11 ++++++++---
> 1 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/fs/ocfs2/dlm/dlmunlock.c b/fs/ocfs2/dlm/dlmunlock.c
> index 817287c..a45be2f 100644
> --- a/fs/ocfs2/dlm/dlmunlock.c
> +++ b/fs/ocfs2/dlm/dlmunlock.c
> @@ -104,7 +104,7 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
> {
> enum dlm_status status;
> int actions = 0;
> - int in_use;
> + int in_use, can_block;
> u8 owner;
>
> mlog(0, "master_node = %d, valblk = %d\n", master_node,
> @@ -127,9 +127,10 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
> return DLM_BADPARAM;
> }
>
> + can_block = master_node? (flags & LKM_CANCEL) : 1;
> spin_lock(&res->spinlock);
> if (res->state & DLM_LOCK_RES_IN_PROGRESS) {
> - if (master_node && !(flags & LKM_CANCEL)) {
> + if (!can_block) {
> mlog(ML_ERROR, "lockres in progress!\n");
> spin_unlock(&res->spinlock);
> return DLM_FORWARD;
> @@ -137,6 +138,9 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
> /* ok for this to sleep if not in a network handler */
> __dlm_wait_on_lockres(res);
> res->state |= DLM_LOCK_RES_IN_PROGRESS;
> + } else {
> + if (can_block)
> + res->state |= DLM_LOCK_RES_IN_PROGRESS;
> }
> spin_lock(&lock->spinlock);
>
> @@ -232,7 +236,8 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
> dlm_lock_put(lock);
>
> leave:
> - res->state &= ~DLM_LOCK_RES_IN_PROGRESS;
> + if (can_block)
> + res->state &= ~DLM_LOCK_RES_IN_PROGRESS;
> if (!dlm_lock_on_list(&res->converting, lock))
> BUG_ON(lock->ml.convert_type != LKM_IVMODE);
> else
> --
> 1.7.2.3
>
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel
More information about the Ocfs2-devel
mailing list