}
return rc;
}
-
+/* caller should take a lock before calling */
static int __mdd_finish_unlink(const struct lu_context *ctxt,
struct mdd_object *obj, struct md_attr *ma,
struct thandle *th)
int mode = accmode(md2mdd_obj(obj), flags);
int rc = 0;
- mdd_read_lock(ctxt, md2mdd_obj(obj));
+ mdd_write_lock(ctxt, md2mdd_obj(obj));
if (mode & MAY_WRITE) {
if (mdd_is_immutable(md2mdd_obj(obj)))
if (rc == 0)
md2mdd_obj(obj)->mod_count ++;
- mdd_read_unlock(ctxt, md2mdd_obj(obj));
+ mdd_write_unlock(ctxt, md2mdd_obj(obj));
return rc;
}
if (IS_ERR(mdo))
CERROR("Invalid orphan!\n");
else {
+ mdd_write_lock(ctx, mdo);
if (mdo->mod_count == 0) {
/* non-opened orphan, let's delete it */
struct md_attr *ma = &mdd_ctx_info(ctx)->mti_ma;
//mdd_ost_objects_destroy(ctx, ma);
/* TODO: destroy index entry */
}
+ mdd_write_unlock(ctx, mdo);
mdd_object_put(ctx, mdo);
}
}
/*
* Write lock assumes transaction.
*/
- LASSERT(oti->oti_txns > 0);
+ /* open need it without transaction
+ * LASSERT(oti->oti_txns > 0);
+ */
obj->oo_owner = ctx;
oti->oti_w_locks++;
}