mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 12:44:11 +08:00
inet: prepare inet_base_seq() to run without RTNL
In the following patch, inet_base_seq() will no longer be called with RTNL held. Add READ_ONCE()/WRITE_ONCE() annotations in dev_base_seq_inc() and inet_base_seq(). Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3ddc2231c8
commit
590e92cdc8
@ -180,8 +180,9 @@ static DECLARE_RWSEM(devnet_rename_sem);
|
||||
|
||||
static inline void dev_base_seq_inc(struct net *net)
|
||||
{
|
||||
while (++net->dev_base_seq == 0)
|
||||
;
|
||||
unsigned int val = net->dev_base_seq + 1;
|
||||
|
||||
WRITE_ONCE(net->dev_base_seq, val ?: 1);
|
||||
}
|
||||
|
||||
static inline struct hlist_head *dev_name_hash(struct net *net, const char *name)
|
||||
|
@ -1837,7 +1837,7 @@ done:
|
||||
static u32 inet_base_seq(const struct net *net)
|
||||
{
|
||||
u32 res = atomic_read(&net->ipv4.dev_addr_genid) +
|
||||
net->dev_base_seq;
|
||||
READ_ONCE(net->dev_base_seq);
|
||||
|
||||
/* Must not return 0 (see nl_dump_check_consistent()).
|
||||
* Chose a value far away from 0.
|
||||
|
Loading…
Reference in New Issue
Block a user