}
-static int cml_create(const struct lu_context *ctx,
- struct md_object *mo_p, const char *name,
- struct md_object *mo_c, struct lu_attr *attr)
+static int cml_create(const struct lu_context *ctx, struct md_object *mo_p,
+ const char *child_name, struct md_object *mo_c,
+ const char *target_name, struct lu_attr *attr)
{
int rc;
ENTRY;
- rc = mdo_create(ctx, md_object_next(mo_p), name,
- md_object_next(mo_c), attr);
+ rc = mdo_create(ctx, md_object_next(mo_p), child_name,
+ md_object_next(mo_c), target_name, attr);
RETURN(rc);
}
* For more details see rollback HLD/DLD.
*
*/
-static int cmr_create(const struct lu_context *ctx,
- struct md_object *mo_p, const char *name,
- struct md_object *mo_c, struct lu_attr *attr)
+static int cmr_create(const struct lu_context *ctx, struct md_object *mo_p,
+ const char *child_name, struct md_object *mo_c,
+ const char *target_name, struct lu_attr *attr)
{
int rc;
rc = mo_object_create(ctx, md_object_next(mo_c), attr);
if (rc == 0) {
rc = mdo_name_insert(ctx, md_object_next(mo_p),
- name, lu_object_fid(&mo_c->mo_lu));
+ child_name, lu_object_fid(&mo_c->mo_lu));
}
RETURN(rc);
int (*mdo_lookup)(const struct lu_context *, struct md_object *,
const char *, struct lu_fid *);
+ /* target_name is valid iff this is a symlink operation. */
int (*mdo_create)(const struct lu_context *, struct md_object *,
- const char *, struct md_object *,
- struct lu_attr *);
+ const char *child_name, struct md_object *,
+ const char *target_name, struct lu_attr *);
int (*mdo_rename)(const struct lu_context *ctxt,
struct md_object *spobj, struct md_object *tpobj,
return p->mo_dir_ops->mdo_lookup(cx, p, name, f);
}
-static inline int mdo_create(const struct lu_context *cx,
- struct md_object *p, const char *name,
- struct md_object *c, struct lu_attr *at)
+static inline int mdo_create(const struct lu_context *cx, struct md_object *p,
+ const char *child_name, struct md_object *c,
+ const char *target_name, struct lu_attr *at)
{
LASSERT(c->mo_dir_ops->mdo_create);
- return c->mo_dir_ops->mdo_create(cx, p, name, c, at);
+ return c->mo_dir_ops->mdo_create(cx, p, child_name, c, target_name, at);
}
static inline int mdo_rename(const struct lu_context *cx,
/*
* Create object and insert it into namespace.
*/
-static int mdd_create(const struct lu_context *ctxt,
- struct md_object *pobj, const char *name,
- struct md_object *child, struct lu_attr* attr)
+static int mdd_create(const struct lu_context *ctxt, struct md_object *pobj,
+ const char *name, struct md_object *child,
+ const char *target_name, struct lu_attr* attr)
{
struct mdd_device *mdd = mdo2mdd(pobj);
struct mdd_object *mdo = md2mdd_obj(pobj);
mdt_object_child(parent),
rr->rr_name,
mdt_object_child(child),
+ rr->rr_tgt,
&info->mti_attr);
intent_set_disposition(ldlm_rep, DISP_OPEN_CREATE);
if (result != 0)
struct md_object *next = mdt_object_child(parent);
rc = mdo_create(info->mti_ctxt, next, rr->rr_name,
- mdt_object_child(child), attr);
+ mdt_object_child(child), rr->rr_tgt, attr);
if (rc == 0) {
/* return fid to client. attr is over-written!!*/
rc = mo_attr_get(info->mti_ctxt,