Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c8b8ec8e authored by Stefan Raspl's avatar Stefan Raspl Committed by David S. Miller
Browse files

smc: simplify abort logic



Some of the conditions to exit recv() are common in two pathes - cleaning up
code by moving the check up so we have it only once.

Signed-off-by: default avatarStefan Raspl <raspl@linux.ibm.com>
Signed-off-by: default avatarUrsula Braun <ubraun@linux.ibm.com&gt;&lt;>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a7b15ab8
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -112,26 +112,22 @@ int smc_rx_recvmsg(struct smc_sock *smc, struct msghdr *msg, size_t len,
		if (atomic_read(&conn->bytes_to_rcv))
			goto copy;

		if (sk->sk_shutdown & RCV_SHUTDOWN ||
		    smc_cdc_rxed_any_close_or_senddone(conn) ||
		    conn->local_tx_ctrl.conn_state_flags.peer_conn_abort)
			break;

		if (read_done) {
			if (sk->sk_err ||
			    sk->sk_state == SMC_CLOSED ||
			    sk->sk_shutdown & RCV_SHUTDOWN ||
			    !timeo ||
			    signal_pending(current) ||
			    smc_cdc_rxed_any_close_or_senddone(conn) ||
			    conn->local_tx_ctrl.conn_state_flags.
			    peer_conn_abort)
			    signal_pending(current))
				break;
		} else {
			if (sk->sk_err) {
				read_done = sock_error(sk);
				break;
			}
			if (sk->sk_shutdown & RCV_SHUTDOWN ||
			    smc_cdc_rxed_any_close_or_senddone(conn) ||
			    conn->local_tx_ctrl.conn_state_flags.
			    peer_conn_abort)
				break;
			if (sk->sk_state == SMC_CLOSED) {
				if (!sock_flag(sk, SOCK_DONE)) {
					/* This occurs when user tries to read