diff options
| author | Allan Stephens <allan.stephens@windriver.com> | 2008-06-04 20:28:45 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-06-04 20:28:45 -0400 |
| commit | 5307e46957e76d71f02d2d736030ad92cdb3dd8c (patch) | |
| tree | d6eeeaff687f2c15f4d07441a8c79d951407707e /net/tipc | |
| parent | 84b07c1638c36ae937d4930b467001a0d22904e5 (diff) | |
tipc: Standardize error checking on incoming messages via native API
This patch re-orders & re-groups the error checks performed on
messages being delivered to native API ports, in order to clarify the
similarities and differences required for the various message types.
Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc')
| -rw-r--r-- | net/tipc/port.c | 25 |
1 files changed, 9 insertions, 16 deletions
diff --git a/net/tipc/port.c b/net/tipc/port.c index 0bd3e6192c43..4dfef9e798e3 100644 --- a/net/tipc/port.c +++ b/net/tipc/port.c | |||
| @@ -841,14 +841,14 @@ static void port_dispatcher_sigh(void *dummy) | |||
| 841 | u32 peer_node = port_peernode(p_ptr); | 841 | u32 peer_node = port_peernode(p_ptr); |
| 842 | 842 | ||
| 843 | tipc_port_unlock(p_ptr); | 843 | tipc_port_unlock(p_ptr); |
| 844 | if (unlikely(!cb)) | ||
| 845 | goto reject; | ||
| 844 | if (unlikely(!connected)) { | 846 | if (unlikely(!connected)) { |
| 845 | if (tipc_connect2port(dref, &orig)) | 847 | if (tipc_connect2port(dref, &orig)) |
| 846 | goto reject; | 848 | goto reject; |
| 847 | } else if ((msg_origport(msg) != peer_port) || | 849 | } else if ((msg_origport(msg) != peer_port) || |
| 848 | (msg_orignode(msg) != peer_node)) | 850 | (msg_orignode(msg) != peer_node)) |
| 849 | goto reject; | 851 | goto reject; |
| 850 | if (unlikely(!cb)) | ||
| 851 | goto reject; | ||
| 852 | if (unlikely(++p_ptr->publ.conn_unacked >= | 852 | if (unlikely(++p_ptr->publ.conn_unacked >= |
| 853 | TIPC_FLOW_CONTROL_WIN)) | 853 | TIPC_FLOW_CONTROL_WIN)) |
| 854 | tipc_acknowledge(dref, | 854 | tipc_acknowledge(dref, |
| @@ -862,9 +862,7 @@ static void port_dispatcher_sigh(void *dummy) | |||
| 862 | tipc_msg_event cb = up_ptr->msg_cb; | 862 | tipc_msg_event cb = up_ptr->msg_cb; |
| 863 | 863 | ||
| 864 | tipc_port_unlock(p_ptr); | 864 | tipc_port_unlock(p_ptr); |
| 865 | if (unlikely(connected)) | 865 | if (unlikely(!cb || connected)) |
| 866 | goto reject; | ||
| 867 | if (unlikely(!cb)) | ||
| 868 | goto reject; | 866 | goto reject; |
| 869 | skb_pull(buf, msg_hdr_sz(msg)); | 867 | skb_pull(buf, msg_hdr_sz(msg)); |
| 870 | cb(usr_handle, dref, &buf, msg_data(msg), | 868 | cb(usr_handle, dref, &buf, msg_data(msg), |
| @@ -877,11 +875,7 @@ static void port_dispatcher_sigh(void *dummy) | |||
| 877 | tipc_named_msg_event cb = up_ptr->named_msg_cb; | 875 | tipc_named_msg_event cb = up_ptr->named_msg_cb; |
| 878 | 876 | ||
| 879 | tipc_port_unlock(p_ptr); | 877 | tipc_port_unlock(p_ptr); |
| 880 | if (unlikely(connected)) | 878 | if (unlikely(!cb || connected || !published)) |
| 881 | goto reject; | ||
| 882 | if (unlikely(!cb)) | ||
| 883 | goto reject; | ||
| 884 | if (unlikely(!published)) | ||
| 885 | goto reject; | 879 | goto reject; |
| 886 | dseq.type = msg_nametype(msg); | 880 | dseq.type = msg_nametype(msg); |
| 887 | dseq.lower = msg_nameinst(msg); | 881 | dseq.lower = msg_nameinst(msg); |
| @@ -908,11 +902,10 @@ err: | |||
| 908 | u32 peer_node = port_peernode(p_ptr); | 902 | u32 peer_node = port_peernode(p_ptr); |
| 909 | 903 | ||
| 910 | tipc_port_unlock(p_ptr); | 904 | tipc_port_unlock(p_ptr); |
| 911 | if (!connected || !cb) | 905 | if (!cb || !connected) |
| 912 | break; | ||
| 913 | if (msg_origport(msg) != peer_port) | ||
| 914 | break; | 906 | break; |
| 915 | if (msg_orignode(msg) != peer_node) | 907 | if ((msg_origport(msg) != peer_port) || |
| 908 | (msg_orignode(msg) != peer_node)) | ||
| 916 | break; | 909 | break; |
| 917 | tipc_disconnect(dref); | 910 | tipc_disconnect(dref); |
| 918 | skb_pull(buf, msg_hdr_sz(msg)); | 911 | skb_pull(buf, msg_hdr_sz(msg)); |
| @@ -924,7 +917,7 @@ err: | |||
| 924 | tipc_msg_err_event cb = up_ptr->err_cb; | 917 | tipc_msg_err_event cb = up_ptr->err_cb; |
| 925 | 918 | ||
| 926 | tipc_port_unlock(p_ptr); | 919 | tipc_port_unlock(p_ptr); |
| 927 | if (connected || !cb) | 920 | if (!cb || connected) |
| 928 | break; | 921 | break; |
| 929 | skb_pull(buf, msg_hdr_sz(msg)); | 922 | skb_pull(buf, msg_hdr_sz(msg)); |
| 930 | cb(usr_handle, dref, &buf, msg_data(msg), | 923 | cb(usr_handle, dref, &buf, msg_data(msg), |
| @@ -937,7 +930,7 @@ err: | |||
| 937 | up_ptr->named_err_cb; | 930 | up_ptr->named_err_cb; |
| 938 | 931 | ||
| 939 | tipc_port_unlock(p_ptr); | 932 | tipc_port_unlock(p_ptr); |
| 940 | if (connected || !cb) | 933 | if (!cb || connected) |
| 941 | break; | 934 | break; |
| 942 | dseq.type = msg_nametype(msg); | 935 | dseq.type = msg_nametype(msg); |
| 943 | dseq.lower = msg_nameinst(msg); | 936 | dseq.lower = msg_nameinst(msg); |
