rc = mdd_la_get(env, obj, la, BYPASS_CAPA);
if (rc == 0) {
mdd_flags_xlate(obj, la->la_flags);
- if (S_ISDIR(la->la_mode) && la->la_nlink == 1)
- obj->mod_flags |= MNLINK_OBJ;
}
RETURN(rc);
}
if (rc)
GOTO(cleanup, rc);
- __mdd_ref_del(env, mdd_obj, handle, 0);
+ mdo_ref_del(env, mdd_obj, handle);
if (S_ISDIR(lu_object_attr(&obj->mo_lu))) {
/* unlink dot */
- __mdd_ref_del(env, mdd_obj, handle, 1);
+ mdo_ref_del(env, mdd_obj, handle);
}
LASSERT(ma->ma_attr.la_valid & LA_CTIME);
mdd_write_lock(env, mdd_obj, MOR_TGT_CHILD);
rc = mdd_link_sanity_check(env, NULL, NULL, mdd_obj);
if (rc == 0)
- __mdd_ref_add(env, mdd_obj, handle);
+ mdo_ref_add(env, mdd_obj, handle);
mdd_write_unlock(env, mdd_obj);
if (rc == 0) {
LASSERT(ma->ma_attr.la_valid & LA_CTIME);
struct mdd_device *mdd = mdo2mdd(obj);
struct thandle *handle = NULL;
int rc;
- int reset = 1;
+ int is_orphan = 0, reset = 1;
#ifdef HAVE_QUOTA_SUPPORT
struct obd_device *obd = mdo2mdd(obj)->mdd_obd_dev;
CDEBUG(D_HA, "Object "DFID" is deleted from orphan "
"list, OSS objects to be destroyed.\n",
PFID(mdd_object_fid(mdd_obj)));
+ is_orphan = 1;
} else {
CERROR("Object "DFID" can not be deleted from orphan "
"list, maybe cause OST objects can not be "
rc = mdd_iattr_get(env, mdd_obj, ma);
/* Object maybe not in orphan list originally, it is rare case for
* mdd_finish_unlink() failure. */
- if (rc == 0 && ma->ma_attr.la_nlink == 0) {
+ if (rc == 0 && (ma->ma_attr.la_nlink == 0 || is_orphan)) {
#ifdef HAVE_QUOTA_SUPPORT
if (mds->mds_quota) {
quota_opc = FSFILT_OP_UNLINK_PARTIAL_CHILD;