|
@@ -3278,15 +3278,23 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
|
|
|
#if IS_ENABLED(CONFIG_CGROUP_NET_PRIO)
|
|
|
static void skb_update_prio(struct sk_buff *skb)
|
|
|
{
|
|
|
- struct netprio_map *map = rcu_dereference_bh(skb->dev->priomap);
|
|
|
+ const struct netprio_map *map;
|
|
|
+ const struct sock *sk;
|
|
|
+ unsigned int prioidx;
|
|
|
|
|
|
- if (!skb->priority && skb->sk && map) {
|
|
|
- unsigned int prioidx =
|
|
|
- sock_cgroup_prioidx(&skb->sk->sk_cgrp_data);
|
|
|
+ if (skb->priority)
|
|
|
+ return;
|
|
|
+ map = rcu_dereference_bh(skb->dev->priomap);
|
|
|
+ if (!map)
|
|
|
+ return;
|
|
|
+ sk = skb_to_full_sk(skb);
|
|
|
+ if (!sk)
|
|
|
+ return;
|
|
|
|
|
|
- if (prioidx < map->priomap_len)
|
|
|
- skb->priority = map->priomap[prioidx];
|
|
|
- }
|
|
|
+ prioidx = sock_cgroup_prioidx(&sk->sk_cgrp_data);
|
|
|
+
|
|
|
+ if (prioidx < map->priomap_len)
|
|
|
+ skb->priority = map->priomap[prioidx];
|
|
|
}
|
|
|
#else
|
|
|
#define skb_update_prio(skb)
|