Commit c0a8520c authored by Mark Fasheh's avatar Mark Fasheh

ocfs2: do LVB puts in place

Don't wait until the AST will be fired to do the LVB copy into the lock
resource.
Signed-off-by: default avatarMark Fasheh <mark.fasheh@oracle.com>
parent aa852354
...@@ -197,12 +197,14 @@ static void dlm_update_lvb(struct dlm_ctxt *dlm, struct dlm_lock_resource *res, ...@@ -197,12 +197,14 @@ static void dlm_update_lvb(struct dlm_ctxt *dlm, struct dlm_lock_resource *res,
lock->ml.node == dlm->node_num ? "master" : lock->ml.node == dlm->node_num ? "master" :
"remote"); "remote");
memcpy(lksb->lvb, res->lvb, DLM_LVB_LEN); memcpy(lksb->lvb, res->lvb, DLM_LVB_LEN);
} else if (lksb->flags & DLM_LKSB_PUT_LVB) {
mlog(0, "setting lvb from lockres for %s node\n",
lock->ml.node == dlm->node_num ? "master" :
"remote");
memcpy(res->lvb, lksb->lvb, DLM_LVB_LEN);
} }
/* Do nothing for lvb put requests - they should be done in
* place when the lock is downconverted - otherwise we risk
* racing gets and puts which could result in old lvb data
* being propagated. We leave the put flag set and clear it
* here. In the future we might want to clear it at the time
* the put is actually done.
*/
spin_unlock(&res->spinlock); spin_unlock(&res->spinlock);
} }
......
...@@ -214,6 +214,9 @@ grant: ...@@ -214,6 +214,9 @@ grant:
if (lock->ml.node == dlm->node_num) if (lock->ml.node == dlm->node_num)
mlog(0, "doing in-place convert for nonlocal lock\n"); mlog(0, "doing in-place convert for nonlocal lock\n");
lock->ml.type = type; lock->ml.type = type;
if (lock->lksb->flags & DLM_LKSB_PUT_LVB)
memcpy(res->lvb, lock->lksb->lvb, DLM_LVB_LEN);
status = DLM_NORMAL; status = DLM_NORMAL;
*call_ast = 1; *call_ast = 1;
goto unlock_exit; goto unlock_exit;
......
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