Mat Martineau wrote: > > - pr_debug("parent=%p", parent); > > + struct socket_wq *wq; > > > > smp_mb__before_atomic(); > > set_bit(MPTCP_DATA_READY, &mptcp_sk(parent)->flags); > > smp_mb__after_atomic(); > > > > - parent->sk_data_ready(parent); > > - } > > + rcu_read_lock(); > > + wq = rcu_dereference(parent->sk_wq); > > + if (skwq_has_sleeper(wq) && > > + mptcp_should_wake_parent(subflow)) { > > + wake_up_interruptible_all(&wq->wait); > > + } > > + rcu_read_unlock(); > > Compared to sock_def_readable, this wakeup code doesn't call sk_wake_async. > Is SOCK_FASYNC irrelevant here (sk_wake_async doesn't do anything without > that sock flag)? Its not. Perhaps best to make this a simpler if (mptcp_should_wake_parent(subflow)) parent->sk_data_ready(parent); I will make this change in the next iteration.