From: Mat Martineau <mathewm@codeaurora.org>
To: linux-bluetooth@vger.kernel.org
Cc: marcel@holtmann.org, gustavo@padovan.org,
rshaffer@codeaurora.org, linux-arm-msm@vger.kernel.org,
Mat Martineau <mathewm@codeaurora.org>
Subject: [PATCH 8/9] Bluetooth: Use a stream-oriented recvmsg with SOCK_STREAM L2CAP sockets.
Date: Wed, 4 Aug 2010 15:49:05 -0700 [thread overview]
Message-ID: <1280962146-22604-9-git-send-email-mathewm@codeaurora.org> (raw)
In-Reply-To: <1280962146-22604-1-git-send-email-mathewm@codeaurora.org>
L2CAP ERTM sockets can be opened with the SOCK_STREAM socket type,
which is a mandatory request for ERTM mode.
However, these sockets still have SOCK_SEQPACKET read semantics when
bt_sock_recvmsg() is used to pull data from the receive queue. If the
application is only reading part of a frame, then the unread portion
of the frame is discarded. If the application requests more bytes
than are in the current frame, only the current frame's data is
returned.
This patch utilizes common code derived from RFCOMM's recvmsg()
function to make L2CAP SOCK_STREAM reads behave like RFCOMM reads (and
other SOCK_STREAM sockets in general). The application may read one
byte at a time from the input stream and not lose any data, and may
also read across L2CAP frame boundaries.
Signed-off-by: Mat Martineau <mathewm@codeaurora.org>
---
net/bluetooth/l2cap.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c
index f0f3c7c..b9de88d 100644
--- a/net/bluetooth/l2cap.c
+++ b/net/bluetooth/l2cap.c
@@ -1956,7 +1956,10 @@ static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct ms
release_sock(sk);
- return bt_sock_recvmsg(iocb, sock, msg, len, flags);
+ if (sock->type == SOCK_STREAM)
+ return bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
+ else
+ return bt_sock_recvmsg(iocb, sock, msg, len, flags);
}
static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen)
--
1.7.1
--
Mat Martineau
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum
next prev parent reply other threads:[~2010-08-04 22:49 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-04 22:48 [PATCH v2 0/9] Bluetooth: L2CAP updates for PSM validation and ERTM Mat Martineau
2010-08-04 22:48 ` [PATCH 1/9] Bluetooth: Only enable for L2CAP FCS for ERTM or streaming Mat Martineau
2010-08-05 3:32 ` Gustavo F. Padovan
2010-08-05 16:27 ` Mat Martineau
2010-08-05 3:38 ` Gustavo F. Padovan
2010-08-04 22:48 ` [PATCH 2/9] Bluetooth: Change default ERTM retransmit timeout Mat Martineau
2010-08-05 3:29 ` Gustavo F. Padovan
2010-08-05 15:53 ` Mat Martineau
2010-08-04 22:49 ` [PATCH 3/9] Bluetooth: Validate PSM values in calls to connect() and bind() Mat Martineau
2010-08-04 22:49 ` [PATCH 4/9] Bluetooth: Fix endianness issue with L2CAP MPS configuration Mat Martineau
2010-08-05 4:00 ` Gustavo F. Padovan
2010-08-05 16:50 ` Mat Martineau
2010-08-04 22:49 ` [PATCH 5/9] Bluetooth: Fix incorrect setting of remote_tx_win for L2CAP ERTM Mat Martineau
2010-08-05 4:20 ` Gustavo F. Padovan
2010-08-05 16:54 ` Mat Martineau
2010-08-04 22:49 ` [PATCH 6/9] Bluetooth: Add common code for stream-oriented recvmsg() Mat Martineau
2010-08-04 22:49 ` [PATCH 7/9] Bluetooth: Use common SOCK_STREAM receive code in RFCOMM Mat Martineau
2010-08-04 22:49 ` Mat Martineau [this message]
2010-08-04 22:49 ` [PATCH 9/9] Bluetooth: Use 3-DH5 payload size for default ERTM max PDU size Mat Martineau
-- strict thread matches above, loose matches on Subject: below --
2010-08-05 22:54 [PATCH v3 0/9] Bluetooth: L2CAP updates for PSM validation and ERTM Mat Martineau
2010-08-05 22:54 ` [PATCH 8/9] Bluetooth: Use a stream-oriented recvmsg with SOCK_STREAM L2CAP sockets Mat Martineau
2010-08-09 2:50 ` Marcel Holtmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1280962146-22604-9-git-send-email-mathewm@codeaurora.org \
--to=mathewm@codeaurora.org \
--cc=gustavo@padovan.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=marcel@holtmann.org \
--cc=rshaffer@codeaurora.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).