struct md_object *next = mdt_object_child(o);
ma->ma_need = MA_INODE;
- rc = mo_object_create(info->mti_env, next, &info->mti_spec,
+ /* Cross-ref create can encounter already created obj in case
+ * of recovery, just get attr in that case */
+ if (lu_object_exists(&o->mot_obj.mo_lu) == 1) {
+ rc = mo_attr_get(info->mti_env, next, ma);
+ } else {
+ rc = mo_object_create(info->mti_env, next, &info->mti_spec,
ma);
+ }
if (rc == 0) {
/* return fid & attr to client. */
if (ma->ma_valid & MA_INODE)
}
run_test 2a "unlink cross-node file (fail mds with name)"
-
test_3a() {
replay_barrier mds2
mkdir $DIR/dir3a1
run_test 3a "mkdir cross-node dir (fail mds with inode)"
test_3b() {
- mkdir $DIR/dir13
replay_barrier mds1
- $CHECKSTAT -t dir $DIR/dir13 || return 1
- rmdir $DIR/dir13
+ mkdir $DIR/dir3b1
+ $LCTL mark "FAILOVER mds1"
fail mds1
- stat $DIR/dir13
+ stat $DIR
+ $CHECKSTAT -t dir $DIR/dir3b1 || return 1
}
-run_test 3b "mkdir cross-node dir (fail mds with name)"
+run_test 3b "mkdir cross-node dir (fail mds with inode)"
equals_msg test complete, cleaning up
$CLEANUP