aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/msg.c
diff options
context:
space:
mode:
authorYing Xue <ying.xue@windriver.com>2014-11-25 22:41:52 -0500
committerDavid S. Miller <davem@davemloft.net>2014-11-26 12:30:17 -0500
commit58dc55f25631178ee74cd27185956a8f7dcb3e32 (patch)
treea38c003514637757191edf01d906fd58b300e6b1 /net/tipc/msg.c
parent58d78b328a70f4b5ed1c00010499aaedb715ea5b (diff)
tipc: use generic SKB list APIs to manage link transmission queue
Use standard SKB list APIs associated with struct sk_buff_head to manage link transmission queue, having relevant code more clean. Signed-off-by: Ying Xue <ying.xue@windriver.com> Reviewed-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/msg.c')
-rw-r--r--net/tipc/msg.c50
1 files changed, 25 insertions, 25 deletions
diff --git a/net/tipc/msg.c b/net/tipc/msg.c
index 94db39217248..ce7514ae6bf3 100644
--- a/net/tipc/msg.c
+++ b/net/tipc/msg.c
@@ -265,16 +265,17 @@ error:
265 265
266/** 266/**
267 * tipc_msg_bundle(): Append contents of a buffer to tail of an existing one 267 * tipc_msg_bundle(): Append contents of a buffer to tail of an existing one
268 * @bbuf: the existing buffer ("bundle") 268 * @list: the buffer chain of the existing buffer ("bundle")
269 * @buf: buffer to be appended 269 * @skb: buffer to be appended
270 * @mtu: max allowable size for the bundle buffer 270 * @mtu: max allowable size for the bundle buffer
271 * Consumes buffer if successful 271 * Consumes buffer if successful
272 * Returns true if bundling could be performed, otherwise false 272 * Returns true if bundling could be performed, otherwise false
273 */ 273 */
274bool tipc_msg_bundle(struct sk_buff *bbuf, struct sk_buff *buf, u32 mtu) 274bool tipc_msg_bundle(struct sk_buff_head *list, struct sk_buff *skb, u32 mtu)
275{ 275{
276 struct tipc_msg *bmsg = buf_msg(bbuf); 276 struct sk_buff *bskb = skb_peek_tail(list);
277 struct tipc_msg *msg = buf_msg(buf); 277 struct tipc_msg *bmsg = buf_msg(bskb);
278 struct tipc_msg *msg = buf_msg(skb);
278 unsigned int bsz = msg_size(bmsg); 279 unsigned int bsz = msg_size(bmsg);
279 unsigned int msz = msg_size(msg); 280 unsigned int msz = msg_size(msg);
280 u32 start = align(bsz); 281 u32 start = align(bsz);
@@ -289,35 +290,36 @@ bool tipc_msg_bundle(struct sk_buff *bbuf, struct sk_buff *buf, u32 mtu)
289 return false; 290 return false;
290 if (likely(msg_user(bmsg) != MSG_BUNDLER)) 291 if (likely(msg_user(bmsg) != MSG_BUNDLER))
291 return false; 292 return false;
292 if (likely(!TIPC_SKB_CB(bbuf)->bundling)) 293 if (likely(!TIPC_SKB_CB(bskb)->bundling))
293 return false; 294 return false;
294 if (unlikely(skb_tailroom(bbuf) < (pad + msz))) 295 if (unlikely(skb_tailroom(bskb) < (pad + msz)))
295 return false; 296 return false;
296 if (unlikely(max < (start + msz))) 297 if (unlikely(max < (start + msz)))
297 return false; 298 return false;
298 299
299 skb_put(bbuf, pad + msz); 300 skb_put(bskb, pad + msz);
300 skb_copy_to_linear_data_offset(bbuf, start, buf->data, msz); 301 skb_copy_to_linear_data_offset(bskb, start, skb->data, msz);
301 msg_set_size(bmsg, start + msz); 302 msg_set_size(bmsg, start + msz);
302 msg_set_msgcnt(bmsg, msg_msgcnt(bmsg) + 1); 303 msg_set_msgcnt(bmsg, msg_msgcnt(bmsg) + 1);
303 bbuf->next = buf->next; 304 kfree_skb(skb);
304 kfree_skb(buf);
305 return true; 305 return true;
306} 306}
307 307
308/** 308/**
309 * tipc_msg_make_bundle(): Create bundle buf and append message to its tail 309 * tipc_msg_make_bundle(): Create bundle buf and append message to its tail
310 * @buf: buffer to be appended and replaced 310 * @list: the buffer chain
311 * @mtu: max allowable size for the bundle buffer, inclusive header 311 * @skb: buffer to be appended and replaced
312 * @mtu: max allowable size for the bundle buffer, inclusive header
312 * @dnode: destination node for message. (Not always present in header) 313 * @dnode: destination node for message. (Not always present in header)
313 * Replaces buffer if successful 314 * Replaces buffer if successful
314 * Returns true if success, otherwise false 315 * Returns true if success, otherwise false
315 */ 316 */
316bool tipc_msg_make_bundle(struct sk_buff **buf, u32 mtu, u32 dnode) 317bool tipc_msg_make_bundle(struct sk_buff_head *list, struct sk_buff *skb,
318 u32 mtu, u32 dnode)
317{ 319{
318 struct sk_buff *bbuf; 320 struct sk_buff *bskb;
319 struct tipc_msg *bmsg; 321 struct tipc_msg *bmsg;
320 struct tipc_msg *msg = buf_msg(*buf); 322 struct tipc_msg *msg = buf_msg(skb);
321 u32 msz = msg_size(msg); 323 u32 msz = msg_size(msg);
322 u32 max = mtu - INT_H_SIZE; 324 u32 max = mtu - INT_H_SIZE;
323 325
@@ -330,21 +332,19 @@ bool tipc_msg_make_bundle(struct sk_buff **buf, u32 mtu, u32 dnode)
330 if (msz > (max / 2)) 332 if (msz > (max / 2))
331 return false; 333 return false;
332 334
333 bbuf = tipc_buf_acquire(max); 335 bskb = tipc_buf_acquire(max);
334 if (!bbuf) 336 if (!bskb)
335 return false; 337 return false;
336 338
337 skb_trim(bbuf, INT_H_SIZE); 339 skb_trim(bskb, INT_H_SIZE);
338 bmsg = buf_msg(bbuf); 340 bmsg = buf_msg(bskb);
339 tipc_msg_init(bmsg, MSG_BUNDLER, 0, INT_H_SIZE, dnode); 341 tipc_msg_init(bmsg, MSG_BUNDLER, 0, INT_H_SIZE, dnode);
340 msg_set_seqno(bmsg, msg_seqno(msg)); 342 msg_set_seqno(bmsg, msg_seqno(msg));
341 msg_set_ack(bmsg, msg_ack(msg)); 343 msg_set_ack(bmsg, msg_ack(msg));
342 msg_set_bcast_ack(bmsg, msg_bcast_ack(msg)); 344 msg_set_bcast_ack(bmsg, msg_bcast_ack(msg));
343 bbuf->next = (*buf)->next; 345 TIPC_SKB_CB(bskb)->bundling = true;
344 TIPC_SKB_CB(bbuf)->bundling = true; 346 __skb_queue_tail(list, bskb);
345 tipc_msg_bundle(bbuf, *buf, mtu); 347 return tipc_msg_bundle(list, skb, mtu);
346 *buf = bbuf;
347 return true;
348} 348}
349 349
350/** 350/**