0, &lsm, rec->ur_eadata);
if (rc)
GOTO(out_oa, rc);
+ } else {
+ /* Per-directory striping default code removed, because
+ * it uses the same unnamed EA storage as the directory
+ * striping for CMD. -p */
}
LASSERT(oa->o_gr >= FILTER_GROUP_FIRST_MDS);
rc = obd_create(mds->mds_osc_exp, oa, &lsm, &oti);
int mea_size, update_mode;
ENTRY;
+ DEBUG_REQ(D_INODE, req, "parent "LPU64"/%u name %*s mode %o",
+ rec->ur_fid1->id, rec->ur_fid1->generation,
+ rec->ur_namelen - 1, rec->ur_name, rec->ur_mode);
+
parent_lockh[0].cookie = 0;
parent_lockh[1].cookie = 0;
* should live at this MDS or at another one */
int i;
i = mea_name2idx(mea, rec->ur_name, rec->ur_namelen - 1);
- if (mea->mea_master != i) {
- CERROR("inapropriate MDS(%d) for %s. should be %d\n",
- mea->mea_master, rec->ur_name, i);
+ if (mea->mea_master != mea->mea_fids[i].mds) {
+ CDEBUG(D_OTHER,
+ "%s: inapropriate MDS(%d) for %lu/%u:%s."
+ " should be %d(%d)\n", obd->obd_name,
+ mea->mea_master, dparent->d_inode->i_ino,
+ dparent->d_inode->i_generation, rec->ur_name,
+ mea->mea_fids[i].mds, i);
GOTO(cleanup, rc = -ERESTART);
}
}
unsigned long ino = rec->ur_fid2->id;
struct iattr iattr;
struct inode *inode;
-
- if ((rc = mds_try_to_split_dir(obd, dparent, &mea, 0))) {
- if (rc > 0) {
- /* dir got splitted */
- GOTO(cleanup, rc = -ERESTART);
- } else {
- /* error happened during spitting */
- GOTO(cleanup, rc);
- }
+ rc = mds_try_to_split_dir(obd, dparent, &mea, 0, update_mode);
+ CDEBUG(D_OTHER, "%s: splitted %lu/%u - %d\n",
+ obd->obd_name, dparent->d_inode->i_ino,
+ dparent->d_inode->i_generation, rc);
+ if (rc > 0) {
+ /* dir got splitted */
+ GOTO(cleanup, rc = -ERESTART);
+ } else if (rc < 0) {
+ /* error happened during spitting */
+ GOTO(cleanup, rc);
}
if (!(rec->ur_flags & MDS_OPEN_CREAT)) {
}
}
- if (rc == 0) {
- struct ldlm_res_id res_id = { . name = {0} };
- ldlm_policy_data_t policy;
- int flags = 0;
- res_id.name[0] = dchild->d_inode->i_ino;
- res_id.name[1] = dchild->d_inode->i_generation;
- policy.l_inodebits.bits = MDS_INODELOCK_LOOKUP |
- MDS_INODELOCK_UPDATE;
- 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);
- if (rc == 0)
- cleanup_phase = 3;
- }
-
/* Step 5: mds_open it */
rc = mds_finish_open(req, dchild, body, rec->ur_flags, &handle, rec,
rep);
req, rc, rep ? rep->lock_policy_res1 : 0);
switch (cleanup_phase) {
- case 3:
- if (rc)
- ldlm_lock_decref(child_lockh, LCK_PR);
case 2:
if (rc && created) {
int err = vfs_unlink(dparent->d_inode, dchild);
err);
}
} else if (created) {
+#if 0
mds_lock_new_child(obd, dchild->d_inode, NULL);
+#endif
}
l_dput(dchild);
case 1:
atomic_inc(&mds->mds_open_count);
if (mea)
OBD_FREE(mea, mea_size);
- if ((cleanup_phase != 3) && !rc)
- rc = ENOLCK;
RETURN(rc);
}