Whamcloud - gitweb
modified mdo_create interface, added symlink target name as a parameter.
authorhuanghua <huanghua>
Wed, 12 Jul 2006 07:18:57 +0000 (07:18 +0000)
committerhuanghua <huanghua>
Wed, 12 Jul 2006 07:18:57 +0000 (07:18 +0000)
lustre/cmm/cmm_object.c
lustre/include/md_object.h
lustre/mdd/mdd_handler.c
lustre/mdt/mdt_open.c
lustre/mdt/mdt_reint.c

index d1f38cd..14be138 100644 (file)
@@ -313,14 +313,14 @@ static int cml_lookup(const struct lu_context *ctx, struct md_object *mo_p,
 
 }
 
-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);
 }
 
@@ -574,9 +574,9 @@ static int cmr_lookup(const struct lu_context *ctx, struct md_object *mo_p,
  * 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;
 
@@ -588,7 +588,7 @@ static int cmr_create(const struct lu_context *ctx,
         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);
index 88acd46..f1880ef 100644 (file)
@@ -77,9 +77,10 @@ struct md_dir_operations {
         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,
@@ -254,12 +255,12 @@ static inline int mdo_lookup(const struct lu_context *cx, struct md_object *p,
         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,
index 3d518a8..41bbd34 100644 (file)
@@ -729,9 +729,9 @@ static int mdd_lookup(const struct lu_context *ctxt, struct md_object *pobj,
 /*
  * 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);
index 58073dc..b502032 100644 (file)
@@ -290,6 +290,7 @@ int mdt_reint_open(struct mdt_thread_info *info)
                                     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)
index 0ce4f88..32eb6cb 100644 (file)
@@ -64,7 +64,7 @@ static int mdt_md_create(struct mdt_thread_info *info)
                 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,