- lh = &info->mti_lh[MDT_LH_PARENT];
- mdt_lock_reg_init(lh, LCK_PW);
+ if (fid_is_root(rr->rr_fid1)) {
+ lockpart |= MDS_INODELOCK_LOOKUP;
+ } else {
+ /* force client to update dir default layout */
+ fid_zero(pfid);
+ pname->ln_name = dotdot;
+ pname->ln_namelen = sizeof(dotdot);
+ rc = mdo_lookup(info->mti_env,
+ mdt_object_child(mo), pname,
+ pfid, NULL);
+ if (rc)
+ GOTO(out_put, rc);
+
+ pobj = mdt_object_find(info->mti_env, mdt,
+ pfid);
+ if (IS_ERR(pobj))
+ GOTO(out_put, rc = PTR_ERR(pobj));
+
+ if (mdt_object_remote(pobj))
+ rc = mdt_remote_object_lock(info, pobj,
+ mdt_object_fid(mo),
+ &lh->mlh_rreg_lh, LCK_EX,
+ MDS_INODELOCK_LOOKUP, false);
+ else
+ lockpart |= MDS_INODELOCK_LOOKUP;
+
+ mdt_object_put(info->mti_env, pobj);
+
+ if (rc)
+ GOTO(out_put, rc);
+ }
+ }