Loading net/qrtr/qrtr.c +21 −4 Original line number Diff line number Diff line Loading @@ -674,6 +674,8 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) struct sk_buff *skb; struct qrtr_cb *cb; unsigned int size; int err = -ENOMEM; int frag = false; unsigned int ver; size_t hdrlen; Loading @@ -681,8 +683,14 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) return -EINVAL; skb = netdev_alloc_skb(NULL, len); if (!skb) if (!skb) { skb = alloc_skb_with_frags(0, len, 0, &err, GFP_ATOMIC); if (!skb) { pr_err("%s memory allocation failed\n", __func__); return -ENOMEM; } frag = true; } cb = (struct qrtr_cb *)skb->cb; Loading Loading @@ -736,7 +744,13 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) cb->type != QRTR_TYPE_RESUME_TX) goto err; if (frag) { skb->data_len = size; skb->len = size; skb_store_bits(skb, 0, data + hdrlen, size); } else { skb_put_data(skb, data + hdrlen, size); } qrtr_log_rx_msg(node, skb); skb_queue_tail(&node->rx_queue, skb); Loading Loading @@ -891,8 +905,11 @@ static void qrtr_node_rx_work(struct kthread_work *work) if (!ipc) { kfree_skb(skb); } else { if (sock_queue_rcv_skb(&ipc->sk, skb)) if (sock_queue_rcv_skb(&ipc->sk, skb)) { pr_err("%s qrtr pkt dropped flow[%d]\n", __func__, cb->confirm_rx); kfree_skb(skb); } qrtr_port_put(ipc); } Loading Loading
net/qrtr/qrtr.c +21 −4 Original line number Diff line number Diff line Loading @@ -674,6 +674,8 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) struct sk_buff *skb; struct qrtr_cb *cb; unsigned int size; int err = -ENOMEM; int frag = false; unsigned int ver; size_t hdrlen; Loading @@ -681,8 +683,14 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) return -EINVAL; skb = netdev_alloc_skb(NULL, len); if (!skb) if (!skb) { skb = alloc_skb_with_frags(0, len, 0, &err, GFP_ATOMIC); if (!skb) { pr_err("%s memory allocation failed\n", __func__); return -ENOMEM; } frag = true; } cb = (struct qrtr_cb *)skb->cb; Loading Loading @@ -736,7 +744,13 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len) cb->type != QRTR_TYPE_RESUME_TX) goto err; if (frag) { skb->data_len = size; skb->len = size; skb_store_bits(skb, 0, data + hdrlen, size); } else { skb_put_data(skb, data + hdrlen, size); } qrtr_log_rx_msg(node, skb); skb_queue_tail(&node->rx_queue, skb); Loading Loading @@ -891,8 +905,11 @@ static void qrtr_node_rx_work(struct kthread_work *work) if (!ipc) { kfree_skb(skb); } else { if (sock_queue_rcv_skb(&ipc->sk, skb)) if (sock_queue_rcv_skb(&ipc->sk, skb)) { pr_err("%s qrtr pkt dropped flow[%d]\n", __func__, cb->confirm_rx); kfree_skb(skb); } qrtr_port_put(ipc); } Loading