Whamcloud - gitweb
LU-3536 osp: move update packing into out_lib.c
[fs/lustre-release.git] / lustre / osp / osp_md_object.c
index 237e8ae..c10a9dc 100644 (file)
@@ -84,15 +84,10 @@ int osp_md_declare_object_create(const struct lu_env *env,
                                 struct dt_object_format *dof,
                                 struct thandle *th)
 {
-       struct osp_thread_info          *osi = osp_env_info(env);
        struct dt_update_request        *update;
-       struct lu_fid                   *fid1;
-       int                             sizes[2] = {sizeof(struct obdo), 0};
-       char                            *bufs[2] = {NULL, NULL};
-       int                             buf_count;
        int                             rc;
 
-       update = out_find_create_update_loc(th, dt);
+       update = dt_update_request_find_or_create(th, dt);
        if (IS_ERR(update)) {
                CERROR("%s: Get OSP update buf failed: rc = %d\n",
                       dt->do_lu.lo_dev->ld_obd->obd_name,
@@ -100,22 +95,6 @@ int osp_md_declare_object_create(const struct lu_env *env,
                return PTR_ERR(update);
        }
 
-       osi->osi_obdo.o_valid = 0;
-       obdo_from_la(&osi->osi_obdo, attr, attr->la_valid);
-       lustre_set_wire_obdo(NULL, &osi->osi_obdo, &osi->osi_obdo);
-
-       bufs[0] = (char *)&osi->osi_obdo;
-       buf_count = 1;
-       fid1 = (struct lu_fid *)lu_object_fid(&dt->do_lu);
-       if (hint != NULL && hint->dah_parent) {
-               struct lu_fid *fid2;
-
-               fid2 = (struct lu_fid *)lu_object_fid(&hint->dah_parent->do_lu);
-               sizes[1] = sizeof(*fid2);
-               bufs[1] = (char *)fid2;
-               buf_count++;
-       }
-
        if (lu_object_exists(&dt->do_lu)) {
                /* If the object already exists, we needs to destroy
                 * this orphan object first.
@@ -131,23 +110,27 @@ int osp_md_declare_object_create(const struct lu_env *env,
                 *    but find the object already exists
                 */
                CDEBUG(D_HA, "%s: object "DFID" exists, destroy this orphan\n",
-                      dt->do_lu.lo_dev->ld_obd->obd_name, PFID(fid1));
+                      dt->do_lu.lo_dev->ld_obd->obd_name,
+                      PFID(lu_object_fid(&dt->do_lu)));
 
-               rc = out_insert_update(env, update, OUT_REF_DEL, fid1, 0,
-                                      NULL, NULL);
+               rc = out_ref_del_pack(env, &update->dur_buf,
+                                     lu_object_fid(&dt->do_lu),
+                                     update->dur_batchid);
                if (rc != 0)
                        GOTO(out, rc);
 
                if (S_ISDIR(lu_object_attr(&dt->do_lu))) {
                        /* decrease for ".." */
-                       rc = out_insert_update(env, update, OUT_REF_DEL, fid1,
-                                              0, NULL, NULL);
+                       rc = out_ref_del_pack(env, &update->dur_buf,
+                                             lu_object_fid(&dt->do_lu),
+                                             update->dur_batchid);
                        if (rc != 0)
                                GOTO(out, rc);
                }
 
-               rc = out_insert_update(env, update, OUT_DESTROY, fid1, 0, NULL,
-                                      NULL);
+               rc = out_object_destroy_pack(env, &update->dur_buf,
+                                            lu_object_fid(&dt->do_lu),
+                                            update->dur_batchid);
                if (rc != 0)
                        GOTO(out, rc);
 
@@ -157,8 +140,11 @@ int osp_md_declare_object_create(const struct lu_env *env,
                update_inc_batchid(update);
        }
 
-       rc = out_insert_update(env, update, OUT_CREATE, fid1, buf_count, sizes,
-                              (const char **)bufs);
+       rc = out_create_pack(env, &update->dur_buf,
+                            lu_object_fid(&dt->do_lu), attr, hint, dof,
+                            update->dur_batchid);
+       if (rc != 0)
+               GOTO(out, rc);
 out:
        if (rc)
                CERROR("%s: Insert update error: rc = %d\n",
@@ -218,10 +204,9 @@ static int osp_md_declare_object_ref_del(const struct lu_env *env,
                                         struct thandle *th)
 {
        struct dt_update_request        *update;
-       struct lu_fid                   *fid;
        int                             rc;
 
-       update = out_find_create_update_loc(th, dt);
+       update = dt_update_request_find_or_create(th, dt);
        if (IS_ERR(update)) {
                CERROR("%s: Get OSP update buf failed: rc = %d\n",
                       dt->do_lu.lo_dev->ld_obd->obd_name,
@@ -229,10 +214,9 @@ static int osp_md_declare_object_ref_del(const struct lu_env *env,
                return PTR_ERR(update);
        }
 
-       fid = (struct lu_fid *)lu_object_fid(&dt->do_lu);
-
-       rc = out_insert_update(env, update, OUT_REF_DEL, fid, 0, NULL, NULL);
-
+       rc = out_ref_del_pack(env, &update->dur_buf,
+                             lu_object_fid(&dt->do_lu),
+                             update->dur_batchid);
        return rc;
 }
 
@@ -276,10 +260,9 @@ static int osp_md_declare_ref_add(const struct lu_env *env,
                                  struct dt_object *dt, struct thandle *th)
 {
        struct dt_update_request        *update;
-       struct lu_fid                   *fid;
        int                             rc;
 
-       update = out_find_create_update_loc(th, dt);
+       update = dt_update_request_find_or_create(th, dt);
        if (IS_ERR(update)) {
                CERROR("%s: Get OSP update buf failed: rc = %d\n",
                       dt->do_lu.lo_dev->ld_obd->obd_name,
@@ -287,9 +270,9 @@ static int osp_md_declare_ref_add(const struct lu_env *env,
                return PTR_ERR(update);
        }
 
-       fid = (struct lu_fid *)lu_object_fid(&dt->do_lu);
-
-       rc = out_insert_update(env, update, OUT_REF_ADD, fid, 0, NULL, NULL);
+       rc = out_ref_add_pack(env, &update->dur_buf,
+                             lu_object_fid(&dt->do_lu),
+                             update->dur_batchid);
 
        return rc;
 }
@@ -359,14 +342,10 @@ static void osp_md_ah_init(const struct lu_env *env,
 int osp_md_declare_attr_set(const struct lu_env *env, struct dt_object *dt,
                            const struct lu_attr *attr, struct thandle *th)
 {
-       struct osp_thread_info          *osi = osp_env_info(env);
        struct dt_update_request        *update;
-       struct lu_fid                   *fid;
-       int                             size = sizeof(struct obdo);
-       char                            *buf;
        int                             rc;
 
-       update = out_find_create_update_loc(th, dt);
+       update = dt_update_request_find_or_create(th, dt);
        if (IS_ERR(update)) {
                CERROR("%s: Get OSP update buf failed: %d\n",
                       dt->do_lu.lo_dev->ld_obd->obd_name,
@@ -374,16 +353,9 @@ int osp_md_declare_attr_set(const struct lu_env *env, struct dt_object *dt,
                return PTR_ERR(update);
        }
 
-       osi->osi_obdo.o_valid = 0;
-       obdo_from_la(&osi->osi_obdo, (struct lu_attr *)attr,
-                    attr->la_valid);
-       lustre_set_wire_obdo(NULL, &osi->osi_obdo, &osi->osi_obdo);
-
-       buf = (char *)&osi->osi_obdo;
-       fid = (struct lu_fid *)lu_object_fid(&dt->do_lu);
-
-       rc = out_insert_update(env, update, OUT_ATTR_SET, fid, 1, &size,
-                              (const char **)&buf);
+       rc = out_attr_set_pack(env, &update->dur_buf,
+                              lu_object_fid(&dt->do_lu), attr,
+                              update->dur_batchid);
 
        return rc;
 }
@@ -531,7 +503,6 @@ static int osp_md_index_lookup(const struct lu_env *env, struct dt_object *dt,
        struct dt_update_request   *update;
        struct object_update_reply *reply;
        struct ptlrpc_request      *req = NULL;
-       int                        size = strlen((char *)key) + 1;
        struct lu_fid              *fid;
        int                        rc;
        ENTRY;
@@ -540,14 +511,13 @@ static int osp_md_index_lookup(const struct lu_env *env, struct dt_object *dt,
         * just create an update buffer, instead of attaching the
         * update_remote list of the thandle.
         */
-       update = out_create_update_req(dt_dev);
+       update = dt_update_request_create(dt_dev);
        if (IS_ERR(update))
                RETURN(PTR_ERR(update));
 
-       rc = out_insert_update(env, update, OUT_INDEX_LOOKUP,
-                              lu_object_fid(&dt->do_lu),
-                              1, &size, (const char **)&key);
-       if (rc) {
+       rc = out_index_lookup_pack(env, &update->dur_buf,
+                                  lu_object_fid(&dt->do_lu), rec, key);
+       if (rc != 0) {
                CERROR("%s: Insert update error: rc = %d\n",
                       dt_dev->dd_lu_dev.ld_obd->obd_name, rc);
                GOTO(out, rc);
@@ -597,7 +567,7 @@ out:
        if (req != NULL)
                ptlrpc_req_finished(req);
 
-       out_destroy_update_req(update);
+       dt_update_request_destroy(update);
 
        return rc;
 }
@@ -623,22 +593,10 @@ static int osp_md_declare_insert(const struct lu_env *env,
                                 const struct dt_key *key,
                                 struct thandle *th)
 {
-       struct osp_thread_info     *info = osp_env_info(env);
-       struct dt_update_request   *update;
-       struct dt_insert_rec       *rec1 = (struct dt_insert_rec *)rec;
-       struct lu_fid              *fid =
-                               (struct lu_fid *)lu_object_fid(&dt->do_lu);
-       struct lu_fid              *rec_fid = &info->osi_fid;
-       __u32                       type = cpu_to_le32(rec1->rec_type);
-       int                         size[3] = { strlen((char *)key) + 1,
-                                               sizeof(*rec_fid),
-                                               sizeof(type) };
-       const char                 *bufs[3] = { (char *)key,
-                                               (char *)rec_fid,
-                                               (char *)&type };
-       int                         rc;
-
-       update = out_find_create_update_loc(th, dt);
+       struct dt_update_request *update;
+       int                      rc;
+
+       update = dt_update_request_find_or_create(th, dt);
        if (IS_ERR(update)) {
                CERROR("%s: Get OSP update buf failed: rc = %d\n",
                       dt->do_lu.lo_dev->ld_obd->obd_name,
@@ -646,13 +604,9 @@ static int osp_md_declare_insert(const struct lu_env *env,
                return PTR_ERR(update);
        }
 
-       CDEBUG(D_INFO, "%s: insert index of "DFID" %s: "DFID", %u\n",
-              dt->do_lu.lo_dev->ld_obd->obd_name,
-              PFID(fid), (char *)key, PFID(rec1->rec_fid), rec1->rec_type);
-
-       fid_cpu_to_le(rec_fid, rec1->rec_fid);
-       rc = out_insert_update(env, update, OUT_INDEX_INSERT, fid,
-                              ARRAY_SIZE(size), size, bufs);
+       rc = out_index_insert_pack(env, &update->dur_buf,
+                                  lu_object_fid(&dt->do_lu), rec, key,
+                                  update->dur_batchid);
        return rc;
 }
 
@@ -704,11 +658,9 @@ static int osp_md_declare_delete(const struct lu_env *env,
                                 struct thandle *th)
 {
        struct dt_update_request *update;
-       struct lu_fid *fid;
-       int size = strlen((char *)key) + 1;
-       int rc;
+       int                      rc;
 
-       update = out_find_create_update_loc(th, dt);
+       update = dt_update_request_find_or_create(th, dt);
        if (IS_ERR(update)) {
                CERROR("%s: Get OSP update buf failed: rc = %d\n",
                       dt->do_lu.lo_dev->ld_obd->obd_name,
@@ -716,11 +668,9 @@ static int osp_md_declare_delete(const struct lu_env *env,
                return PTR_ERR(update);
        }
 
-       fid = (struct lu_fid *)lu_object_fid(&dt->do_lu);
-
-       rc = out_insert_update(env, update, OUT_INDEX_DELETE, fid, 1, &size,
-                              (const char **)&key);
-
+       rc = out_index_delete_pack(env, &update->dur_buf,
+                                  lu_object_fid(&dt->do_lu), key,
+                                  update->dur_batchid);
        return rc;
 }
 
@@ -1071,13 +1021,9 @@ static ssize_t osp_md_declare_write(const struct lu_env *env,
                                    loff_t pos, struct thandle *th)
 {
        struct dt_update_request  *update;
-       struct lu_fid             *fid;
-       int                       sizes[2] = {buf->lb_len, sizeof(pos)};
-       const char                *bufs[2] = {(char *)buf->lb_buf,
-                                             (char *)&pos};
        ssize_t                   rc;
 
-       update = out_find_create_update_loc(th, dt);
+       update = dt_update_request_find_or_create(th, dt);
        if (IS_ERR(update)) {
                CERROR("%s: Get OSP update buf failed: rc = %d\n",
                       dt->do_lu.lo_dev->ld_obd->obd_name,
@@ -1085,11 +1031,8 @@ static ssize_t osp_md_declare_write(const struct lu_env *env,
                return PTR_ERR(update);
        }
 
-       pos = cpu_to_le64(pos);
-       bufs[1] = (char *)&pos;
-       fid = (struct lu_fid *)lu_object_fid(&dt->do_lu);
-       rc = out_insert_update(env, update, OUT_WRITE, fid,
-                              ARRAY_SIZE(sizes), sizes, bufs);
+       rc = out_write_pack(env, &update->dur_buf, lu_object_fid(&dt->do_lu),
+                           buf, pos, update->dur_batchid);
 
        return rc;
 
@@ -1117,6 +1060,7 @@ static ssize_t osp_md_write(const struct lu_env *env, struct dt_object *dt,
                            struct thandle *handle,
                            struct lustre_capa *capa, int ignore_quota)
 {
+       *pos += buf->lb_len;
        return buf->lb_len;
 }