Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 290896
b: refs/heads/master
c: 2f7719c
h: refs/heads/master
v: v3
  • Loading branch information
Andrei Emeltchenko authored and Johan Hedberg committed Feb 13, 2012
1 parent 37c2fd3 commit 1db3972
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d22015aad40b4316f0f74c8e410debca44c3e6e2
refs/heads/master: 2f7719ce54bf6e877987f6ef578b580a51d8c2e3
3 changes: 3 additions & 0 deletions trunk/include/net/bluetooth/l2cap.h
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,9 @@ struct l2cap_ops {
int (*recv) (void *data, struct sk_buff *skb);
void (*close) (void *data);
void (*state_change) (void *data, int state);
struct sk_buff *(*alloc_skb) (struct l2cap_chan *chan,
unsigned long len, int nb, int *err);

};

struct l2cap_conn {
Expand Down
23 changes: 15 additions & 8 deletions trunk/net/bluetooth/l2cap_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1520,7 +1520,6 @@ static void l2cap_send_srejtail(struct l2cap_chan *chan)

static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan, struct msghdr *msg, int len, int count, struct sk_buff *skb)
{
struct sock *sk = chan->sk;
struct l2cap_conn *conn = chan->conn;
struct sk_buff **frag;
int err, sent = 0;
Expand All @@ -1536,7 +1535,9 @@ static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan, struct msghdr
while (len) {
count = min_t(unsigned int, conn->mtu, len);

*frag = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
*frag = chan->ops->alloc_skb(chan, count,
msg->msg_flags & MSG_DONTWAIT, &err);

if (!*frag)
return err;
if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
Expand Down Expand Up @@ -1566,8 +1567,10 @@ static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
BT_DBG("sk %p len %d priority %u", sk, (int)len, priority);

count = min_t(unsigned int, (conn->mtu - hlen), len);
skb = bt_skb_send_alloc(sk, count + hlen,
msg->msg_flags & MSG_DONTWAIT, &err);

skb = chan->ops->alloc_skb(chan, count + hlen,
msg->msg_flags & MSG_DONTWAIT, &err);

if (!skb)
return ERR_PTR(err);

Expand Down Expand Up @@ -1600,8 +1603,10 @@ static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
BT_DBG("sk %p len %d", sk, (int)len);

count = min_t(unsigned int, (conn->mtu - hlen), len);
skb = bt_skb_send_alloc(sk, count + hlen,
msg->msg_flags & MSG_DONTWAIT, &err);

skb = chan->ops->alloc_skb(chan, count + hlen,
msg->msg_flags & MSG_DONTWAIT, &err);

if (!skb)
return ERR_PTR(err);

Expand Down Expand Up @@ -1647,8 +1652,10 @@ static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
hlen += L2CAP_FCS_SIZE;

count = min_t(unsigned int, (conn->mtu - hlen), len);
skb = bt_skb_send_alloc(sk, count + hlen,
msg->msg_flags & MSG_DONTWAIT, &err);

skb = chan->ops->alloc_skb(chan, count + hlen,
msg->msg_flags & MSG_DONTWAIT, &err);

if (!skb)
return ERR_PTR(err);

Expand Down
9 changes: 9 additions & 0 deletions trunk/net/bluetooth/l2cap_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -899,12 +899,21 @@ static void l2cap_sock_state_change_cb(void *data, int state)
sk->sk_state = state;
}

static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
unsigned long len, int nb, int *err)
{
struct sock *sk = chan->sk;

return bt_skb_send_alloc(sk, len, nb, err);
}

static struct l2cap_ops l2cap_chan_ops = {
.name = "L2CAP Socket Interface",
.new_connection = l2cap_sock_new_connection_cb,
.recv = l2cap_sock_recv_cb,
.close = l2cap_sock_close_cb,
.state_change = l2cap_sock_state_change_cb,
.alloc_skb = l2cap_sock_alloc_skb_cb,
};

static void l2cap_sock_destruct(struct sock *sk)
Expand Down

0 comments on commit 1db3972

Please sign in to comment.