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

Commit c0a8520c authored by Mark Fasheh's avatar Mark Fasheh
Browse files

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
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -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);
	}

+3 −0
Original line number Diff line number Diff line
@@ -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;