- if (!lockp)
- list_add_tail(&lock->l_res_link, &lock->l_resource->lr_granted);
- else if ((join & LDLM_MODE_JOIN_LEFT) || (join & LDLM_POLICY_JOIN_LEFT))
- list_add(&lock->l_res_link, &lockp->l_res_link);
- else
- list_add_tail(&lock->l_res_link, &lockp->l_res_link);
-
- /* fix skip lists */
- if (join & LDLM_MODE_JOIN_RIGHT) {
- LASSERT(! LDLM_SL_TAIL(&lockp->l_sl_mode));
- if (LDLM_SL_EMPTY(&lockp->l_sl_mode)) {
- lock->l_sl_mode.next = &lockp->l_sl_mode;
- lockp->l_sl_mode.prev = &lock->l_sl_mode;
- } else if (LDLM_SL_HEAD(&lockp->l_sl_mode)) {
- lock->l_sl_mode.next = lockp->l_sl_mode.next;
- lockp->l_sl_mode.next = NULL;
- lock->l_sl_mode.next->prev = &lock->l_sl_mode;
- }
- } else if (join & LDLM_MODE_JOIN_LEFT) {
- LASSERT(! LDLM_SL_HEAD(&lockp->l_sl_mode));
- if (LDLM_SL_EMPTY(&lockp->l_sl_mode)) {
- lock->l_sl_mode.prev = &lockp->l_sl_mode;
- lockp->l_sl_mode.next = &lock->l_sl_mode;
- } else if (LDLM_SL_TAIL(&lockp->l_sl_mode)) {
- lock->l_sl_mode.prev = lockp->l_sl_mode.prev;
- lockp->l_sl_mode.prev = NULL;
- lock->l_sl_mode.prev->next = &lock->l_sl_mode;
- }
- }
-
- if (join & LDLM_POLICY_JOIN_RIGHT) {
- LASSERT(! LDLM_SL_TAIL(&lockp->l_sl_policy));
- if (LDLM_SL_EMPTY(&lockp->l_sl_policy)) {
- lock->l_sl_policy.next = &lockp->l_sl_policy;
- lockp->l_sl_policy.prev = &lock->l_sl_policy;
- } else if (LDLM_SL_HEAD(&lockp->l_sl_policy)) {
- lock->l_sl_policy.next = lockp->l_sl_policy.next;
- lockp->l_sl_policy.next = NULL;
- lock->l_sl_policy.next->prev = &lock->l_sl_policy;
- }
- } else if (join & LDLM_POLICY_JOIN_LEFT) {
- LASSERT(! LDLM_SL_HEAD(&lockp->l_sl_policy));
- if (LDLM_SL_EMPTY(&lockp->l_sl_policy)) {
- lock->l_sl_policy.prev = &lockp->l_sl_policy;
- lockp->l_sl_policy.next = &lock->l_sl_policy;
- } else if (LDLM_SL_TAIL(&lockp->l_sl_policy)) {
- lock->l_sl_policy.prev = lockp->l_sl_policy.prev;
- lockp->l_sl_policy.prev = NULL;
- lock->l_sl_policy.prev->next = &lock->l_sl_policy;
- }
- }