return rc;
}
-/*
- * used when destroying orphans and from mds_reint_unlink() when MDS wants to
- * destroy objects on OSS.
- */
-static
-int mdd_lovobj_unlink(const struct lu_env *env, struct mdd_device *mdd,
- struct mdd_object *obj, struct lu_attr *la,
- struct lov_mds_md *lmm, int lmm_size,
- struct llog_cookie *logcookies,
- int log_unlink)
-{
- struct obd_device *obd = mdd2obd_dev(mdd);
- struct obd_export *lov_exp = obd->u.mds.mds_osc_exp;
- struct lov_stripe_md *lsm = NULL;
- struct obd_trans_info *oti = &mdd_env_info(env)->mti_oti;
- struct obdo *oa = &mdd_env_info(env)->mti_oa;
- int rc;
- ENTRY;
-
- if (lmm_size == 0)
- RETURN(0);
-
- rc = obd_unpackmd(lov_exp, &lsm, lmm, lmm_size);
- if (rc < 0) {
- CERROR("Error unpack md %p\n", lmm);
- RETURN(rc);
- } else {
- LASSERT(rc >= sizeof(*lsm));
- rc = 0;
- }
-
- oa->o_id = lsm->lsm_object_id;
- oa->o_gr = FILTER_GROUP_MDS0 + mdd2lu_dev(mdd)->ld_site->ls_node_id;
- oa->o_mode = la->la_mode & S_IFMT;
- oa->o_valid = OBD_MD_FLID | OBD_MD_FLTYPE | OBD_MD_FLGROUP;
-
- oti_init(oti, NULL);
- if (log_unlink && logcookies) {
- oa->o_valid |= OBD_MD_FLCOOKIE;
- oti->oti_logcookies = logcookies;
- }
-
- CDEBUG(D_INFO, "destroying OSS object %d/%d\n",
- (int)oa->o_id, (int)oa->o_gr);
-
- rc = obd_destroy(lov_exp, oa, lsm, oti, NULL);
-
- obd_free_memmd(lov_exp, &lsm);
- RETURN(rc);
-}
-
-
-/*
- * called with obj not locked.
- */
-int mdd_lov_destroy(const struct lu_env *env, struct mdd_device *mdd,
- struct mdd_object *obj, struct lu_attr *la)
-{
- struct md_attr *ma = &mdd_env_info(env)->mti_ma;
- int rc;
- ENTRY;
-
- if (unlikely(la->la_nlink != 0)) {
- CWARN("Attempt to destroy OSS object when nlink == %d\n",
- la->la_nlink);
- RETURN(0);
- }
-
- ma->ma_lmm_size = mdd_lov_mdsize(env, mdd);
- ma->ma_lmm = mdd_max_lmm_get(env, mdd);
- ma->ma_cookie_size = mdd_lov_cookiesize(env, mdd);
- ma->ma_cookie = mdd_max_cookie_get(env, mdd);
- if (ma->ma_lmm == NULL || ma->ma_cookie == NULL)
- RETURN(rc = -ENOMEM);
-
- /* get lov ea */
- rc = mdd_get_md_locked(env, obj, ma->ma_lmm, &ma->ma_lmm_size,
- MDS_LOV_MD_NAME);
- if (rc) {
- CWARN("Get lov ea failed for "DFID"\n", PFID(mdo2fid(obj)));
- RETURN(rc);
- }
- ma->ma_valid = MA_LOV;
-
- rc = mdd_unlink_log(env, mdd, obj, ma);
- if (rc) {
- CWARN("mds unlink log for "DFID" failed: %d\n",
- PFID(mdo2fid(obj)), rc);
- RETURN(rc);
- }
- if (ma->ma_valid | MA_COOKIE)
- rc = mdd_lovobj_unlink(env, mdd, obj, la,
- ma->ma_lmm, ma->ma_lmm_size,
- ma->ma_cookie, 1);
- RETURN(rc);
-}
-
int mdd_log_op_unlink(struct obd_device *obd,
struct lov_mds_md *lmm, int lmm_size,
struct llog_cookie *logcookies, int cookies_size)