-
- if (dchild->d_flags & DCACHE_CROSS_REF) {
- struct ldlm_res_id res_id = { . name = {0} };
- ldlm_policy_data_t policy;
- int flags = 0;
-
- mds_pack_dentry2body(obd, body, dchild, 1);
- intent_set_disposition(rep, DISP_LOOKUP_POS);
-
- CDEBUG(D_OTHER, "cross reference: "DLID4"\n",
- OLID4(&body->id1));
-
- res_id.name[0] = dchild->d_fid;
- res_id.name[1] = dchild->d_mdsnum;
-
- policy.l_inodebits.bits = MDS_INODELOCK_LOOKUP;
- rc = ldlm_cli_enqueue(NULL, NULL, obd->obd_namespace,
- res_id, LDLM_IBITS, &policy,
- LCK_PR, &flags, mds_blocking_ast,
- ldlm_completion_ast, NULL, NULL,
- NULL, 0, NULL, child_lockh);
-#ifdef S_PDIROPS
- if (parent_lockh[1].cookie != 0)
- ldlm_lock_decref(parent_lockh + 1, update_mode);
-#endif
- ldlm_lock_decref(parent_lockh, parent_mode);
- if (mea)
- OBD_FREE(mea, mea_size);
- l_dput(dchild);
- l_dput(dparent);
- RETURN(rc);
- }
-