On Mon, 2017-10-02 at 12:27 +0200, Florian Westphal wrote: > Device alias can be set by either rtnetlink (rtnl is held) or sysfs. > > rtnetlink hold the rtnl mutex, sysfs acquires it for this purpose. > Add an extra mutex for it plus a seqcount to get a consistent snapshot > of the alias buffer.
> +int dev_get_alias(const struct net_device *dev, char *alias, size_t len) > +{ > + unsigned int seq; > + int ret; > + > + for (;;) { > + const char *name; > + > + ret = 0; > + rcu_read_lock(); > + name = rcu_dereference(dev->ifalias); > + seq = raw_seqcount_begin(&ifalias_rename_seq); > + if (name) > + ret = snprintf(alias, len, "%s", name); > + rcu_read_unlock(); > + > + if (!read_seqcount_retry(&ifalias_rename_seq, seq)) > + break; > + > + cond_resched(); > + } > + > + return ret; > +} I believe this too complex and not needed. Just use RCU : A writer is supposed to work on a private copy, and _then_ publish the new pointer, so that a reader can not see mangled string. We either copy the 'old' name or the 'new' one. A seqcount is not needed, and wont prevent you from reading the value right before a change anyway.