list_for_each_entry(tsu, &tsi->tsi_units, tsu_list) {
bulk = srpc_alloc_bulk(lnet_cpt_of_nid(tsu->tsu_dest.nid, NULL),
- npg);
+ off, npg, len, opc == LST_BRW_READ);
if (bulk == NULL) {
brw_client_fini(tsi);
return -ENOMEM;
}
- srpc_init_bulk(bulk, off, npg, len, opc == LST_BRW_READ);
tsu->tsu_private = bulk;
}
CDEBUG(D_NET, "Transferred %d pages bulk data %s %s\n",
blk->bk_niov, blk->bk_sink ? "from" : "to",
libcfs_id2str(rpc->srpc_peer));
+
+ sfw_free_pages(rpc);
}
static int
struct srpc_brw_reply *reply = &replymsg->msg_body.brw_reply;
struct srpc_brw_reqst *reqst = &reqstmsg->msg_body.brw_reqst;
int npg;
+ int rc;
LASSERT (sv->sv_id == SRPC_SERVICE_BRW);
return 0;
}
- srpc_init_bulk(rpc->srpc_bulk, 0, npg, reqst->brw_len,
- reqst->brw_rw == LST_BRW_WRITE);
+ rc = sfw_alloc_pages(rpc, rpc->srpc_scd->scd_cpt, npg,
+ reqst->brw_len,
+ reqst->brw_rw == LST_BRW_WRITE);
+ if (rc != 0)
+ return rc;
- if (reqst->brw_rw == LST_BRW_READ)
- brw_fill_bulk(rpc->srpc_bulk, reqst->brw_flags, BRW_MAGIC);
- else
- brw_fill_bulk(rpc->srpc_bulk, reqst->brw_flags, BRW_POISON);
+ if (reqst->brw_rw == LST_BRW_READ)
+ brw_fill_bulk(rpc->srpc_bulk, reqst->brw_flags, BRW_MAGIC);
+ else
+ brw_fill_bulk(rpc->srpc_bulk, reqst->brw_flags, BRW_POISON);
- return 0;
+ return 0;
}
-static int
-brw_srpc_init(struct srpc_server_rpc *rpc, int cpt)
-{
- /* just alloc a maximal size - actual values will be adjusted later */
- rpc->srpc_bulk = srpc_alloc_bulk(cpt, LNET_MAX_IOV);
- if (rpc->srpc_bulk == NULL)
- return -ENOMEM;
-
- srpc_init_bulk(rpc->srpc_bulk, 0, LNET_MAX_IOV, 0, 0);
+struct sfw_test_client_ops brw_test_client;
- return 0;
-}
-
-static void
-brw_srpc_fini(struct srpc_server_rpc *rpc)
+void brw_init_test_client(void)
{
- /* server RPC have just MAX_IOV size */
- srpc_init_bulk(rpc->srpc_bulk, 0, LNET_MAX_IOV, 0, 0);
-
- srpc_free_bulk(rpc->srpc_bulk);
- rpc->srpc_bulk = NULL;
-}
-
-struct sfw_test_client_ops brw_test_client = {
- .tso_init = brw_client_init,
- .tso_fini = brw_client_fini,
- .tso_prep_rpc = brw_client_prep_rpc,
- .tso_done_rpc = brw_client_done_rpc,
+ brw_test_client.tso_init = brw_client_init;
+ brw_test_client.tso_fini = brw_client_fini;
+ brw_test_client.tso_prep_rpc = brw_client_prep_rpc;
+ brw_test_client.tso_done_rpc = brw_client_done_rpc;
};
-struct srpc_service brw_test_service = {
- .sv_id = SRPC_SERVICE_BRW,
- .sv_name = "brw_test",
- .sv_handler = brw_server_handle,
- .sv_bulk_ready = brw_bulk_ready,
-
- .sv_srpc_init = brw_srpc_init,
- .sv_srpc_fini = brw_srpc_fini,
-};
+struct srpc_service brw_test_service;
void brw_init_test_service(void)
{
- unsigned long cache_size = cfs_totalram_pages() >> 1;
-
- /* brw prealloc cache should don't eat more than half memory */
- cache_size /= LNET_MAX_IOV;
-
+ brw_test_service.sv_id = SRPC_SERVICE_BRW;
+ brw_test_service.sv_name = "brw_test";
+ brw_test_service.sv_handler = brw_server_handle;
+ brw_test_service.sv_bulk_ready = brw_bulk_ready;
brw_test_service.sv_wi_total = brw_srv_workitems;
-
- if (brw_test_service.sv_wi_total > cache_size)
- brw_test_service.sv_wi_total = cache_size;
}