提交 badff6d0 编写于 作者: A Arnaldo Carvalho de Melo 提交者: David S. Miller

[SK_BUFF]: Introduce skb_reset_transport_header(skb)

For the common, open coded 'skb->h.raw = skb->data' operation, so that we can
later turn skb->h.raw into a offset, reducing the size of struct sk_buff in
64bit land while possibly keeping it as a pointer on 32bit.

This one touches just the most simple cases:

skb->h.raw = skb->data;
skb->h.raw = {skb_push|[__]skb_pull}()

The next ones will handle the slightly more "complex" cases.
Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 0660e03f
...@@ -507,7 +507,7 @@ static void send_mpa_req(struct iwch_ep *ep, struct sk_buff *skb) ...@@ -507,7 +507,7 @@ static void send_mpa_req(struct iwch_ep *ep, struct sk_buff *skb)
*/ */
skb_get(skb); skb_get(skb);
set_arp_failure_handler(skb, arp_failure_discard); set_arp_failure_handler(skb, arp_failure_discard);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
len = skb->len; len = skb->len;
req = (struct tx_data_wr *) skb_push(skb, sizeof(*req)); req = (struct tx_data_wr *) skb_push(skb, sizeof(*req));
req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA)); req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA));
...@@ -559,7 +559,7 @@ static int send_mpa_reject(struct iwch_ep *ep, const void *pdata, u8 plen) ...@@ -559,7 +559,7 @@ static int send_mpa_reject(struct iwch_ep *ep, const void *pdata, u8 plen)
skb_get(skb); skb_get(skb);
skb->priority = CPL_PRIORITY_DATA; skb->priority = CPL_PRIORITY_DATA;
set_arp_failure_handler(skb, arp_failure_discard); set_arp_failure_handler(skb, arp_failure_discard);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
req = (struct tx_data_wr *) skb_push(skb, sizeof(*req)); req = (struct tx_data_wr *) skb_push(skb, sizeof(*req));
req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA)); req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA));
req->wr_lo = htonl(V_WR_TID(ep->hwtid)); req->wr_lo = htonl(V_WR_TID(ep->hwtid));
...@@ -610,7 +610,7 @@ static int send_mpa_reply(struct iwch_ep *ep, const void *pdata, u8 plen) ...@@ -610,7 +610,7 @@ static int send_mpa_reply(struct iwch_ep *ep, const void *pdata, u8 plen)
*/ */
skb_get(skb); skb_get(skb);
set_arp_failure_handler(skb, arp_failure_discard); set_arp_failure_handler(skb, arp_failure_discard);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
len = skb->len; len = skb->len;
req = (struct tx_data_wr *) skb_push(skb, sizeof(*req)); req = (struct tx_data_wr *) skb_push(skb, sizeof(*req));
req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA)); req->wr_hi = htonl(V_WR_OP(FW_WROPCODE_OFLD_TX_DATA));
......
...@@ -855,7 +855,7 @@ static void cops_rx(struct net_device *dev) ...@@ -855,7 +855,7 @@ static void cops_rx(struct net_device *dev)
skb_reset_mac_header(skb); /* Point to entire packet. */ skb_reset_mac_header(skb); /* Point to entire packet. */
skb_pull(skb,3); skb_pull(skb,3);
skb->h.raw = skb->data; /* Point to data (Skip header). */ skb_reset_transport_header(skb); /* Point to data (Skip header). */
/* Update the counters. */ /* Update the counters. */
lp->stats.rx_packets++; lp->stats.rx_packets++;
......
...@@ -776,7 +776,7 @@ static int sendup_buffer (struct net_device *dev) ...@@ -776,7 +776,7 @@ static int sendup_buffer (struct net_device *dev)
/* copy ddp(s,e)hdr + contents */ /* copy ddp(s,e)hdr + contents */
memcpy(skb->data,(void*)ltdmabuf,len); memcpy(skb->data,(void*)ltdmabuf,len);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
stats->rx_packets++; stats->rx_packets++;
stats->rx_bytes+=skb->len; stats->rx_bytes+=skb->len;
...@@ -923,7 +923,7 @@ static int ltpc_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -923,7 +923,7 @@ static int ltpc_xmit(struct sk_buff *skb, struct net_device *dev)
cbuf.laptype = skb->data[2]; cbuf.laptype = skb->data[2];
skb_pull(skb,3); /* skip past LLAP header */ skb_pull(skb,3); /* skip past LLAP header */
cbuf.length = skb->len; /* this is host order */ cbuf.length = skb->len; /* this is host order */
skb->h.raw=skb->data; skb_reset_transport_header(skb);
if(debug & DEBUG_UPPER) { if(debug & DEBUG_UPPER) {
printk("command "); printk("command ");
......
...@@ -1622,7 +1622,7 @@ static inline int rx_offload(struct t3cdev *tdev, struct sge_rspq *rq, ...@@ -1622,7 +1622,7 @@ static inline int rx_offload(struct t3cdev *tdev, struct sge_rspq *rq,
rq->offload_pkts++; rq->offload_pkts++;
skb_reset_mac_header(skb); skb_reset_mac_header(skb);
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
if (rq->polling) { if (rq->polling) {
rx_gather[gather_idx++] = skb; rx_gather[gather_idx++] = skb;
......
...@@ -265,9 +265,9 @@ static inline struct dccp_hdr *dccp_hdr(const struct sk_buff *skb) ...@@ -265,9 +265,9 @@ static inline struct dccp_hdr *dccp_hdr(const struct sk_buff *skb)
static inline struct dccp_hdr *dccp_zeroed_hdr(struct sk_buff *skb, int headlen) static inline struct dccp_hdr *dccp_zeroed_hdr(struct sk_buff *skb, int headlen)
{ {
skb->h.raw = skb_push(skb, headlen); skb_push(skb, headlen);
memset(skb->h.raw, 0, headlen); skb_reset_transport_header(skb);
return dccp_hdr(skb); return memset(skb->h.raw, 0, headlen);
} }
static inline struct dccp_hdr_ext *dccp_hdrx(const struct sk_buff *skb) static inline struct dccp_hdr_ext *dccp_hdrx(const struct sk_buff *skb)
......
...@@ -957,6 +957,11 @@ static inline void skb_reserve(struct sk_buff *skb, int len) ...@@ -957,6 +957,11 @@ static inline void skb_reserve(struct sk_buff *skb, int len)
skb->tail += len; skb->tail += len;
} }
static inline void skb_reset_transport_header(struct sk_buff *skb)
{
skb->h.raw = skb->data;
}
static inline unsigned char *skb_network_header(const struct sk_buff *skb) static inline unsigned char *skb_network_header(const struct sk_buff *skb)
{ {
return skb->nh.raw; return skb->nh.raw;
......
...@@ -119,7 +119,7 @@ static void __aarp_send_query(struct aarp_entry *a) ...@@ -119,7 +119,7 @@ static void __aarp_send_query(struct aarp_entry *a)
/* Set up the buffer */ /* Set up the buffer */
skb_reserve(skb, dev->hard_header_len + aarp_dl->header_length); skb_reserve(skb, dev->hard_header_len + aarp_dl->header_length);
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb_put(skb, sizeof(*eah)); skb_put(skb, sizeof(*eah));
skb->protocol = htons(ETH_P_ATALK); skb->protocol = htons(ETH_P_ATALK);
skb->dev = dev; skb->dev = dev;
...@@ -166,7 +166,7 @@ static void aarp_send_reply(struct net_device *dev, struct atalk_addr *us, ...@@ -166,7 +166,7 @@ static void aarp_send_reply(struct net_device *dev, struct atalk_addr *us,
/* Set up the buffer */ /* Set up the buffer */
skb_reserve(skb, dev->hard_header_len + aarp_dl->header_length); skb_reserve(skb, dev->hard_header_len + aarp_dl->header_length);
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb_put(skb, sizeof(*eah)); skb_put(skb, sizeof(*eah));
skb->protocol = htons(ETH_P_ATALK); skb->protocol = htons(ETH_P_ATALK);
skb->dev = dev; skb->dev = dev;
...@@ -217,7 +217,7 @@ static void aarp_send_probe(struct net_device *dev, struct atalk_addr *us) ...@@ -217,7 +217,7 @@ static void aarp_send_probe(struct net_device *dev, struct atalk_addr *us)
/* Set up the buffer */ /* Set up the buffer */
skb_reserve(skb, dev->hard_header_len + aarp_dl->header_length); skb_reserve(skb, dev->hard_header_len + aarp_dl->header_length);
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb_put(skb, sizeof(*eah)); skb_put(skb, sizeof(*eah));
skb->protocol = htons(ETH_P_ATALK); skb->protocol = htons(ETH_P_ATALK);
skb->dev = dev; skb->dev = dev;
......
...@@ -1275,7 +1275,7 @@ static int handle_ip_over_ddp(struct sk_buff *skb) ...@@ -1275,7 +1275,7 @@ static int handle_ip_over_ddp(struct sk_buff *skb)
skb->protocol = htons(ETH_P_IP); skb->protocol = htons(ETH_P_IP);
skb_pull(skb, 13); skb_pull(skb, 13);
skb->dev = dev; skb->dev = dev;
skb->h.raw = skb->data; skb_reset_transport_header(skb);
stats = dev->priv; stats = dev->priv;
stats->rx_packets++; stats->rx_packets++;
...@@ -1522,7 +1522,7 @@ static int ltalk_rcv(struct sk_buff *skb, struct net_device *dev, ...@@ -1522,7 +1522,7 @@ static int ltalk_rcv(struct sk_buff *skb, struct net_device *dev,
/* Non routable, so force a drop if we slip up later */ /* Non routable, so force a drop if we slip up later */
ddp->deh_len_hops = htons(skb->len + (DDP_MAXHOPS << 10)); ddp->deh_len_hops = htons(skb->len + (DDP_MAXHOPS << 10));
} }
skb->h.raw = skb->data; skb_reset_transport_header(skb);
return atalk_rcv(skb, dev, pt, orig_dev); return atalk_rcv(skb, dev, pt, orig_dev);
freeit: freeit:
......
...@@ -1631,8 +1631,8 @@ static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock, ...@@ -1631,8 +1631,8 @@ static int ax25_recvmsg(struct kiocb *iocb, struct socket *sock,
if (!ax25_sk(sk)->pidincl) if (!ax25_sk(sk)->pidincl)
skb_pull(skb, 1); /* Remove PID */ skb_pull(skb, 1); /* Remove PID */
skb->h.raw = skb->data; skb_reset_transport_header(skb);
copied = skb->len; copied = skb->len;
if (copied > size) { if (copied > size) {
copied = size; copied = size;
......
...@@ -62,7 +62,7 @@ static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb) ...@@ -62,7 +62,7 @@ static int ax25_rx_fragment(ax25_cb *ax25, struct sk_buff *skb)
skbn->dev = ax25->ax25_dev->dev; skbn->dev = ax25->ax25_dev->dev;
skb_reset_network_header(skbn); skb_reset_network_header(skbn);
skbn->h.raw = skbn->data; skb_reset_transport_header(skbn);
/* Copy data from the fragments */ /* Copy data from the fragments */
while ((skbo = skb_dequeue(&ax25->frag_queue)) != NULL) { while ((skbo = skb_dequeue(&ax25->frag_queue)) != NULL) {
...@@ -196,7 +196,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev, ...@@ -196,7 +196,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
* Process the AX.25/LAPB frame. * Process the AX.25/LAPB frame.
*/ */
skb->h.raw = skb->data; skb_reset_transport_header(skb);
if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL) { if ((ax25_dev = ax25_dev_ax25dev(dev)) == NULL) {
kfree_skb(skb); kfree_skb(skb);
...@@ -246,7 +246,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev, ...@@ -246,7 +246,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
switch (skb->data[1]) { switch (skb->data[1]) {
case AX25_P_IP: case AX25_P_IP:
skb_pull(skb,2); /* drop PID/CTRL */ skb_pull(skb,2); /* drop PID/CTRL */
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->dev = dev; skb->dev = dev;
skb->pkt_type = PACKET_HOST; skb->pkt_type = PACKET_HOST;
...@@ -256,7 +256,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev, ...@@ -256,7 +256,7 @@ static int ax25_rcv(struct sk_buff *skb, struct net_device *dev,
case AX25_P_ARP: case AX25_P_ARP:
skb_pull(skb,2); skb_pull(skb,2);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->dev = dev; skb->dev = dev;
skb->pkt_type = PACKET_HOST; skb->pkt_type = PACKET_HOST;
......
...@@ -221,7 +221,7 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock, ...@@ -221,7 +221,7 @@ int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
copied = len; copied = len;
} }
skb->h.raw = skb->data; skb_reset_transport_header(skb);
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
skb_free_datagram(sk, skb); skb_free_datagram(sk, skb);
......
...@@ -1074,11 +1074,11 @@ static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags) ...@@ -1074,11 +1074,11 @@ static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
struct hci_acl_hdr *hdr; struct hci_acl_hdr *hdr;
int len = skb->len; int len = skb->len;
hdr = (struct hci_acl_hdr *) skb_push(skb, HCI_ACL_HDR_SIZE); skb_push(skb, HCI_ACL_HDR_SIZE);
skb_reset_transport_header(skb);
hdr = (struct hci_acl_hdr *)skb->h.raw;
hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags)); hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
hdr->dlen = cpu_to_le16(len); hdr->dlen = cpu_to_le16(len);
skb->h.raw = (void *) hdr;
} }
int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags) int hci_send_acl(struct hci_conn *conn, struct sk_buff *skb, __u16 flags)
...@@ -1143,7 +1143,8 @@ int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb) ...@@ -1143,7 +1143,8 @@ int hci_send_sco(struct hci_conn *conn, struct sk_buff *skb)
hdr.handle = cpu_to_le16(conn->handle); hdr.handle = cpu_to_le16(conn->handle);
hdr.dlen = skb->len; hdr.dlen = skb->len;
skb->h.raw = skb_push(skb, HCI_SCO_HDR_SIZE); skb_push(skb, HCI_SCO_HDR_SIZE);
skb_reset_transport_header(skb);
memcpy(skb->h.raw, &hdr, HCI_SCO_HDR_SIZE); memcpy(skb->h.raw, &hdr, HCI_SCO_HDR_SIZE);
skb->dev = (void *) hdev; skb->dev = (void *) hdev;
......
...@@ -375,7 +375,7 @@ static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock, ...@@ -375,7 +375,7 @@ static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
copied = len; copied = len;
} }
skb->h.raw = skb->data; skb_reset_transport_header(skb);
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
hci_sock_cmsg(sk, msg, skb); hci_sock_cmsg(sk, msg, skb);
......
...@@ -1773,7 +1773,7 @@ int netif_receive_skb(struct sk_buff *skb) ...@@ -1773,7 +1773,7 @@ int netif_receive_skb(struct sk_buff *skb)
__get_cpu_var(netdev_rx_stat).total++; __get_cpu_var(netdev_rx_stat).total++;
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb->mac_len = skb->nh.raw - skb->mac.raw; skb->mac_len = skb->nh.raw - skb->mac.raw;
pt_prev = NULL; pt_prev = NULL;
......
...@@ -362,7 +362,7 @@ static void arp_reply(struct sk_buff *skb) ...@@ -362,7 +362,7 @@ static void arp_reply(struct sk_buff *skb)
return; return;
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
arp = arp_hdr(skb); arp = arp_hdr(skb);
if ((arp->ar_hrd != htons(ARPHRD_ETHER) && if ((arp->ar_hrd != htons(ARPHRD_ETHER) &&
......
...@@ -725,7 +725,7 @@ static int dn_nsp_rx_packet(struct sk_buff *skb) ...@@ -725,7 +725,7 @@ static int dn_nsp_rx_packet(struct sk_buff *skb)
if (!pskb_may_pull(skb, 2)) if (!pskb_may_pull(skb, 2))
goto free_out; goto free_out;
skb->h.raw = skb->data; skb_reset_transport_header(skb);
cb->nsp_flags = *ptr++; cb->nsp_flags = *ptr++;
if (decnet_debug_level & 2) if (decnet_debug_level & 2)
......
...@@ -79,7 +79,7 @@ static void dn_nsp_send(struct sk_buff *skb) ...@@ -79,7 +79,7 @@ static void dn_nsp_send(struct sk_buff *skb)
struct dst_entry *dst; struct dst_entry *dst;
struct flowi fl; struct flowi fl;
skb->h.raw = skb->data; skb_reset_transport_header(skb);
scp->stamp = jiffies; scp->stamp = jiffies;
dst = sk_dst_check(sk, 0); dst = sk_dst_check(sk, 0);
......
...@@ -504,7 +504,7 @@ static int dn_route_rx_long(struct sk_buff *skb) ...@@ -504,7 +504,7 @@ static int dn_route_rx_long(struct sk_buff *skb)
goto drop_it; goto drop_it;
skb_pull(skb, 20); skb_pull(skb, 20);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
/* Destination info */ /* Destination info */
ptr += 2; ptr += 2;
...@@ -542,7 +542,7 @@ static int dn_route_rx_short(struct sk_buff *skb) ...@@ -542,7 +542,7 @@ static int dn_route_rx_short(struct sk_buff *skb)
goto drop_it; goto drop_it;
skb_pull(skb, 5); skb_pull(skb, 5);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
cb->dst = *(__le16 *)ptr; cb->dst = *(__le16 *)ptr;
ptr += 2; ptr += 2;
......
...@@ -1120,7 +1120,8 @@ static int inet_gso_send_check(struct sk_buff *skb) ...@@ -1120,7 +1120,8 @@ static int inet_gso_send_check(struct sk_buff *skb)
if (unlikely(!pskb_may_pull(skb, ihl))) if (unlikely(!pskb_may_pull(skb, ihl)))
goto out; goto out;
skb->h.raw = __skb_pull(skb, ihl); __skb_pull(skb, ihl);
skb_reset_transport_header(skb);
iph = ip_hdr(skb); iph = ip_hdr(skb);
proto = iph->protocol & (MAX_INET_PROTOS - 1); proto = iph->protocol & (MAX_INET_PROTOS - 1);
err = -EPROTONOSUPPORT; err = -EPROTONOSUPPORT;
...@@ -1163,7 +1164,8 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb, int features) ...@@ -1163,7 +1164,8 @@ static struct sk_buff *inet_gso_segment(struct sk_buff *skb, int features)
if (unlikely(!pskb_may_pull(skb, ihl))) if (unlikely(!pskb_may_pull(skb, ihl)))
goto out; goto out;
skb->h.raw = __skb_pull(skb, ihl); __skb_pull(skb, ihl);
skb_reset_transport_header(skb);
iph = ip_hdr(skb); iph = ip_hdr(skb);
id = ntohs(iph->id); id = ntohs(iph->id);
proto = iph->protocol & (MAX_INET_PROTOS - 1); proto = iph->protocol & (MAX_INET_PROTOS - 1);
......
...@@ -182,7 +182,8 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb) ...@@ -182,7 +182,8 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
} }
((struct iphdr*)work_buf)->protocol = ah->nexthdr; ((struct iphdr*)work_buf)->protocol = ah->nexthdr;
skb->nh.raw += ah_hlen; skb->nh.raw += ah_hlen;
skb->h.raw = memcpy(skb_network_header(skb), work_buf, ihl); memcpy(skb_network_header(skb), work_buf, ihl);
skb->h.raw = skb->nh.raw;
__skb_pull(skb, ah_hlen + ihl); __skb_pull(skb, ah_hlen + ihl);
return 0; return 0;
......
...@@ -201,7 +201,7 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb) ...@@ -201,7 +201,7 @@ static inline int ip_local_deliver_finish(struct sk_buff *skb)
__skb_pull(skb, ip_hdrlen(skb)); __skb_pull(skb, ip_hdrlen(skb));
/* Point into the IP datagram, just past the header. */ /* Point into the IP datagram, just past the header. */
skb->h.raw = skb->data; skb_reset_transport_header(skb);
rcu_read_lock(); rcu_read_lock();
{ {
......
...@@ -500,7 +500,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*)) ...@@ -500,7 +500,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*))
* before previous one went down. */ * before previous one went down. */
if (frag) { if (frag) {
frag->ip_summed = CHECKSUM_NONE; frag->ip_summed = CHECKSUM_NONE;
frag->h.raw = frag->data; skb_reset_transport_header(frag);
__skb_push(frag, hlen); __skb_push(frag, hlen);
skb_reset_network_header(frag); skb_reset_network_header(frag);
memcpy(skb_network_header(frag), iph, hlen); memcpy(skb_network_header(frag), iph, hlen);
......
...@@ -563,7 +563,7 @@ static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert) ...@@ -563,7 +563,7 @@ static int ipmr_cache_report(struct sk_buff *pkt, vifi_t vifi, int assert)
*/ */
skb_push(skb, sizeof(struct iphdr)); skb_push(skb, sizeof(struct iphdr));
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
msg = (struct igmpmsg *)skb_network_header(skb); msg = (struct igmpmsg *)skb_network_header(skb);
memcpy(msg, skb_network_header(pkt), sizeof(struct iphdr)); memcpy(msg, skb_network_header(pkt), sizeof(struct iphdr));
msg->im_msgtype = IGMPMSG_WHOLEPKT; msg->im_msgtype = IGMPMSG_WHOLEPKT;
......
...@@ -1002,7 +1002,8 @@ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb) ...@@ -1002,7 +1002,8 @@ static int udp_encap_rcv(struct sock * sk, struct sk_buff *skb)
* transport header to point to ESP. Keep UDP on the stack * transport header to point to ESP. Keep UDP on the stack
* for later. * for later.
*/ */
skb->h.raw = __skb_pull(skb, len); __skb_pull(skb, len);
skb_reset_transport_header(skb);
/* modify the protocol (it's ESP!) */ /* modify the protocol (it's ESP!) */
iph->protocol = IPPROTO_ESP; iph->protocol = IPPROTO_ESP;
......
...@@ -52,7 +52,7 @@ static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb) ...@@ -52,7 +52,7 @@ static int xfrm4_transport_input(struct xfrm_state *x, struct sk_buff *skb)
skb->nh.raw = skb->h.raw; skb->nh.raw = skb->h.raw;
} }
ip_hdr(skb)->tot_len = htons(skb->len + ihl); ip_hdr(skb)->tot_len = htons(skb->len + ihl);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
return 0; return 0;
} }
......
...@@ -101,7 +101,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt ...@@ -101,7 +101,7 @@ int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt
if (hdr->version != 6) if (hdr->version != 6)
goto err; goto err;
skb->h.raw = (u8 *)(hdr + 1); skb->h.raw = skb->nh.raw + sizeof(*hdr);
IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr); IP6CB(skb)->nhoff = offsetof(struct ipv6hdr, nexthdr);
pkt_len = ntohs(hdr->payload_len); pkt_len = ntohs(hdr->payload_len);
......
...@@ -654,7 +654,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) ...@@ -654,7 +654,7 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
* before previous one went down. */ * before previous one went down. */
if (frag) { if (frag) {
frag->ip_summed = CHECKSUM_NONE; frag->ip_summed = CHECKSUM_NONE;
frag->h.raw = frag->data; skb_reset_transport_header(frag);
fh = (struct frag_hdr*)__skb_push(frag, sizeof(struct frag_hdr)); fh = (struct frag_hdr*)__skb_push(frag, sizeof(struct frag_hdr));
__skb_push(frag, hlen); __skb_push(frag, hlen);
skb_reset_network_header(frag); skb_reset_network_header(frag);
...@@ -747,8 +747,8 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) ...@@ -747,8 +747,8 @@ static int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))
skb_reserve(frag, LL_RESERVED_SPACE(rt->u.dst.dev)); skb_reserve(frag, LL_RESERVED_SPACE(rt->u.dst.dev));
skb_put(frag, len + hlen + sizeof(struct frag_hdr)); skb_put(frag, len + hlen + sizeof(struct frag_hdr));
skb_reset_network_header(frag); skb_reset_network_header(frag);
fh = (struct frag_hdr*)(frag->data + hlen); fh = (struct frag_hdr *)(skb_network_header(frag) + hlen);
frag->h.raw = frag->data + hlen + sizeof(struct frag_hdr); frag->h.raw = frag->nh.raw + hlen + sizeof(struct frag_hdr);
/* /*
* Charge the memory for the fragment to any owner * Charge the memory for the fragment to any owner
...@@ -991,7 +991,7 @@ static inline int ip6_ufo_append_data(struct sock *sk, ...@@ -991,7 +991,7 @@ static inline int ip6_ufo_append_data(struct sock *sk,
skb_reset_network_header(skb); skb_reset_network_header(skb);
/* initialize protocol header pointer */ /* initialize protocol header pointer */
skb->h.raw = skb->data + fragheaderlen; skb->h.raw = skb->nh.raw + fragheaderlen;
skb->ip_summed = CHECKSUM_PARTIAL; skb->ip_summed = CHECKSUM_PARTIAL;
skb->csum = 0; skb->csum = 0;
......
...@@ -108,7 +108,7 @@ static int ipv6_gso_send_check(struct sk_buff *skb) ...@@ -108,7 +108,7 @@ static int ipv6_gso_send_check(struct sk_buff *skb)
rcu_read_lock(); rcu_read_lock();
ops = ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr); ops = ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr);
if (likely(ops && ops->gso_send_check)) { if (likely(ops && ops->gso_send_check)) {
skb->h.raw = skb->data; skb_reset_transport_header(skb);
err = ops->gso_send_check(skb); err = ops->gso_send_check(skb);
} }
rcu_read_unlock(); rcu_read_unlock();
...@@ -144,7 +144,7 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, int features) ...@@ -144,7 +144,7 @@ static struct sk_buff *ipv6_gso_segment(struct sk_buff *skb, int features)
rcu_read_lock(); rcu_read_lock();
ops = ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr); ops = ipv6_gso_pull_exthdrs(skb, ipv6h->nexthdr);
if (likely(ops && ops->gso_segment)) { if (likely(ops && ops->gso_segment)) {
skb->h.raw = skb->data; skb_reset_transport_header(skb);
segs = ops->gso_segment(skb, features); segs = ops->gso_segment(skb, features);
} }
rcu_read_unlock(); rcu_read_unlock();
......
...@@ -634,7 +634,7 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct net_device *dev) ...@@ -634,7 +634,7 @@ nf_ct_frag6_reasm(struct nf_ct_frag6_queue *fq, struct net_device *dev)
head->nh.raw += sizeof(struct frag_hdr); head->nh.raw += sizeof(struct frag_hdr);
skb_shinfo(head)->frag_list = head->next; skb_shinfo(head)->frag_list = head->next;
head->h.raw = head->data; skb_reset_transport_header(head);
skb_push(head, head->data - skb_network_header(head)); skb_push(head, head->data - skb_network_header(head));
atomic_sub(head->truesize, &nf_ct_frag6_mem); atomic_sub(head->truesize, &nf_ct_frag6_mem);
......
...@@ -653,7 +653,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in, ...@@ -653,7 +653,7 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff **skb_in,
head->nh.raw += sizeof(struct frag_hdr); head->nh.raw += sizeof(struct frag_hdr);
skb_shinfo(head)->frag_list = head->next; skb_shinfo(head)->frag_list = head->next;
head->h.raw = head->data; skb_reset_transport_header(head);
skb_push(head, head->data - skb_network_header(head)); skb_push(head, head->data - skb_network_header(head));
atomic_sub(head->truesize, &ip6_frag_mem); atomic_sub(head->truesize, &ip6_frag_mem);
......
...@@ -59,7 +59,7 @@ static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb) ...@@ -59,7 +59,7 @@ static int xfrm6_transport_input(struct xfrm_state *x, struct sk_buff *skb)
} }
ipv6_hdr(skb)->payload_len = htons(skb->len + ihl - ipv6_hdr(skb)->payload_len = htons(skb->len + ihl -
sizeof(struct ipv6hdr)); sizeof(struct ipv6hdr));
skb->h.raw = skb->data; skb_reset_transport_header(skb);
return 0; return 0;
} }
......
...@@ -577,7 +577,7 @@ static struct sk_buff *ipxitf_adjust_skbuff(struct ipx_interface *intrfc, ...@@ -577,7 +577,7 @@ static struct sk_buff *ipxitf_adjust_skbuff(struct ipx_interface *intrfc,
if (skb2) { if (skb2) {
skb_reserve(skb2, out_offset); skb_reserve(skb2, out_offset);
skb_reset_network_header(skb2); skb_reset_network_header(skb2);
skb2->h.raw = skb2->data; skb_reset_transport_header(skb2);
skb_put(skb2, skb->len); skb_put(skb2, skb->len);
memcpy(ipx_hdr(skb2), ipx_hdr(skb), skb->len); memcpy(ipx_hdr(skb2), ipx_hdr(skb), skb->len);
memcpy(skb2->cb, skb->cb, sizeof(skb->cb)); memcpy(skb2->cb, skb->cb, sizeof(skb->cb));
......
...@@ -204,7 +204,7 @@ int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx, ...@@ -204,7 +204,7 @@ int ipxrtr_route_packet(struct sock *sk, struct sockaddr_ipx *usipx,
/* Fill in IPX header */ /* Fill in IPX header */
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb_put(skb, sizeof(struct ipxhdr)); skb_put(skb, sizeof(struct ipxhdr));
ipx = ipx_hdr(skb); ipx = ipx_hdr(skb);
ipx->ipx_pktsize = htons(len + sizeof(struct ipxhdr)); ipx->ipx_pktsize = htons(len + sizeof(struct ipxhdr));
......
...@@ -1363,8 +1363,8 @@ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock, ...@@ -1363,8 +1363,8 @@ static int irda_recvmsg_dgram(struct kiocb *iocb, struct socket *sock,
if (!skb) if (!skb)
return err; return err;
skb->h.raw = skb->data; skb_reset_transport_header(skb);
copied = skb->len; copied = skb->len;
if (copied > size) { if (copied > size) {
IRDA_DEBUG(2, "%s(), Received truncated frame (%zd < %zd)!\n", IRDA_DEBUG(2, "%s(), Received truncated frame (%zd < %zd)!\n",
......
...@@ -95,7 +95,7 @@ void irlap_queue_xmit(struct irlap_cb *self, struct sk_buff *skb) ...@@ -95,7 +95,7 @@ void irlap_queue_xmit(struct irlap_cb *self, struct sk_buff *skb)
skb->dev = self->netdev; skb->dev = self->netdev;
skb_reset_mac_header(skb); skb_reset_mac_header(skb);
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb->protocol = htons(ETH_P_IRDA); skb->protocol = htons(ETH_P_IRDA);
skb->priority = TC_PRIO_BESTEFFORT; skb->priority = TC_PRIO_BESTEFFORT;
......
...@@ -953,7 +953,7 @@ static void iucv_callback_rx(struct iucv_path *path, struct iucv_message *msg) ...@@ -953,7 +953,7 @@ static void iucv_callback_rx(struct iucv_path *path, struct iucv_message *msg)
return; return;
} }
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->len = msg->length; skb->len = msg->length;
} }
......
...@@ -3667,7 +3667,7 @@ static int pfkey_recvmsg(struct kiocb *kiocb, ...@@ -3667,7 +3667,7 @@ static int pfkey_recvmsg(struct kiocb *kiocb,
copied = len; copied = len;
} }
skb->h.raw = skb->data; skb_reset_transport_header(skb);
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
if (err) if (err)
goto out_free; goto out_free;
......
...@@ -39,7 +39,7 @@ struct sk_buff *llc_alloc_frame(struct sock *sk, struct net_device *dev) ...@@ -39,7 +39,7 @@ struct sk_buff *llc_alloc_frame(struct sock *sk, struct net_device *dev)
skb_reset_mac_header(skb); skb_reset_mac_header(skb);
skb_reserve(skb, 50); skb_reserve(skb, 50);
skb_reset_network_header(skb); skb_reset_network_header(skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
skb->protocol = htons(ETH_P_802_2); skb->protocol = htons(ETH_P_802_2);
skb->dev = dev; skb->dev = dev;
if (sk != NULL) if (sk != NULL)
......
...@@ -1215,7 +1215,7 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock, ...@@ -1215,7 +1215,7 @@ static int netlink_recvmsg(struct kiocb *kiocb, struct socket *sock,
copied = len; copied = len;
} }
skb->h.raw = skb->data; skb_reset_transport_header(skb);
err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied); err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
if (msg->msg_name) { if (msg->msg_name) {
......
...@@ -878,7 +878,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev) ...@@ -878,7 +878,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
if (frametype == NR_PROTOEXT && if (frametype == NR_PROTOEXT &&
circuit_index == NR_PROTO_IP && circuit_id == NR_PROTO_IP) { circuit_index == NR_PROTO_IP && circuit_id == NR_PROTO_IP) {
skb_pull(skb, NR_NETWORK_LEN + NR_TRANSPORT_LEN); skb_pull(skb, NR_NETWORK_LEN + NR_TRANSPORT_LEN);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
return nr_rx_ip(skb, dev); return nr_rx_ip(skb, dev);
} }
...@@ -904,7 +904,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev) ...@@ -904,7 +904,7 @@ int nr_rx_frame(struct sk_buff *skb, struct net_device *dev)
} }
if (sk != NULL) { if (sk != NULL) {
skb->h.raw = skb->data; skb_reset_transport_header(skb);
if (frametype == NR_CONNACK && skb->len == 22) if (frametype == NR_CONNACK && skb->len == 22)
nr_sk(sk)->bpqext = 1; nr_sk(sk)->bpqext = 1;
...@@ -1149,7 +1149,7 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock, ...@@ -1149,7 +1149,7 @@ static int nr_recvmsg(struct kiocb *iocb, struct socket *sock,
return er; return er;
} }
skb->h.raw = skb->data; skb_reset_transport_header(skb);
copied = skb->len; copied = skb->len;
if (copied > size) { if (copied > size) {
......
...@@ -51,7 +51,7 @@ static int nr_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more) ...@@ -51,7 +51,7 @@ static int nr_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more)
if ((skbn = alloc_skb(nr->fraglen, GFP_ATOMIC)) == NULL) if ((skbn = alloc_skb(nr->fraglen, GFP_ATOMIC)) == NULL)
return 1; return 1;
skbn->h.raw = skbn->data; skb_reset_transport_header(skbn);
while ((skbo = skb_dequeue(&nr->frag_queue)) != NULL) { while ((skbo = skb_dequeue(&nr->frag_queue)) != NULL) {
memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len); memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len);
......
...@@ -35,7 +35,7 @@ int nr_loopback_queue(struct sk_buff *skb) ...@@ -35,7 +35,7 @@ int nr_loopback_queue(struct sk_buff *skb)
if ((skbn = alloc_skb(skb->len, GFP_ATOMIC)) != NULL) { if ((skbn = alloc_skb(skb->len, GFP_ATOMIC)) != NULL) {
memcpy(skb_put(skbn, skb->len), skb->data, skb->len); memcpy(skb_put(skbn, skb->len), skb->data, skb->len);
skbn->h.raw = skbn->data; skb_reset_transport_header(skbn);
skb_queue_tail(&loopback_queue, skbn); skb_queue_tail(&loopback_queue, skbn);
......
...@@ -1234,7 +1234,7 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock, ...@@ -1234,7 +1234,7 @@ static int rose_recvmsg(struct kiocb *iocb, struct socket *sock,
*asmptr = qbit; *asmptr = qbit;
} }
skb->h.raw = skb->data; skb_reset_transport_header(skb);
copied = skb->len; copied = skb->len;
if (copied > size) { if (copied > size) {
......
...@@ -77,7 +77,7 @@ static void rose_loopback_timer(unsigned long param) ...@@ -77,7 +77,7 @@ static void rose_loopback_timer(unsigned long param)
dest = (rose_address *)(skb->data + 4); dest = (rose_address *)(skb->data + 4);
lci_o = 0xFFF - lci_i; lci_o = 0xFFF - lci_i;
skb->h.raw = skb->data; skb_reset_transport_header(skb);
sk = rose_find_socket(lci_o, &rose_loopback_neigh); sk = rose_find_socket(lci_o, &rose_loopback_neigh);
if (sk) { if (sk) {
......
...@@ -906,7 +906,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25) ...@@ -906,7 +906,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
} }
} }
else { else {
skb->h.raw = skb->data; skb_reset_transport_header(skb);
res = rose_process_rx_frame(sk, skb); res = rose_process_rx_frame(sk, skb);
goto out; goto out;
} }
......
...@@ -1319,7 +1319,7 @@ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock, ...@@ -1319,7 +1319,7 @@ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock,
unix_attach_fds(siocb->scm, skb); unix_attach_fds(siocb->scm, skb);
unix_get_secdata(siocb->scm, skb); unix_get_secdata(siocb->scm, skb);
skb->h.raw = skb->data; skb_reset_transport_header(skb);
err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len); err = memcpy_fromiovec(skb_put(skb,len), msg->msg_iov, len);
if (err) if (err)
goto out_free; goto out_free;
......
...@@ -1210,8 +1210,7 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock, ...@@ -1210,8 +1210,7 @@ static int x25_recvmsg(struct kiocb *iocb, struct socket *sock,
} }
} }
skb->h.raw = skb->data; skb_reset_transport_header(skb);
copied = skb->len; copied = skb->len;
if (copied > size) { if (copied > size) {
......
...@@ -48,7 +48,7 @@ static int x25_receive_data(struct sk_buff *skb, struct x25_neigh *nb) ...@@ -48,7 +48,7 @@ static int x25_receive_data(struct sk_buff *skb, struct x25_neigh *nb)
if ((sk = x25_find_socket(lci, nb)) != NULL) { if ((sk = x25_find_socket(lci, nb)) != NULL) {
int queued = 1; int queued = 1;
skb->h.raw = skb->data; skb_reset_transport_header(skb);
bh_lock_sock(sk); bh_lock_sock(sk);
if (!sock_owned_by_user(sk)) { if (!sock_owned_by_user(sk)) {
queued = x25_process_rx_frame(sk, skb); queued = x25_process_rx_frame(sk, skb);
......
...@@ -53,7 +53,7 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more) ...@@ -53,7 +53,7 @@ static int x25_queue_rx_frame(struct sock *sk, struct sk_buff *skb, int more)
skb_queue_tail(&x25->fragment_queue, skb); skb_queue_tail(&x25->fragment_queue, skb);
skbn->h.raw = skbn->data; skb_reset_transport_header(skbn);
skbo = skb_dequeue(&x25->fragment_queue); skbo = skb_dequeue(&x25->fragment_queue);
memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len); memcpy(skb_put(skbn, skbo->len), skbo->data, skbo->len);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册