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,
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);
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 */
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));