dt_obd_name(dt), reply, index, 0);
object_update_result_insert(reply, NULL, 0, index, 0);
- return;
}
typedef void (*out_reconstruct_t)(const struct lu_env *env,
RETURN(-ENOENT);
}
- dt_read_lock(env, obj, MOR_TGT_CHILD);
+ dt_read_lock(env, obj, DT_TGT_CHILD);
rc = dt_attr_get(env, obj, la);
if (rc)
GOTO(out_unlock, rc);
else
lbuf->lb_buf = update_result->our_data;
- dt_read_lock(env, obj, MOR_TGT_CHILD);
+ dt_read_lock(env, obj, DT_TGT_CHILD);
rc = dt_xattr_get(env, obj, lbuf, name);
dt_read_unlock(env, obj);
if (rc <= 0) {
if (lbuf->lb_len == 0)
lbuf->lb_buf = 0;
- dt_read_lock(env, obj, MOR_TGT_CHILD);
+ dt_read_lock(env, obj, DT_TGT_CHILD);
rc = dt_xattr_list(env, obj, lbuf);
dt_read_unlock(env, obj);
if (rc <= 0) {
RETURN(PTR_ERR(name));
}
- dt_read_lock(env, obj, MOR_TGT_CHILD);
+ dt_read_lock(env, obj, DT_TGT_CHILD);
if (!dt_try_as_dir(env, obj))
GOTO(out_unlock, rc = -ENOTDIR);
orr = (struct out_read_reply *)update_result->our_data;
nbufs = (size + OUT_BULK_BUFFER_SIZE - 1) / OUT_BULK_BUFFER_SIZE;
- OBD_ALLOC(rdbuf, sizeof(struct lu_rdbuf) +
- nbufs * sizeof(rdbuf->rb_bufs[0]));
+ OBD_ALLOC(rdbuf, sizeof(*rdbuf) + nbufs * sizeof(rdbuf->rb_bufs[0]));
if (rdbuf == NULL)
GOTO(out, rc = -ENOMEM);
GOTO(out_free, rc = -ENOMEM);
rdbuf->rb_bufs[i].lb_len = read_size;
- dt_read_lock(env, obj, MOR_TGT_CHILD);
+ dt_read_lock(env, obj, DT_TGT_CHILD);
rc = dt_read(env, obj, &rdbuf->rb_bufs[i], &pos);
dt_read_unlock(env, obj);
rdbuf->rb_bufs[i].lb_len);
}
}
- OBD_FREE(rdbuf, sizeof(struct lu_rdbuf) +
+ OBD_FREE(rdbuf, sizeof(*rdbuf) +
nbufs * sizeof(rdbuf->rb_bufs[0]));
out:
/* Insert read buffer */
struct object_update *update;
struct object_update_reply *reply;
struct ptlrpc_bulk_desc *desc = NULL;
- struct l_wait_info lwi;
void **update_bufs;
int current_batchid = -1;
__u32 update_buf_count;
update_bufs[0] = ouh->ouh_inline_data;
} else {
struct out_update_buffer *tmp;
+ int page_count = 0;
oub = req_capsule_client_get(pill, &RMF_OUT_UPDATE_BUF);
if (oub == NULL)
GOTO(out_free, rc = err_serious(-EPROTO));
- desc = ptlrpc_prep_bulk_exp(pill->rc_req, update_buf_count,
+ for (i = 0; i < update_buf_count; i++)
+ /* First *and* last might be partial pages, hence +1 */
+ page_count += DIV_ROUND_UP(oub[i].oub_size,
+ PAGE_SIZE) + 1;
+
+ desc = ptlrpc_prep_bulk_exp(pill->rc_req, page_count,
PTLRPC_BULK_OPS_COUNT,
PTLRPC_BULK_GET_SINK |
- PTLRPC_BULK_BUF_KVEC,
+ PTLRPC_BULK_BUF_KIOV,
MDS_BULK_PORTAL,
- &ptlrpc_bulk_kvec_ops);
+ &ptlrpc_bulk_kiov_nopin_ops);
if (desc == NULL)
GOTO(out_free, rc = err_serious(-ENOMEM));
if (rc != 0)
GOTO(out_free, rc = err_serious(rc));
- rc = target_bulk_io(pill->rc_req->rq_export, desc, &lwi);
+ rc = target_bulk_io(pill->rc_req->rq_export, desc);
if (rc < 0)
GOTO(out_free, rc = err_serious(rc));
}