]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/tipc/link.c
[PATCH] uml: split memory allocation prototypes out of user.h
[linux-2.6-omap-h63xx.git] / net / tipc / link.c
index d64658053746f093d4429cdcd076666bf4bf99ce..53bc8cb5adbc7bc98e2ede758f89e7ba3b1d05c4 100644 (file)
@@ -2,7 +2,7 @@
  * net/tipc/link.c: TIPC link code
  * 
  * Copyright (c) 1996-2006, Ericsson AB
- * Copyright (c) 2004-2005, Wind River Systems
+ * Copyright (c) 2004-2006, Wind River Systems
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -417,12 +417,11 @@ struct link *tipc_link_create(struct bearer *b_ptr, const u32 peer,
        struct tipc_msg *msg;
        char *if_name;
 
-       l_ptr = (struct link *)kmalloc(sizeof(*l_ptr), GFP_ATOMIC);
+       l_ptr = kzalloc(sizeof(*l_ptr), GFP_ATOMIC);
        if (!l_ptr) {
                warn("Link creation failed, no memory\n");
                return NULL;
        }
-       memset(l_ptr, 0, sizeof(*l_ptr));
 
        l_ptr->addr = peer;
        if_name = strchr(b_ptr->publ.name, ':') + 1;
@@ -988,17 +987,20 @@ static int link_bundle_buf(struct link *l_ptr,
        struct tipc_msg *bundler_msg = buf_msg(bundler);
        struct tipc_msg *msg = buf_msg(buf);
        u32 size = msg_size(msg);
-       u32 to_pos = align(msg_size(bundler_msg));
-       u32 rest = link_max_pkt(l_ptr) - to_pos;
+       u32 bundle_size = msg_size(bundler_msg);
+       u32 to_pos = align(bundle_size);
+       u32 pad = to_pos - bundle_size;
 
        if (msg_user(bundler_msg) != MSG_BUNDLER)
                return 0;
        if (msg_type(bundler_msg) != OPEN_MSG)
                return 0;
-       if (rest < align(size))
+       if (skb_tailroom(bundler) < (pad + size))
+               return 0;
+       if (link_max_pkt(l_ptr) < (to_pos + size))
                return 0;
 
-       skb_put(bundler, (to_pos - msg_size(bundler_msg)) + size);
+       skb_put(bundler, pad + size);
        memcpy(bundler->data + to_pos, buf->data, size);
        msg_set_size(bundler_msg, to_pos + size);
        msg_set_msgcnt(bundler_msg, msg_msgcnt(bundler_msg) + 1);
@@ -1664,8 +1666,9 @@ static void link_retransmit_failure(struct link *l_ptr, struct sk_buff *buf)
                char addr_string[16];
 
                tipc_printf(TIPC_OUTPUT, "Msg seq number: %u,  ", msg_seqno(msg));
-               tipc_printf(TIPC_OUTPUT, "Outstanding acks: %u\n", (u32)TIPC_SKB_CB(buf)->handle);
-               
+               tipc_printf(TIPC_OUTPUT, "Outstanding acks: %lu\n",
+                                    (unsigned long) TIPC_SKB_CB(buf)->handle);
+
                n_ptr = l_ptr->owner->next;
                tipc_node_lock(n_ptr);