.. | .. |
---|
288 | 288 | |
---|
289 | 289 | add_wait_queue(sk_sleep(sk), &wait); |
---|
290 | 290 | while (1) { |
---|
291 | | - /* Ensure session->terminate is updated */ |
---|
292 | | - smp_mb__before_atomic(); |
---|
293 | | - |
---|
294 | 291 | if (atomic_read(&session->terminate)) |
---|
295 | 292 | break; |
---|
296 | 293 | if (sk->sk_state != BT_CONNECTED) |
---|
.. | .. |
---|
306 | 303 | |
---|
307 | 304 | cmtp_process_transmit(session); |
---|
308 | 305 | |
---|
| 306 | + /* |
---|
| 307 | + * wait_woken() performs the necessary memory barriers |
---|
| 308 | + * for us; see the header comment for this primitive. |
---|
| 309 | + */ |
---|
309 | 310 | wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); |
---|
310 | 311 | } |
---|
311 | 312 | remove_wait_queue(sk_sleep(sk), &wait); |
---|
.. | .. |
---|
436 | 437 | /* Stop session thread */ |
---|
437 | 438 | atomic_inc(&session->terminate); |
---|
438 | 439 | |
---|
439 | | - /* Ensure session->terminate is updated */ |
---|
440 | | - smp_mb__after_atomic(); |
---|
441 | | - |
---|
| 440 | + /* |
---|
| 441 | + * See the comment preceding the call to wait_woken() |
---|
| 442 | + * in cmtp_session(). |
---|
| 443 | + */ |
---|
442 | 444 | wake_up_interruptible(sk_sleep(session->sock->sk)); |
---|
443 | 445 | } else |
---|
444 | 446 | err = -ENOENT; |
---|