Hi Johan, > In the case of blocking sockets we should not proceed with sendmsg() if > the socket has the BT_SK_SUSPEND flag set. So far the code was only > ensuring that POLLOUT doesn't get set for non-blocking sockets using > poll() but there was no code in place to ensure that blocking sockets do > the right thing when writing to them. > > This patch adds a new bt_sock_wait_unsuspend helper function to sleep in > the sendmsg call if the BT_SK_SUSPEND flag is set, and wake up as soon > as it is unset. It also updates the L2CAP and RFCOMM sendmsg callbacks > to take advantage of this new helper function. > > Signed-off-by: Johan Hedberg <johan.hedberg@xxxxxxxxx> > --- > include/net/bluetooth/bluetooth.h | 1 + > net/bluetooth/af_bluetooth.c | 38 ++++++++++++++++++++++++++++++++++++++ > net/bluetooth/l2cap_sock.c | 6 ++++++ > net/bluetooth/rfcomm/sock.c | 7 +++++-- > 4 files changed, 50 insertions(+), 2 deletions(-) > > diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h > index 10d43d8..3299d42 100644 > --- a/include/net/bluetooth/bluetooth.h > +++ b/include/net/bluetooth/bluetooth.h > @@ -249,6 +249,7 @@ int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock, > uint bt_sock_poll(struct file *file, struct socket *sock, poll_table *wait); > int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg); > int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo); > +int bt_sock_wait_unsuspend(struct sock *sk, unsigned long flags); I am not a huge fan of the term unsuspend. Maybe wait_ready is better here. Regards Marcel -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html