net: wrap sock->sk_cgrp_prioidx and ->sk_classid inside a struct
Introduce sock->sk_cgrp_data which is a struct sock_cgroup_data. ->sk_cgroup_prioidx and ->sk_classid are moved into it. The struct and its accessors are defined in cgroup-defs.h. This is to prepare for overloading the fields with a cgroup pointer. This patch mostly performs equivalent conversions but the followings are noteworthy. * Equality test before updating classid is removed from sock_update_classid(). This shouldn't make any noticeable difference and a similar test will be implemented on the helper side later. * sock_update_netprioidx() now takes struct sock_cgroup_data and can be moved to netprio_cgroup.h without causing include dependency loop. Moved. * The dummy version of sock_update_netprioidx() converted to a static inline function while at it. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
297dbde19c
commit
2a56a1fec2
@@ -2929,7 +2929,8 @@ static void skb_update_prio(struct sk_buff *skb)
|
||||
struct netprio_map *map = rcu_dereference_bh(skb->dev->priomap);
|
||||
|
||||
if (!skb->priority && skb->sk && map) {
|
||||
unsigned int prioidx = skb->sk->sk_cgrp_prioidx;
|
||||
unsigned int prioidx =
|
||||
sock_cgroup_prioidx(&skb->sk->sk_cgrp_data);
|
||||
|
||||
if (prioidx < map->priomap_len)
|
||||
skb->priority = map->priomap[prioidx];
|
||||
|
@@ -62,8 +62,8 @@ static int update_classid_sock(const void *v, struct file *file, unsigned n)
|
||||
struct socket *sock = sock_from_file(file, &err);
|
||||
|
||||
if (sock)
|
||||
sock->sk->sk_classid = (u32)(unsigned long)v;
|
||||
|
||||
sock_cgroup_set_classid(&sock->sk->sk_cgrp_data,
|
||||
(unsigned long)v);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -223,7 +223,8 @@ static int update_netprio(const void *v, struct file *file, unsigned n)
|
||||
int err;
|
||||
struct socket *sock = sock_from_file(file, &err);
|
||||
if (sock)
|
||||
sock->sk->sk_cgrp_prioidx = (u32)(unsigned long)v;
|
||||
sock_cgroup_set_prioidx(&sock->sk->sk_cgrp_data,
|
||||
(unsigned long)v);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@@ -289,8 +289,8 @@ void scm_detach_fds(struct msghdr *msg, struct scm_cookie *scm)
|
||||
/* Bump the usage count and install the file. */
|
||||
sock = sock_from_file(fp[i], &err);
|
||||
if (sock) {
|
||||
sock_update_netprioidx(sock->sk);
|
||||
sock_update_classid(sock->sk);
|
||||
sock_update_netprioidx(&sock->sk->sk_cgrp_data);
|
||||
sock_update_classid(&sock->sk->sk_cgrp_data);
|
||||
}
|
||||
fd_install(new_fd, get_file(fp[i]));
|
||||
}
|
||||
|
@@ -1393,17 +1393,6 @@ static void sk_prot_free(struct proto *prot, struct sock *sk)
|
||||
module_put(owner);
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_CGROUP_NET_PRIO)
|
||||
void sock_update_netprioidx(struct sock *sk)
|
||||
{
|
||||
if (in_interrupt())
|
||||
return;
|
||||
|
||||
sk->sk_cgrp_prioidx = task_netprioidx(current);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sock_update_netprioidx);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* sk_alloc - All socket objects are allocated here
|
||||
* @net: the applicable net namespace
|
||||
@@ -1432,8 +1421,8 @@ struct sock *sk_alloc(struct net *net, int family, gfp_t priority,
|
||||
sock_net_set(sk, net);
|
||||
atomic_set(&sk->sk_wmem_alloc, 1);
|
||||
|
||||
sock_update_classid(sk);
|
||||
sock_update_netprioidx(sk);
|
||||
sock_update_classid(&sk->sk_cgrp_data);
|
||||
sock_update_netprioidx(&sk->sk_cgrp_data);
|
||||
}
|
||||
|
||||
return sk;
|
||||
|
Reference in New Issue
Block a user