Commit 16bda13d authored by David S. Miller's avatar David S. Miller

net: Make qdisc_skb_cb upper size bound explicit.

Just like skb->cb[], so that qdisc_skb_cb can be encapsulated inside
of other data structures.

This is intended to be used by IPoIB so that it can remember
addressing information stored at hard_header_ops->create() time that
it can fetch when the packet gets to the transmit routine.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9cc00b51
...@@ -220,9 +220,16 @@ struct tcf_proto { ...@@ -220,9 +220,16 @@ struct tcf_proto {
struct qdisc_skb_cb { struct qdisc_skb_cb {
unsigned int pkt_len; unsigned int pkt_len;
long data[]; unsigned char data[24];
}; };
static inline void qdisc_cb_private_validate(const struct sk_buff *skb, int sz)
{
struct qdisc_skb_cb *qcb;
BUILD_BUG_ON(sizeof(skb->cb) < sizeof(unsigned int) + sz);
BUILD_BUG_ON(sizeof(qcb->data) < sz);
}
static inline int qdisc_qlen(const struct Qdisc *q) static inline int qdisc_qlen(const struct Qdisc *q)
{ {
return q->q.qlen; return q->q.qlen;
......
...@@ -148,8 +148,7 @@ struct choke_skb_cb { ...@@ -148,8 +148,7 @@ struct choke_skb_cb {
static inline struct choke_skb_cb *choke_skb_cb(const struct sk_buff *skb) static inline struct choke_skb_cb *choke_skb_cb(const struct sk_buff *skb)
{ {
BUILD_BUG_ON(sizeof(skb->cb) < qdisc_cb_private_validate(skb, sizeof(struct choke_skb_cb));
sizeof(struct qdisc_skb_cb) + sizeof(struct choke_skb_cb));
return (struct choke_skb_cb *)qdisc_skb_cb(skb)->data; return (struct choke_skb_cb *)qdisc_skb_cb(skb)->data;
} }
......
...@@ -130,8 +130,7 @@ struct netem_skb_cb { ...@@ -130,8 +130,7 @@ struct netem_skb_cb {
static inline struct netem_skb_cb *netem_skb_cb(struct sk_buff *skb) static inline struct netem_skb_cb *netem_skb_cb(struct sk_buff *skb)
{ {
BUILD_BUG_ON(sizeof(skb->cb) < qdisc_cb_private_validate(skb, sizeof(struct netem_skb_cb));
sizeof(struct qdisc_skb_cb) + sizeof(struct netem_skb_cb));
return (struct netem_skb_cb *)qdisc_skb_cb(skb)->data; return (struct netem_skb_cb *)qdisc_skb_cb(skb)->data;
} }
......
...@@ -94,8 +94,7 @@ struct sfb_skb_cb { ...@@ -94,8 +94,7 @@ struct sfb_skb_cb {
static inline struct sfb_skb_cb *sfb_skb_cb(const struct sk_buff *skb) static inline struct sfb_skb_cb *sfb_skb_cb(const struct sk_buff *skb)
{ {
BUILD_BUG_ON(sizeof(skb->cb) < qdisc_cb_private_validate(skb, sizeof(struct sfb_skb_cb));
sizeof(struct qdisc_skb_cb) + sizeof(struct sfb_skb_cb));
return (struct sfb_skb_cb *)qdisc_skb_cb(skb)->data; return (struct sfb_skb_cb *)qdisc_skb_cb(skb)->data;
} }
......
...@@ -166,9 +166,8 @@ struct sfq_skb_cb { ...@@ -166,9 +166,8 @@ struct sfq_skb_cb {
static inline struct sfq_skb_cb *sfq_skb_cb(const struct sk_buff *skb) static inline struct sfq_skb_cb *sfq_skb_cb(const struct sk_buff *skb)
{ {
BUILD_BUG_ON(sizeof(skb->cb) < qdisc_cb_private_validate(skb, sizeof(struct sfq_skb_cb));
sizeof(struct qdisc_skb_cb) + sizeof(struct sfq_skb_cb)); return (struct sfq_skb_cb *)qdisc_skb_cb(skb)->data;
return (struct sfq_skb_cb *)qdisc_skb_cb(skb)->data;
} }
static unsigned int sfq_hash(const struct sfq_sched_data *q, static unsigned int sfq_hash(const struct sfq_sched_data *q,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment