hc
2024-09-20 cf4ce59b3b70238352c7f1729f0f7223214828ad
kernel/net/smc/smc_rx.c
....@@ -129,17 +129,8 @@
129129 sock_put(sk);
130130 }
131131
132
-static int smc_rx_pipe_buf_nosteal(struct pipe_inode_info *pipe,
133
- struct pipe_buffer *buf)
134
-{
135
- return 1;
136
-}
137
-
138132 static const struct pipe_buf_operations smc_pipe_ops = {
139
- .can_merge = 0,
140
- .confirm = generic_pipe_buf_confirm,
141133 .release = smc_rx_pipe_buf_release,
142
- .steal = smc_rx_pipe_buf_nosteal,
143134 .get = generic_pipe_buf_get
144135 };
145136
....@@ -202,6 +193,8 @@
202193 {
203194 DEFINE_WAIT_FUNC(wait, woken_wake_function);
204195 struct smc_connection *conn = &smc->conn;
196
+ struct smc_cdc_conn_state_flags *cflags =
197
+ &conn->local_tx_ctrl.conn_state_flags;
205198 struct sock *sk = &smc->sk;
206199 int rc;
207200
....@@ -210,8 +203,10 @@
210203 sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);
211204 add_wait_queue(sk_sleep(sk), &wait);
212205 rc = sk_wait_event(sk, timeo,
213
- sk->sk_err ||
214
- sk->sk_shutdown & RCV_SHUTDOWN ||
206
+ READ_ONCE(sk->sk_err) ||
207
+ cflags->peer_conn_abort ||
208
+ READ_ONCE(sk->sk_shutdown) & RCV_SHUTDOWN ||
209
+ conn->killed ||
215210 fcrit(conn),
216211 &wait);
217212 remove_wait_queue(sk_sleep(sk), &wait);
....@@ -315,11 +310,13 @@
315310 if (read_done >= target || (pipe && read_done))
316311 break;
317312
313
+ if (conn->killed)
314
+ break;
315
+
318316 if (smc_rx_recvmsg_data_available(smc))
319317 goto copy;
320318
321
- if (sk->sk_shutdown & RCV_SHUTDOWN ||
322
- conn->local_tx_ctrl.conn_state_flags.peer_conn_abort) {
319
+ if (sk->sk_shutdown & RCV_SHUTDOWN) {
323320 /* smc_cdc_msg_recv_action() could have run after
324321 * above smc_rx_recvmsg_data_available()
325322 */
....@@ -349,12 +346,12 @@
349346 }
350347 break;
351348 }
349
+ if (!timeo)
350
+ return -EAGAIN;
352351 if (signal_pending(current)) {
353352 read_done = sock_intr_errno(timeo);
354353 break;
355354 }
356
- if (!timeo)
357
- return -EAGAIN;
358355 }
359356
360357 if (!smc_rx_data_available(conn)) {