Hi,

I’m studying the synchronization used on different parts of struct net_device 
and I’m struggling to understand how structure member modifications in 
dev_ioctl are synchronized.  Getters in dev_ifsioc_locked() are only holding 
rcu_read_lock() while setters in dev_ifsioc() are holding rtnl_lock, but not 
using RCU APIs.  I was specifically looking at SIOCGIFHWADDR/SIOCSIFHWADDR.  
What’s to prevent one CPU from executing a getter and another CPU from 
executing a setter resulting in possibly a torn read/write?  I didn’t see 
anything in rtnl_lock() that would wait for any rcu_reader_lock() critical 
sections (on other CPUs) to finish before acquiring the mutex.

Is there something about dev_ioctl that prevents parallel execution? or maybe 
something I still don’t understand about the RCU implementation?

Thanks,

Joel

Reply via email to