diff options
author | Allan Stephens <allan.stephens@windriver.com> | 2011-05-23 21:47:44 +0400 |
---|---|---|
committer | Paul Gortmaker <paul.gortmaker@windriver.com> | 2011-06-25 00:18:15 +0400 |
commit | acc631bf6f597b36f3f014e12e69c710da610027 (patch) | |
tree | 2dbdf526d8fdeb52acd857fdf62507d7ea3a22da /net/tipc/port.c | |
parent | 7ae4738e9e46a2f88e5d1332b7397bb96c527c44 (diff) | |
download | linux-acc631bf6f597b36f3f014e12e69c710da610027.tar.xz |
tipc: Standardize exit logic for message rejection handling
Modifies the routine that handles the rejection of payload messages
so that it has a single exit point that frees up the rejected message,
thereby eliminating some duplicated code.
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Diffstat (limited to 'net/tipc/port.c')
-rw-r--r-- | net/tipc/port.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/net/tipc/port.c b/net/tipc/port.c index c68dc956a423..3946b5b10c74 100644 --- a/net/tipc/port.c +++ b/net/tipc/port.c @@ -367,10 +367,8 @@ int tipc_reject_msg(struct sk_buff *buf, u32 err) imp++; /* discard rejected message if it shouldn't be returned to sender */ - if (msg_errcode(msg) || msg_dest_droppable(msg)) { - buf_discard(buf); - return data_sz; - } + if (msg_errcode(msg) || msg_dest_droppable(msg)) + goto exit; /* construct rejected message */ if (msg_mcast(msg)) @@ -378,10 +376,9 @@ int tipc_reject_msg(struct sk_buff *buf, u32 err) else hdr_sz = LONG_H_SIZE; rbuf = tipc_buf_acquire(data_sz + hdr_sz); - if (rbuf == NULL) { - buf_discard(buf); - return data_sz; - } + if (rbuf == NULL) + goto exit; + rmsg = buf_msg(rbuf); tipc_msg_init(rmsg, imp, msg_type(msg), hdr_sz, msg_orignode(msg)); msg_set_errcode(rmsg, err); @@ -411,9 +408,11 @@ int tipc_reject_msg(struct sk_buff *buf, u32 err) tipc_net_route_msg(abuf); } - /* send rejected message */ - buf_discard(buf); + /* send returned message & dispose of rejected message */ + tipc_net_route_msg(rbuf); +exit: + buf_discard(buf); return data_sz; } |