static int alloc_gbuf_data(struct gbuf *gbuf, unsigned int size,
gfp_t gfp_mask)
{
- struct gb_connection *connection = gbuf->operation->connection;
u32 cport_reserve = gbuf->dest_cport_id == CPORT_ID_BAD ? 0 : 1;
u8 *buffer;
if (!buffer)
return -ENOMEM;
- /*
- * we will encode the cport number in the first byte of the buffer, so
- * set the second byte to be the "transfer buffer"
- */
- if (connection->interface_cport_id > (u16)U8_MAX) {
- pr_err("gbuf->interface_cport_id (%hd) is out of range!\n",
- connection->interface_cport_id);
- kfree(buffer);
- return -EINVAL;
- }
-
/* Insert the cport id for outbound buffers */
- if (cport_reserve)
- *buffer++ = connection->interface_cport_id;
+ if (cport_reserve) {
+ if (gbuf->dest_cport_id > (u16)U8_MAX) {
+ pr_err("gbuf->dest_cport_id (%hd) is out of range!\n",
+ gbuf->dest_cport_id);
+ kfree(buffer);
+ return -EINVAL;
+ }
+ *buffer++ = gbuf->dest_cport_id;
+ }
gbuf->transfer_buffer = buffer;
gbuf->transfer_buffer_length = size;