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: Mark Fasheh <mark.fasheh@oracle.com>
This commit is contained in:
Родитель
aa85235427
Коммит
c0a8520c73
|
@ -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" :
|
||||
"remote");
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -214,6 +214,9 @@ grant:
|
|||
if (lock->ml.node == dlm->node_num)
|
||||
mlog(0, "doing in-place convert for nonlocal lock\n");
|
||||
lock->ml.type = type;
|
||||
if (lock->lksb->flags & DLM_LKSB_PUT_LVB)
|
||||
memcpy(res->lvb, lock->lksb->lvb, DLM_LVB_LEN);
|
||||
|
||||
status = DLM_NORMAL;
|
||||
*call_ast = 1;
|
||||
goto unlock_exit;
|
||||
|
|
Загрузка…
Ссылка в новой задаче