mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 02:36:21 +00:00
net/packet: convert po->running to an atomic flag
Instead of consuming 32 bits for po->running, use one available bit in po->flags. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
50d935eafe
commit
61edf47981
@ -340,14 +340,14 @@ static void __register_prot_hook(struct sock *sk)
|
||||
{
|
||||
struct packet_sock *po = pkt_sk(sk);
|
||||
|
||||
if (!po->running) {
|
||||
if (!packet_sock_flag(po, PACKET_SOCK_RUNNING)) {
|
||||
if (po->fanout)
|
||||
__fanout_link(sk, po);
|
||||
else
|
||||
dev_add_pack(&po->prot_hook);
|
||||
|
||||
sock_hold(sk);
|
||||
po->running = 1;
|
||||
packet_sock_flag_set(po, PACKET_SOCK_RUNNING, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -369,7 +369,7 @@ static void __unregister_prot_hook(struct sock *sk, bool sync)
|
||||
|
||||
lockdep_assert_held_once(&po->bind_lock);
|
||||
|
||||
po->running = 0;
|
||||
packet_sock_flag_set(po, PACKET_SOCK_RUNNING, 0);
|
||||
|
||||
if (po->fanout)
|
||||
__fanout_unlink(sk, po);
|
||||
@ -389,7 +389,7 @@ static void unregister_prot_hook(struct sock *sk, bool sync)
|
||||
{
|
||||
struct packet_sock *po = pkt_sk(sk);
|
||||
|
||||
if (po->running)
|
||||
if (packet_sock_flag(po, PACKET_SOCK_RUNNING))
|
||||
__unregister_prot_hook(sk, sync);
|
||||
}
|
||||
|
||||
@ -1782,7 +1782,7 @@ static int fanout_add(struct sock *sk, struct fanout_args *args)
|
||||
err = -EINVAL;
|
||||
|
||||
spin_lock(&po->bind_lock);
|
||||
if (po->running &&
|
||||
if (packet_sock_flag(po, PACKET_SOCK_RUNNING) &&
|
||||
match->type == type &&
|
||||
match->prot_hook.type == po->prot_hook.type &&
|
||||
match->prot_hook.dev == po->prot_hook.dev) {
|
||||
@ -3222,7 +3222,7 @@ static int packet_do_bind(struct sock *sk, const char *name, int ifindex,
|
||||
|
||||
if (need_rehook) {
|
||||
dev_hold(dev);
|
||||
if (po->running) {
|
||||
if (packet_sock_flag(po, PACKET_SOCK_RUNNING)) {
|
||||
rcu_read_unlock();
|
||||
/* prevents packet_notifier() from calling
|
||||
* register_prot_hook()
|
||||
@ -3235,7 +3235,7 @@ static int packet_do_bind(struct sock *sk, const char *name, int ifindex,
|
||||
dev->ifindex);
|
||||
}
|
||||
|
||||
BUG_ON(po->running);
|
||||
BUG_ON(packet_sock_flag(po, PACKET_SOCK_RUNNING));
|
||||
WRITE_ONCE(po->num, proto);
|
||||
po->prot_hook.type = proto;
|
||||
|
||||
@ -4159,7 +4159,7 @@ static int packet_notifier(struct notifier_block *this,
|
||||
case NETDEV_DOWN:
|
||||
if (dev->ifindex == po->ifindex) {
|
||||
spin_lock(&po->bind_lock);
|
||||
if (po->running) {
|
||||
if (packet_sock_flag(po, PACKET_SOCK_RUNNING)) {
|
||||
__unregister_prot_hook(sk, false);
|
||||
sk->sk_err = ENETDOWN;
|
||||
if (!sock_flag(sk, SOCK_DEAD))
|
||||
@ -4470,7 +4470,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
|
||||
|
||||
/* Detach socket from network */
|
||||
spin_lock(&po->bind_lock);
|
||||
was_running = po->running;
|
||||
was_running = packet_sock_flag(po, PACKET_SOCK_RUNNING);
|
||||
num = po->num;
|
||||
if (was_running) {
|
||||
WRITE_ONCE(po->num, 0);
|
||||
@ -4681,7 +4681,7 @@ static int packet_seq_show(struct seq_file *seq, void *v)
|
||||
s->sk_type,
|
||||
ntohs(READ_ONCE(po->num)),
|
||||
READ_ONCE(po->ifindex),
|
||||
po->running,
|
||||
packet_sock_flag(po, PACKET_SOCK_RUNNING),
|
||||
atomic_read(&s->sk_rmem_alloc),
|
||||
from_kuid_munged(seq_user_ns(seq), sock_i_uid(s)),
|
||||
sock_i_ino(s));
|
||||
|
@ -21,7 +21,7 @@ static int pdiag_put_info(const struct packet_sock *po, struct sk_buff *nlskb)
|
||||
pinfo.pdi_tstamp = READ_ONCE(po->tp_tstamp);
|
||||
|
||||
pinfo.pdi_flags = 0;
|
||||
if (po->running)
|
||||
if (packet_sock_flag(po, PACKET_SOCK_RUNNING))
|
||||
pinfo.pdi_flags |= PDI_RUNNING;
|
||||
if (packet_sock_flag(po, PACKET_SOCK_AUXDATA))
|
||||
pinfo.pdi_flags |= PDI_AUXDATA;
|
||||
|
@ -117,7 +117,6 @@ struct packet_sock {
|
||||
spinlock_t bind_lock;
|
||||
struct mutex pg_vec_lock;
|
||||
unsigned long flags;
|
||||
unsigned int running; /* bind_lock must be held */
|
||||
int pressure;
|
||||
int ifindex; /* bound device */
|
||||
__be16 num;
|
||||
@ -146,6 +145,7 @@ enum packet_sock_flags {
|
||||
PACKET_SOCK_TX_HAS_OFF,
|
||||
PACKET_SOCK_TP_LOSS,
|
||||
PACKET_SOCK_HAS_VNET_HDR,
|
||||
PACKET_SOCK_RUNNING,
|
||||
};
|
||||
|
||||
static inline void packet_sock_flag_set(struct packet_sock *po,
|
||||
|
Loading…
x
Reference in New Issue
Block a user