On Sat, Mar 16, 2013 at 10:23:51PM +0100, Oleg Nesterov wrote: > On 03/16, Andi Kleen wrote: > > > > > Perhaps rcu can be better, although a global rwsem looks simpler, > > > I dunno. > > > > It's a general problem with lots of sysctls. > > > > > > But argv_split() or its usage should be changed anyway, and GFP_KERNEL > > > won't work under rcu_read_lock(). > > > > rcu strings has a helper function to copy the string for sleepy cases. > > Then you need to pre-allocate, take rcu_read_lock(), copy, and check > that it actually fits the pre-allocated buffer. Not sure why the simple > rwsem is worse.
The reason I did it originally like that was that some of the sysctls weren't as "slow path" as power off. And for anything that is even moderately often used a global lock is going to hurt eventually. The "read" in the sem also doesn't help because it's still a hot cache line. I agree if it the goal was only to fix poweroff RCU is somewhat overkill and a global lock would be fine. > But I won't argue in any case > > > > To me 1/2 looks as a simplification anyway, but I won't argue if we > > > decide to add rcu/locking and avoid this patch. > > > > Ok I'll revisit. > > OK, but do you agree with 1/2? It doesn't solve the race alone because when the 0 byte can move it's not safe to run kstrndup() in parallel. Ok given the n and that it force terminates it could only lead to some junk at the end. But it seems like a useful small optimization, although I don't know if it's used in any non slow paths. I assume you audited all callers that they comprehend that they need to free differently now. -Andi -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/