int rc;
ENTRY;
- DEBUG_REQ(D_INODE, mdt_info_req(info), "Create ("DNAME"->"DFID") "
- "in "DFID,
+ DEBUG_REQ(D_INODE, mdt_info_req(info),
+ "Create ("DNAME"->"DFID") in "DFID,
PNAME(&rr->rr_name), PFID(rr->rr_fid2), PFID(rr->rr_fid1));
if (!fid_is_md_operative(rr->rr_fid1))
if (info->mti_dlm_req)
ldlm_request_cancel(req, info->mti_dlm_req, 0, LATF_SKIP);
+ OBD_RACE(OBD_FAIL_PTLRPC_RESEND_RACE);
+
repbody = req_capsule_server_get(info->mti_pill, &RMF_MDT_BODY);
mo = mdt_object_find(info->mti_env, mdt, rr->rr_fid1);
if (IS_ERR(mo))
buf->lb_buf = lmu;
buf->lb_len = ma->ma_lmv_size;
-
- if (le32_to_cpu(lmu->lum_hash_type) &
- LMV_HASH_FLAG_SPACE) {
- /*
- * only allow setting "space" hash flag on
- * plain directory.
- */
- rc = mdt_object_striped(info, mo);
- if (rc)
- GOTO(out_put,
- rc = (rc == 1) ? -EPERM : rc);
- }
-
name = XATTR_NAME_DEFAULT_LMV;
/* force client to update dir default layout */
lockpart |= MDS_INODELOCK_LOOKUP;
if (OBD_FAIL_CHECK(OBD_FAIL_MDS_REINT_LINK))
RETURN(err_serious(-ENOENT));
+ if (OBD_FAIL_PRECHECK(OBD_FAIL_PTLRPC_RESEND_RACE)) {
+ req->rq_no_reply = 1;
+ RETURN(err_serious(-ENOENT));
+ }
+
if (info->mti_dlm_req)
ldlm_request_cancel(req, info->mti_dlm_req, 0, LATF_SKIP);
* cancelled, it's okay to cancel it now as we've held mot_open_sem.
*/
ldlm_lock_cancel(lease);
- ldlm_reprocess_all(lease->l_resource);
+ ldlm_reprocess_all(lease->l_resource, lease);
LDLM_LOCK_PUT(lease);
close:
if (open_sem_locked)
up_write(&sobj->mot_open_sem);
unlock_links:
+ /* if we've got too many locks to save into RPC,
+ * then just commit before the locks are released */
+ if (!rc && do_sync)
+ mdt_device_sync(env, mdt);
mdt_unlock_list(info, &link_locks, do_sync ? 1 : rc);
put_source:
mdt_object_put(env, sobj);
if (lustre_handle_is_used(&rename_lh))
mdt_rename_unlock(&rename_lh);
- if (!rc && do_sync)
- mdt_device_sync(env, mdt);
-
return rc;
}
struct mdt_lock_handle *lhc)
{
struct mdt_reint_record *rr = &info->mti_rr;
- struct ptlrpc_request *req = mdt_info_req(info);
- struct md_attr *ma = &info->mti_attr;
- struct mdt_object *mo;
- struct ldlm_lock *lease;
- struct mdt_body *repbody;
- struct md_layout_change layout = { .mlc_mirror_id = rr->rr_mirror_id };
- bool lease_broken;
- int rc, rc2;
+ struct ptlrpc_request *req = mdt_info_req(info);
+ struct md_attr *ma = &info->mti_attr;
+ struct mdt_object *mo;
+ struct ldlm_lock *lease;
+ struct mdt_body *repbody;
+ struct md_layout_change layout = { .mlc_mirror_id = rr->rr_mirror_id };
+ bool lease_broken;
+ int rc, rc2;
+
ENTRY;
- DEBUG_REQ(D_INODE, req, DFID": FLR file resync\n", PFID(rr->rr_fid1));
+ DEBUG_REQ(D_INODE, req, DFID", FLR file resync", PFID(rr->rr_fid1));
if (info->mti_dlm_req)
ldlm_request_cancel(req, info->mti_dlm_req, 0, LATF_SKIP);
/* the file has yet opened by anyone else after we took the lease. */
layout.mlc_opc = MD_LAYOUT_RESYNC;
- rc = mdt_layout_change(info, mo, &layout);
+ lhc = &info->mti_lh[MDT_LH_LOCAL];
+ rc = mdt_layout_change(info, mo, lhc, &layout);
if (rc)
GOTO(out_unlock, rc);
+ mdt_object_unlock(info, mo, lhc, 0);
+
ma->ma_need = MA_INODE;
ma->ma_valid = 0;
rc = mdt_attr_get_complex(info, mo, ma);