bulk = ptlrpc_prep_bulk(connection);
if (bulk == NULL)
- return -ENOMEM;
+ RETURN(-ENOMEM);
bulk->b_buf = (void *)(unsigned long)src->addr;
bulk->b_buflen = src->len;
rc = ptlrpc_send_bulk(bulk, OSC_BULK_PORTAL);
if (rc != 0) {
CERROR("send_bulk failed: %d\n", rc);
+ ptlrpc_free_bulk(bulk);
LBUG();
- return rc;
+ RETURN(rc);
}
wait_event_interruptible(bulk->b_waitq,
ptlrpc_check_bulk_sent(bulk));
- if (bulk->b_flags == PTL_RPC_INTR) {
- EXIT;
- /* FIXME: hey hey, we leak here. */
- return -EINTR;
+ if (bulk->b_flags & PTL_RPC_FL_INTR) {
+ ptlrpc_free_bulk(bulk);
+ RETURN(-EINTR);
}
- OBD_FREE(bulk, sizeof(*bulk));
+ ptlrpc_free_bulk(bulk);
}
return 0;