/** * Prepare bulk descriptor for specified incoming request \a req that * can fit \a nfrags * pages. \a type is bulk type. \a portal is where * the bulk to be sent. Used on server-side after request was already * received. * Returns pointer to newly allocatrd initialized bulk descriptor or NULL on * error. */ struct ptlrpc_bulk_desc *ptlrpc_prep_bulk_exp(struct ptlrpc_request *req, unsigned nfrags, unsigned max_brw, unsigned int type, unsigned portal, const struct ptlrpc_bulk_frag_ops *ops) { struct obd_export *exp = req->rq_export; struct ptlrpc_bulk_desc *desc; ENTRY; LASSERT(ptlrpc_is_bulk_op_active(type)); desc = ptlrpc_new_bulk(nfrags, max_brw, type, portal, ops); if (desc == NULL) RETURN(NULL); desc->bd_export = class_export_get(exp); desc->bd_req = req; desc->bd_cbid.cbid_fn = server_bulk_callback; desc->bd_cbid.cbid_arg = desc; /* NB we don't assign rq_bulk here; server-side requests are * re-used, and the handler frees the bulk desc explicitly. */ return desc; }
/** * Prepare bulk descriptor for specified incoming request \a req that * can fit \a npages * pages. \a type is bulk type. \a portal is where * the bulk to be sent. Used on server-side after request was already * received. * Returns pointer to newly allocatrd initialized bulk descriptor or NULL on * error. */ struct ptlrpc_bulk_desc *ptlrpc_prep_bulk_exp(struct ptlrpc_request *req, unsigned npages, unsigned max_brw, unsigned type, unsigned portal) { struct obd_export *exp = req->rq_export; struct ptlrpc_bulk_desc *desc; ENTRY; LASSERT(type == BULK_PUT_SOURCE || type == BULK_GET_SINK); desc = ptlrpc_new_bulk(npages, max_brw, type, portal); if (desc == NULL) RETURN(NULL); desc->bd_export = class_export_get(exp); desc->bd_req = req; desc->bd_cbid.cbid_fn = server_bulk_callback; desc->bd_cbid.cbid_arg = desc; /* NB we don't assign rq_bulk here; server-side requests are * re-used, and the handler frees the bulk desc explicitly. */ return desc; }