]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/caif/cfveil.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux...
[karo-tx-linux.git] / net / caif / cfveil.c
index c3b1dec4acf648777409bbac36ea9b659e84f03a..910ab0661f66dc9ac24da2b3ab4ae41ad4ff2ea3 100644 (file)
@@ -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;
 }