}
static int
-__mdd_index_insert(struct lu_context *ctxt, struct mdd_device *mdd,
- struct mdd_object *pobj,
- struct mdd_object *obj, const char *name,
+__mdd_index_insert(struct lu_context *ctxt, struct mdd_object *pobj,
+ const struct lu_fid *lf, const char *name,
struct thandle *handle)
{
int rc;
struct dt_object *next = mdd_object_child(pobj);
- ENTRY;
-
- mdd_lock2(ctxt, pobj, obj);
-
- rc = next->do_index_ops->dio_index_insert(ctxt, next,
- mdd_object_getfid(obj),
- name, handle);
- mdd_unlock2(ctxt, pobj, obj);
- RETURN(rc);
-}
-
-static int
-mdd_index_insert(struct lu_context *ctxt, struct md_object *pobj,
- struct md_object *obj, const char *name)
-{
- struct mdd_device *mdd = mdo2mdd(pobj);
- int rc;
- struct thandle *handle;
- ENTRY;
-
- handle = mdd_trans_start(ctxt, mdd,
- &TXN_PARAM(MDD_INDEX_INSERT_CREDITS));
- if (IS_ERR(handle))
- RETURN(PTR_ERR(handle));
-
- rc = __mdd_index_insert(ctxt, mdd, mdo2mddo(pobj), mdo2mddo(obj),
- name, handle);
-
- mdd_trans_stop(ctxt, mdd, handle);
- RETURN(rc);
+ rc = next->do_index_ops->dio_index_insert(ctxt, next, lf, name,
+ handle);
+ return rc;
}
static int
mdd_lock2(ctxt, mdd_tobj, mdd_sobj);
- rc = __mdd_index_insert(ctxt, mdd, mdd_tobj, mdd_sobj, name, handle);
+ rc = __mdd_index_insert(ctxt, mdd_tobj, lu_object_fid(&src_obj->mo_lu),
+ name, handle);
if (rc)
GOTO(exit, rc);
static int
mdd_rename(struct lu_context *ctxt, struct md_object *src_pobj,
- struct md_object *tgt_pobj,
- struct md_object *sobj, const char *sname, struct md_object *tobj,
- const char *tname)
+ struct md_object *tgt_pobj, struct md_object *sobj,
+ const char *sname, struct md_object *tobj, const char *tname)
{
struct mdd_device *mdd = mdo2mdd(src_pobj);
struct mdd_object *mdd_spobj = mdo2mddo(src_pobj);
if (rc)
GOTO(cleanup, rc);
- rc = __mdd_index_insert(ctxt, mdd, mdd_spobj, mdd_tobj, tname, handle);
+ rc = __mdd_index_insert(ctxt, mdd_spobj, lu_object_fid(&tobj->mo_lu),
+ tname, handle);
if (rc)
GOTO(cleanup, rc);
RETURN(rc);
}
-static int
-mdd_mkdir(struct lu_context *ctxt, struct lu_attr* attr, struct md_object *pobj,
- const char *name, struct md_object *child)
+static int mdd_mkdir(struct lu_context *ctxt, struct lu_attr* attr,
+ struct md_object *pobj, const char *name,
+ struct md_object *child)
{
struct mdd_device *mdd = mdo2mdd(pobj);
+ struct mdd_object *mdo = mdo2mddo(pobj);
struct thandle *handle;
int rc = 0;
ENTRY;
if (IS_ERR(handle))
RETURN(PTR_ERR(handle));
- mdd_lock(ctxt, mdo2mddo(pobj), DT_WRITE_LOCK);
+ mdd_lock(ctxt, mdo, DT_WRITE_LOCK);
rc = __mdd_object_create(ctxt, mdo2mddo(child), handle);
if (rc)
GOTO(cleanup, rc);
- rc = __mdd_index_insert(ctxt, mdd, mdo2mddo(pobj), mdo2mddo(child),
+ rc = __mdd_index_insert(ctxt, mdo, lu_object_fid(&child->mo_lu),
name, handle);
if (rc)
GOTO(cleanup, rc);
cleanup:
- mdd_unlock(ctxt, mdo2mddo(pobj), DT_WRITE_LOCK);
+ mdd_unlock(ctxt, mdo, DT_WRITE_LOCK);
mdd_trans_stop(ctxt, mdd, handle);
RETURN(rc);
}
static int mdd_mkname(struct lu_context *ctxt, struct md_object *pobj,
- const char *name, struct lu_fid *fid, struct lu_attr *attr)
+ const char *name, const struct lu_fid *fid, struct lu_attr *attr)
{
struct mdd_device *mdd = mdo2mdd(pobj);
+ struct mdd_object *mdo = mdo2mddo(pobj);
struct thandle *handle;
int rc = 0;
ENTRY;
if (IS_ERR(handle))
RETURN(PTR_ERR(handle));
- mdd_lock(ctxt, mdo2mddo(pobj), DT_WRITE_LOCK);
+ mdd_lock(ctxt, mdo, DT_WRITE_LOCK);
-#if 0
- rc = __mdd_index_insert(ctxt, mdd, mdo2mddo(pobj), mdo2mddo(child),
- name, handle);
-#endif
- rc = -EOPNOTSUPP;
+ rc = __mdd_index_insert(ctxt, mdo, fid, name, handle);
- mdd_unlock(ctxt, mdo2mddo(pobj), DT_WRITE_LOCK);
+ mdd_unlock(ctxt, mdo, DT_WRITE_LOCK);
mdd_trans_stop(ctxt, mdd, handle);
RETURN(rc);
}