i=fan yong
i=rahul
add check for dead object and fix error handling in mdd_rename()
if (!mdd_object_exists(cobj))
RETURN(-ENOENT);
if (!mdd_object_exists(cobj))
RETURN(-ENOENT);
+ if (mdd_is_dead_obj(cobj))
+ RETURN(-ESTALE);
+
+ if (!mdd_object_exists(pobj))
+ RETURN(-ENOENT);
+
if (mdd_is_dead_obj(pobj))
RETURN(-ENOENT);
if (mdd_is_dead_obj(pobj))
RETURN(-ENOENT);
+ if (!mdd_object_exists(src_obj))
+ RETURN(-ENOENT);
+
if (mdd_is_dead_obj(src_obj))
RETURN(-ESTALE);
if (mdd_is_dead_obj(src_obj))
RETURN(-ESTALE);
- if (mdd_is_dead_obj(cobj))
- RETURN(-ESTALE);
-
rc = mdd_may_delete(env, pobj, cobj, ma, 1, 1);
RETURN(rc);
rc = mdd_may_delete(env, pobj, cobj, ma, 1, 1);
RETURN(rc);
* before mdd_rename and enable MDS_PERM_BYPASS. */
LASSERT(sobj);
* before mdd_rename and enable MDS_PERM_BYPASS. */
LASSERT(sobj);
- if (mdd_is_dead_obj(sobj))
- RETURN(-ESTALE);
-
rc = mdd_may_delete(env, src_pobj, sobj, ma, 1, 0);
if (rc)
RETURN(rc);
rc = mdd_may_delete(env, src_pobj, sobj, ma, 1, 0);
if (rc)
RETURN(rc);
/* "mv dir1 dir2" needs "dir1/.." link update */
if (is_dir && mdd_sobj) {
rc = __mdd_index_delete_only(env, mdd_sobj, dotdot, handle,
/* "mv dir1 dir2" needs "dir1/.." link update */
if (is_dir && mdd_sobj) {
rc = __mdd_index_delete_only(env, mdd_sobj, dotdot, handle,
- mdd_object_capa(env, mdd_spobj));
+ mdd_object_capa(env, mdd_sobj));
if (rc)
GOTO(fixup_spobj2, rc);
rc = __mdd_index_insert_only(env, mdd_sobj, tpobj_fid, dotdot,
if (rc)
GOTO(fixup_spobj2, rc);
rc = __mdd_index_insert_only(env, mdd_sobj, tpobj_fid, dotdot,
- handle, mdd_object_capa(env, mdd_tpobj));
+ handle, mdd_object_capa(env, mdd_sobj));
if (rc) {
GOTO(fixup_spobj, rc);
}
if (rc) {
GOTO(fixup_spobj, rc);
}
rc = __mdd_index_delete(env, mdd_tpobj, tname, is_dir, handle,
mdd_object_capa(env, mdd_tpobj));
if (rc != 0) {
rc = __mdd_index_delete(env, mdd_tpobj, tname, is_dir, handle,
mdd_object_capa(env, mdd_tpobj));
if (rc != 0) {
- if (mdd_tobj && mdd_object_exists(mdd_tobj)) {
/* tname might been renamed to something else */
GOTO(fixup_spobj, rc);
}
/* tname might been renamed to something else */
GOTO(fixup_spobj, rc);
}
rc = __mdd_index_insert(env, mdd_tpobj, lf, tname, is_dir, handle,
mdd_object_capa(env, mdd_tpobj));
if (rc)
rc = __mdd_index_insert(env, mdd_tpobj, lf, tname, is_dir, handle,
mdd_object_capa(env, mdd_tpobj));
if (rc)
LASSERT(ma->ma_attr.la_valid & LA_CTIME);
la->la_ctime = la->la_mtime = ma->ma_attr.la_ctime;
LASSERT(ma->ma_attr.la_valid & LA_CTIME);
la->la_ctime = la->la_mtime = ma->ma_attr.la_ctime;
fixup_tpobj:
if (rc) {
rc2 = __mdd_index_delete(env, mdd_tpobj, tname, is_dir, handle,
fixup_tpobj:
if (rc) {
rc2 = __mdd_index_delete(env, mdd_tpobj, tname, is_dir, handle,
- mdd_object_capa(env, mdd_tpobj));
if (rc2)
CWARN("tp obj fix error %d\n",rc2);
if (rc2)
CWARN("tp obj fix error %d\n",rc2);
+ if (mdd_tobj && mdd_object_exists(mdd_tobj) &&
+ !mdd_is_dead_obj(mdd_tobj)) {
+ rc2 = __mdd_index_insert(env, mdd_tpobj,
+ mdo2fid(mdd_tobj), tname,
+ is_dir, handle,
+ BYPASS_CAPA);
+
+ if (rc2)
+ CWARN("tp obj fix error %d\n",rc2);
+ }
fixup_spobj:
if (rc && is_dir && mdd_sobj) {
rc2 = __mdd_index_delete_only(env, mdd_sobj, dotdot, handle,
fixup_spobj:
if (rc && is_dir && mdd_sobj) {
rc2 = __mdd_index_delete_only(env, mdd_sobj, dotdot, handle,
- mdd_object_capa(env, mdd_spobj));
if (rc2)
CWARN("sp obj dotdot delete error %d\n",rc2);
rc2 = __mdd_index_insert_only(env, mdd_sobj, spobj_fid,
if (rc2)
CWARN("sp obj dotdot delete error %d\n",rc2);
rc2 = __mdd_index_insert_only(env, mdd_sobj, spobj_fid,
- dotdot, handle,
- mdd_object_capa(env, mdd_spobj));
+ dotdot, handle, BYPASS_CAPA);
if (rc2)
CWARN("sp obj dotdot insert error %d\n",rc2);
}
if (rc2)
CWARN("sp obj dotdot insert error %d\n",rc2);
}
fixup_spobj2:
if (rc) {
rc2 = __mdd_index_insert(env, mdd_spobj,
fixup_spobj2:
if (rc) {
rc2 = __mdd_index_insert(env, mdd_spobj,
- lf, sname, is_dir, handle,
- mdd_object_capa(env, mdd_tpobj));
+ lf, sname, is_dir, handle, BYPASS_CAPA);
if (rc2)
CWARN("sp obj fix error %d\n",rc2);
}
if (rc2)
CWARN("sp obj fix error %d\n",rc2);
}
# We can continue try to connect if RC=254
# Just print the warning about this
if [ $RC = 254 ]; then
# We can continue try to connect if RC=254
# Just print the warning about this
if [ $RC = 254 ]; then