diff options
Diffstat (limited to 'net/caif/cfvidl.c')
| -rw-r--r-- | net/caif/cfvidl.c | 20 | 
1 files changed, 9 insertions, 11 deletions
diff --git a/net/caif/cfvidl.c b/net/caif/cfvidl.c index bf6fef2a0ef..b3b110e8a35 100644 --- a/net/caif/cfvidl.c +++ b/net/caif/cfvidl.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   */ @@ -21,14 +21,11 @@ static int cfvidl_transmit(struct cflayer *layr, struct cfpkt *pkt);  struct cflayer *cfvidl_create(u8 channel_id, struct dev_info *dev_info)  { -	struct cfsrvl *vid = kmalloc(sizeof(struct cfsrvl), GFP_ATOMIC); -	if (!vid) { -		pr_warn("Out of memory\n"); +	struct cfsrvl *vid = kzalloc(sizeof(struct cfsrvl), GFP_ATOMIC); +	if (!vid)  		return NULL; -	}  	caif_assert(offsetof(struct cfsrvl, layer) == 0); -	memset(vid, 0, sizeof(struct cfsrvl));  	cfsrvl_init(vid, channel_id, dev_info, false);  	vid->layer.receive = cfvidl_receive;  	vid->layer.transmit = cfvidl_transmit; @@ -53,15 +50,16 @@ static int cfvidl_transmit(struct cflayer *layr, struct cfpkt *pkt)  	struct caif_payload_info *info;  	u32 videoheader = 0;  	int ret; -	if (!cfsrvl_ready(service, &ret)) + +	if (!cfsrvl_ready(service, &ret)) { +		cfpkt_destroy(pkt);  		return ret; +	} +  	cfpkt_add_head(pkt, &videoheader, 4);  	/* Add info for MUX-layer to route the packet out */  	info = cfpkt_info(pkt);  	info->channel_id = service->layer.id;  	info->dev_info = &service->dev_info; -	ret = layr->dn->transmit(layr->dn, pkt); -	if (ret < 0) -		cfpkt_extr_head(pkt, &videoheader, 4); -	return ret; +	return layr->dn->transmit(layr->dn, pkt);  }  | 
