diff options
Diffstat (limited to 'net/caif/cfveil.c')
| -rw-r--r-- | net/caif/cfveil.c | 22 | 
1 files changed, 10 insertions, 12 deletions
diff --git a/net/caif/cfveil.c b/net/caif/cfveil.c index 3b425b189a9..262224581ef 100644 --- a/net/caif/cfveil.c +++ b/net/caif/cfveil.c @@ -1,6 +1,6 @@  /*   * Copyright (C) ST-Ericsson AB 2010 - * Author:	Sjur Brendeland/sjur.brandeland@stericsson.com + * Author:	Sjur Brendeland   * License terms: GNU General Public License (GPL) version 2   */ @@ -17,7 +17,7 @@  #define VEI_FLOW_OFF 0x81  #define VEI_FLOW_ON  0x80  #define VEI_SET_PIN  0x82 -#define VEI_CTRL_PKT_SIZE 1 +  #define container_obj(layr) container_of(layr, struct cfsrvl, layer)  static int cfvei_receive(struct cflayer *layr, struct cfpkt *pkt); @@ -25,13 +25,10 @@ static int cfvei_transmit(struct cflayer *layr, struct cfpkt *pkt);  struct cflayer *cfvei_create(u8 channel_id, struct dev_info *dev_info)  { -	struct cfsrvl *vei = kmalloc(sizeof(struct cfsrvl), GFP_ATOMIC); -	if (!vei) { -		pr_warn("Out of memory\n"); +	struct cfsrvl *vei = kzalloc(sizeof(struct cfsrvl), GFP_ATOMIC); +	if (!vei)  		return NULL; -	}  	caif_assert(offsetof(struct cfsrvl, layer) == 0); -	memset(vei, 0, sizeof(struct cfsrvl));  	cfsrvl_init(vei, channel_id, dev_info, true);  	vei->layer.receive = cfvei_receive;  	vei->layer.transmit = cfvei_transmit; @@ -82,13 +79,14 @@ static int cfvei_transmit(struct cflayer *layr, struct cfpkt *pkt)  	int ret;  	struct cfsrvl *service = container_obj(layr);  	if (!cfsrvl_ready(service, &ret)) -		return ret; +		goto err;  	caif_assert(layr->dn != NULL);  	caif_assert(layr->dn->transmit != NULL);  	if (cfpkt_add_head(pkt, &tmp, 1) < 0) {  		pr_err("Packet is erroneous!\n"); -		return -EPROTO; +		ret = -EPROTO; +		goto err;  	}  	/* Add info-> for MUX-layer to route the packet out. */ @@ -96,8 +94,8 @@ static int cfvei_transmit(struct cflayer *layr, struct cfpkt *pkt)  	info->channel_id = service->layer.id;  	info->hdr_len = 1;  	info->dev_info = &service->dev_info; -	ret = layr->dn->transmit(layr->dn, pkt); -	if (ret < 0) -		cfpkt_extr_head(pkt, &tmp, 1); +	return layr->dn->transmit(layr->dn, pkt); +err: +	cfpkt_destroy(pkt);  	return ret;  }  | 
