Bluetooth: Assign L2CAP socket priority when allocating SKB
The SKB for L2CAP sockets are all allocated in a central callback in the socket support. Instead of having to pass around the socket priority all the time, assign it to skb->priority when actually allocating the SKB. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
parent
67f86a45bb
commit
8d46321c4f
@ -872,8 +872,7 @@ struct l2cap_chan *l2cap_chan_create(void);
|
|||||||
void l2cap_chan_close(struct l2cap_chan *chan, int reason);
|
void l2cap_chan_close(struct l2cap_chan *chan, int reason);
|
||||||
int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
|
int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
|
||||||
bdaddr_t *dst, u8 dst_type);
|
bdaddr_t *dst, u8 dst_type);
|
||||||
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
|
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len);
|
||||||
u32 priority);
|
|
||||||
void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
|
void l2cap_chan_busy(struct l2cap_chan *chan, int busy);
|
||||||
int l2cap_chan_check_security(struct l2cap_chan *chan);
|
int l2cap_chan_check_security(struct l2cap_chan *chan);
|
||||||
void l2cap_chan_set_defaults(struct l2cap_chan *chan);
|
void l2cap_chan_set_defaults(struct l2cap_chan *chan);
|
||||||
|
@ -63,7 +63,7 @@ void a2mp_send(struct amp_mgr *mgr, u8 code, u8 ident, u16 len, void *data)
|
|||||||
msg.msg_iov = (struct iovec *) &iv;
|
msg.msg_iov = (struct iovec *) &iv;
|
||||||
msg.msg_iovlen = 1;
|
msg.msg_iovlen = 1;
|
||||||
|
|
||||||
l2cap_chan_send(chan, &msg, total_len, 0);
|
l2cap_chan_send(chan, &msg, total_len);
|
||||||
|
|
||||||
kfree(cmd);
|
kfree(cmd);
|
||||||
}
|
}
|
||||||
|
@ -2141,8 +2141,6 @@ static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
|
|||||||
if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
|
if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
(*frag)->priority = skb->priority;
|
|
||||||
|
|
||||||
sent += count;
|
sent += count;
|
||||||
len -= count;
|
len -= count;
|
||||||
|
|
||||||
@ -2156,16 +2154,15 @@ static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
|
static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
|
||||||
struct msghdr *msg, size_t len,
|
struct msghdr *msg, size_t len)
|
||||||
u32 priority)
|
|
||||||
{
|
{
|
||||||
struct l2cap_conn *conn = chan->conn;
|
struct l2cap_conn *conn = chan->conn;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
|
int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
|
||||||
struct l2cap_hdr *lh;
|
struct l2cap_hdr *lh;
|
||||||
|
|
||||||
BT_DBG("chan %p psm 0x%2.2x len %zu priority %u", chan,
|
BT_DBG("chan %p psm 0x%2.2x len %zu", chan,
|
||||||
__le16_to_cpu(chan->psm), len, priority);
|
__le16_to_cpu(chan->psm), len);
|
||||||
|
|
||||||
count = min_t(unsigned int, (conn->mtu - hlen), len);
|
count = min_t(unsigned int, (conn->mtu - hlen), len);
|
||||||
|
|
||||||
@ -2174,8 +2171,6 @@ static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
|
|||||||
if (IS_ERR(skb))
|
if (IS_ERR(skb))
|
||||||
return skb;
|
return skb;
|
||||||
|
|
||||||
skb->priority = priority;
|
|
||||||
|
|
||||||
/* Create L2CAP header */
|
/* Create L2CAP header */
|
||||||
lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
|
lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
|
||||||
lh->cid = cpu_to_le16(chan->dcid);
|
lh->cid = cpu_to_le16(chan->dcid);
|
||||||
@ -2191,8 +2186,7 @@ static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
|
static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
|
||||||
struct msghdr *msg, size_t len,
|
struct msghdr *msg, size_t len)
|
||||||
u32 priority)
|
|
||||||
{
|
{
|
||||||
struct l2cap_conn *conn = chan->conn;
|
struct l2cap_conn *conn = chan->conn;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
@ -2208,8 +2202,6 @@ static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
|
|||||||
if (IS_ERR(skb))
|
if (IS_ERR(skb))
|
||||||
return skb;
|
return skb;
|
||||||
|
|
||||||
skb->priority = priority;
|
|
||||||
|
|
||||||
/* Create L2CAP header */
|
/* Create L2CAP header */
|
||||||
lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
|
lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
|
||||||
lh->cid = cpu_to_le16(chan->dcid);
|
lh->cid = cpu_to_le16(chan->dcid);
|
||||||
@ -2430,8 +2422,7 @@ static int l2cap_segment_le_sdu(struct l2cap_chan *chan,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
|
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
|
||||||
u32 priority)
|
|
||||||
{
|
{
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
int err;
|
int err;
|
||||||
@ -2442,7 +2433,7 @@ int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
|
|||||||
|
|
||||||
/* Connectionless channel */
|
/* Connectionless channel */
|
||||||
if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
|
if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
|
||||||
skb = l2cap_create_connless_pdu(chan, msg, len, priority);
|
skb = l2cap_create_connless_pdu(chan, msg, len);
|
||||||
if (IS_ERR(skb))
|
if (IS_ERR(skb))
|
||||||
return PTR_ERR(skb);
|
return PTR_ERR(skb);
|
||||||
|
|
||||||
@ -2499,7 +2490,7 @@ int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
|
|||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
|
|
||||||
/* Create a basic PDU */
|
/* Create a basic PDU */
|
||||||
skb = l2cap_create_basic_pdu(chan, msg, len, priority);
|
skb = l2cap_create_basic_pdu(chan, msg, len);
|
||||||
if (IS_ERR(skb))
|
if (IS_ERR(skb))
|
||||||
return PTR_ERR(skb);
|
return PTR_ERR(skb);
|
||||||
|
|
||||||
|
@ -964,7 +964,7 @@ static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
l2cap_chan_lock(chan);
|
l2cap_chan_lock(chan);
|
||||||
err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
|
err = l2cap_chan_send(chan, msg, len);
|
||||||
l2cap_chan_unlock(chan);
|
l2cap_chan_unlock(chan);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
@ -1305,6 +1305,8 @@ static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
|
|||||||
if (!skb)
|
if (!skb)
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
|
|
||||||
|
skb->priority = sk->sk_priority;
|
||||||
|
|
||||||
bt_cb(skb)->chan = chan;
|
bt_cb(skb)->chan = chan;
|
||||||
|
|
||||||
return skb;
|
return skb;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user