diff options
author | Ying Xue <ying.xue@windriver.com> | 2014-11-25 22:41:52 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-11-26 12:30:17 -0500 |
commit | 58dc55f25631178ee74cd27185956a8f7dcb3e32 (patch) | |
tree | a38c003514637757191edf01d906fd58b300e6b1 /net/tipc/msg.c | |
parent | 58d78b328a70f4b5ed1c00010499aaedb715ea5b (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.c | 50 |
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 | */ |
274 | bool tipc_msg_bundle(struct sk_buff *bbuf, struct sk_buff *buf, u32 mtu) | 274 | bool 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 | */ |
316 | bool tipc_msg_make_bundle(struct sk_buff **buf, u32 mtu, u32 dnode) | 317 | bool 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 | /** |