aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/link.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/tipc/link.c')
-rw-r--r--net/tipc/link.c48
1 files changed, 25 insertions, 23 deletions
diff --git a/net/tipc/link.c b/net/tipc/link.c
index 71c2f2fd405c..2124f32ef29f 100644
--- a/net/tipc/link.c
+++ b/net/tipc/link.c
@@ -1001,7 +1001,7 @@ static int link_bundle_buf(struct link *l_ptr,
1001 return 0; 1001 return 0;
1002 1002
1003 skb_put(bundler, pad + size); 1003 skb_put(bundler, pad + size);
1004 memcpy(bundler->data + to_pos, buf->data, size); 1004 skb_copy_to_linear_data_offset(bundler, to_pos, buf->data, size);
1005 msg_set_size(bundler_msg, to_pos + size); 1005 msg_set_size(bundler_msg, to_pos + size);
1006 msg_set_msgcnt(bundler_msg, msg_msgcnt(bundler_msg) + 1); 1006 msg_set_msgcnt(bundler_msg, msg_msgcnt(bundler_msg) + 1);
1007 dbg("Packed msg # %u(%u octets) into pos %u in buf(#%u)\n", 1007 dbg("Packed msg # %u(%u octets) into pos %u in buf(#%u)\n",
@@ -1109,8 +1109,8 @@ int tipc_link_send_buf(struct link *l_ptr, struct sk_buff *buf)
1109 if (bundler) { 1109 if (bundler) {
1110 msg_init(&bundler_hdr, MSG_BUNDLER, OPEN_MSG, 1110 msg_init(&bundler_hdr, MSG_BUNDLER, OPEN_MSG,
1111 TIPC_OK, INT_H_SIZE, l_ptr->addr); 1111 TIPC_OK, INT_H_SIZE, l_ptr->addr);
1112 memcpy(bundler->data, (unchar *)&bundler_hdr, 1112 skb_copy_to_linear_data(bundler, &bundler_hdr,
1113 INT_H_SIZE); 1113 INT_H_SIZE);
1114 skb_trim(bundler, INT_H_SIZE); 1114 skb_trim(bundler, INT_H_SIZE);
1115 link_bundle_buf(l_ptr, bundler, buf); 1115 link_bundle_buf(l_ptr, bundler, buf);
1116 buf = bundler; 1116 buf = bundler;
@@ -1383,9 +1383,9 @@ again:
1383 if (!buf) 1383 if (!buf)
1384 return -ENOMEM; 1384 return -ENOMEM;
1385 buf->next = NULL; 1385 buf->next = NULL;
1386 memcpy(buf->data, (unchar *)&fragm_hdr, INT_H_SIZE); 1386 skb_copy_to_linear_data(buf, &fragm_hdr, INT_H_SIZE);
1387 hsz = msg_hdr_sz(hdr); 1387 hsz = msg_hdr_sz(hdr);
1388 memcpy(buf->data + INT_H_SIZE, (unchar *)hdr, hsz); 1388 skb_copy_to_linear_data_offset(buf, INT_H_SIZE, hdr, hsz);
1389 msg_dbg(buf_msg(buf), ">BUILD>"); 1389 msg_dbg(buf_msg(buf), ">BUILD>");
1390 1390
1391 /* Chop up message: */ 1391 /* Chop up message: */
@@ -1416,8 +1416,8 @@ error:
1416 return -EFAULT; 1416 return -EFAULT;
1417 } 1417 }
1418 } else 1418 } else
1419 memcpy(buf->data + fragm_crs, sect_crs, sz); 1419 skb_copy_to_linear_data_offset(buf, fragm_crs,
1420 1420 sect_crs, sz);
1421 sect_crs += sz; 1421 sect_crs += sz;
1422 sect_rest -= sz; 1422 sect_rest -= sz;
1423 fragm_crs += sz; 1423 fragm_crs += sz;
@@ -1442,7 +1442,7 @@ error:
1442 1442
1443 buf->next = NULL; 1443 buf->next = NULL;
1444 prev->next = buf; 1444 prev->next = buf;
1445 memcpy(buf->data, (unchar *)&fragm_hdr, INT_H_SIZE); 1445 skb_copy_to_linear_data(buf, &fragm_hdr, INT_H_SIZE);
1446 fragm_crs = INT_H_SIZE; 1446 fragm_crs = INT_H_SIZE;
1447 fragm_rest = fragm_sz; 1447 fragm_rest = fragm_sz;
1448 msg_dbg(buf_msg(buf)," >BUILD>"); 1448 msg_dbg(buf_msg(buf)," >BUILD>");
@@ -2130,7 +2130,7 @@ void tipc_link_send_proto_msg(struct link *l_ptr, u32 msg_typ, int probe_msg,
2130 buf = l_ptr->proto_msg_queue; 2130 buf = l_ptr->proto_msg_queue;
2131 if (!buf) 2131 if (!buf)
2132 return; 2132 return;
2133 memcpy(buf->data, (unchar *)msg, sizeof(l_ptr->proto_msg)); 2133 skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg));
2134 return; 2134 return;
2135 } 2135 }
2136 msg_set_timestamp(msg, jiffies_to_msecs(jiffies)); 2136 msg_set_timestamp(msg, jiffies_to_msecs(jiffies));
@@ -2143,7 +2143,7 @@ void tipc_link_send_proto_msg(struct link *l_ptr, u32 msg_typ, int probe_msg,
2143 if (!buf) 2143 if (!buf)
2144 return; 2144 return;
2145 2145
2146 memcpy(buf->data, (unchar *)msg, sizeof(l_ptr->proto_msg)); 2146 skb_copy_to_linear_data(buf, msg, sizeof(l_ptr->proto_msg));
2147 msg_set_size(buf_msg(buf), msg_size); 2147 msg_set_size(buf_msg(buf), msg_size);
2148 2148
2149 if (tipc_bearer_send(l_ptr->b_ptr, buf, &l_ptr->media_addr)) { 2149 if (tipc_bearer_send(l_ptr->b_ptr, buf, &l_ptr->media_addr)) {
@@ -2319,8 +2319,8 @@ void tipc_link_tunnel(struct link *l_ptr,
2319 "unable to send tunnel msg\n"); 2319 "unable to send tunnel msg\n");
2320 return; 2320 return;
2321 } 2321 }
2322 memcpy(buf->data, (unchar *)tunnel_hdr, INT_H_SIZE); 2322 skb_copy_to_linear_data(buf, tunnel_hdr, INT_H_SIZE);
2323 memcpy(buf->data + INT_H_SIZE, (unchar *)msg, length); 2323 skb_copy_to_linear_data_offset(buf, INT_H_SIZE, msg, length);
2324 dbg("%c->%c:", l_ptr->b_ptr->net_plane, tunnel->b_ptr->net_plane); 2324 dbg("%c->%c:", l_ptr->b_ptr->net_plane, tunnel->b_ptr->net_plane);
2325 msg_dbg(buf_msg(buf), ">SEND>"); 2325 msg_dbg(buf_msg(buf), ">SEND>");
2326 tipc_link_send_buf(tunnel, buf); 2326 tipc_link_send_buf(tunnel, buf);
@@ -2361,7 +2361,7 @@ void tipc_link_changeover(struct link *l_ptr)
2361 2361
2362 buf = buf_acquire(INT_H_SIZE); 2362 buf = buf_acquire(INT_H_SIZE);
2363 if (buf) { 2363 if (buf) {
2364 memcpy(buf->data, (unchar *)&tunnel_hdr, INT_H_SIZE); 2364 skb_copy_to_linear_data(buf, &tunnel_hdr, INT_H_SIZE);
2365 msg_set_size(&tunnel_hdr, INT_H_SIZE); 2365 msg_set_size(&tunnel_hdr, INT_H_SIZE);
2366 dbg("%c->%c:", l_ptr->b_ptr->net_plane, 2366 dbg("%c->%c:", l_ptr->b_ptr->net_plane,
2367 tunnel->b_ptr->net_plane); 2367 tunnel->b_ptr->net_plane);
@@ -2426,8 +2426,9 @@ void tipc_link_send_duplicate(struct link *l_ptr, struct link *tunnel)
2426 "unable to send duplicate msg\n"); 2426 "unable to send duplicate msg\n");
2427 return; 2427 return;
2428 } 2428 }
2429 memcpy(outbuf->data, (unchar *)&tunnel_hdr, INT_H_SIZE); 2429 skb_copy_to_linear_data(outbuf, &tunnel_hdr, INT_H_SIZE);
2430 memcpy(outbuf->data + INT_H_SIZE, iter->data, length); 2430 skb_copy_to_linear_data_offset(outbuf, INT_H_SIZE, iter->data,
2431 length);
2431 dbg("%c->%c:", l_ptr->b_ptr->net_plane, 2432 dbg("%c->%c:", l_ptr->b_ptr->net_plane,
2432 tunnel->b_ptr->net_plane); 2433 tunnel->b_ptr->net_plane);
2433 msg_dbg(buf_msg(outbuf), ">SEND>"); 2434 msg_dbg(buf_msg(outbuf), ">SEND>");
@@ -2457,7 +2458,7 @@ static struct sk_buff *buf_extract(struct sk_buff *skb, u32 from_pos)
2457 2458
2458 eb = buf_acquire(size); 2459 eb = buf_acquire(size);
2459 if (eb) 2460 if (eb)
2460 memcpy(eb->data, (unchar *)msg, size); 2461 skb_copy_to_linear_data(eb, msg, size);
2461 return eb; 2462 return eb;
2462} 2463}
2463 2464
@@ -2569,7 +2570,7 @@ void tipc_link_recv_bundle(struct sk_buff *buf)
2569 if (obuf == NULL) { 2570 if (obuf == NULL) {
2570 warn("Link unable to unbundle message(s)\n"); 2571 warn("Link unable to unbundle message(s)\n");
2571 break; 2572 break;
2572 }; 2573 }
2573 pos += align(msg_size(buf_msg(obuf))); 2574 pos += align(msg_size(buf_msg(obuf)));
2574 msg_dbg(buf_msg(obuf), " /"); 2575 msg_dbg(buf_msg(obuf), " /");
2575 tipc_net_route_msg(obuf); 2576 tipc_net_route_msg(obuf);
@@ -2631,9 +2632,9 @@ int tipc_link_send_long_buf(struct link *l_ptr, struct sk_buff *buf)
2631 goto exit; 2632 goto exit;
2632 } 2633 }
2633 msg_set_size(&fragm_hdr, fragm_sz + INT_H_SIZE); 2634 msg_set_size(&fragm_hdr, fragm_sz + INT_H_SIZE);
2634 memcpy(fragm->data, (unchar *)&fragm_hdr, INT_H_SIZE); 2635 skb_copy_to_linear_data(fragm, &fragm_hdr, INT_H_SIZE);
2635 memcpy(fragm->data + INT_H_SIZE, crs, fragm_sz); 2636 skb_copy_to_linear_data_offset(fragm, INT_H_SIZE, crs,
2636 2637 fragm_sz);
2637 /* Send queued messages first, if any: */ 2638 /* Send queued messages first, if any: */
2638 2639
2639 l_ptr->stats.sent_fragments++; 2640 l_ptr->stats.sent_fragments++;
@@ -2733,8 +2734,8 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb,
2733 if (pbuf != NULL) { 2734 if (pbuf != NULL) {
2734 pbuf->next = *pending; 2735 pbuf->next = *pending;
2735 *pending = pbuf; 2736 *pending = pbuf;
2736 memcpy(pbuf->data, (unchar *)imsg, msg_data_sz(fragm)); 2737 skb_copy_to_linear_data(pbuf, imsg,
2737 2738 msg_data_sz(fragm));
2738 /* Prepare buffer for subsequent fragments. */ 2739 /* Prepare buffer for subsequent fragments. */
2739 2740
2740 set_long_msg_seqno(pbuf, long_msg_seq_no); 2741 set_long_msg_seqno(pbuf, long_msg_seq_no);
@@ -2750,7 +2751,8 @@ int tipc_link_recv_fragment(struct sk_buff **pending, struct sk_buff **fb,
2750 u32 fsz = get_fragm_size(pbuf); 2751 u32 fsz = get_fragm_size(pbuf);
2751 u32 crs = ((msg_fragm_no(fragm) - 1) * fsz); 2752 u32 crs = ((msg_fragm_no(fragm) - 1) * fsz);
2752 u32 exp_frags = get_expected_frags(pbuf) - 1; 2753 u32 exp_frags = get_expected_frags(pbuf) - 1;
2753 memcpy(pbuf->data + crs, msg_data(fragm), dsz); 2754 skb_copy_to_linear_data_offset(pbuf, crs,
2755 msg_data(fragm), dsz);
2754 buf_discard(fbuf); 2756 buf_discard(fbuf);
2755 2757
2756 /* Is message complete? */ 2758 /* Is message complete? */