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,
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.
* 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);
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",
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,
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;
}
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,
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;
}
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,
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;
}
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;
* 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);
if (req != NULL)
ptlrpc_req_finished(req);
- out_destroy_update_req(update);
+ dt_update_request_destroy(update);
return rc;
}
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,
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;
}
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,
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;
}
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,
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;
struct thandle *handle,
struct lustre_capa *capa, int ignore_quota)
{
+ *pos += buf->lb_len;
return buf->lb_len;
}