Re: [PATCH 1/2] genl: Fix genl dumpit() locking.
From: Pravin Shelar <hidden>
Date: 2013-08-22 18:10:22
On Thu, Aug 22, 2013 at 10:51 AM, Johannes Berg [off-list ref] wrote:
On Thu, 2013-08-22 at 10:42 -0700, Pravin Shelar wrote:quoted
On Thu, Aug 22, 2013 at 12:36 AM, Johannes Berg [off-list ref] wrote:quoted
On Wed, 2013-08-21 at 20:58 -0700, Pravin B Shelar wrote:quoted
In case of genl-family with parallel ops off, dumpif() callback is expected to run under genl_lock, But commit def3117493eafd9df (genl: Allow concurrent genl callbacks.) changed this behaviour where only first dumpit() op was called under genl-lock. For subsequent dump, only nlk->cb_lock was taken. Following patch fixes it by defining locked dumpit() and done() callback which takes care of genl-locking.As I've commented over in the other thread, I really think this is the wrong thing to do. It was never the case that dumpit() was actually locked under genl_lock(), and adding it doesn't really help anyone.If you look at commit def3117493eafd9df , it removes assignment of cb_mutex to genl_mutex. Thats how genl-dump operation was called under genl_mutex.By the way - why? This just means that netlink will allocate another lock to lock it all, so it's not a very useful change?
This replaces global genl-lock with per-socket lock which allows parallel operation in parallel-genl-families and they are not blocked due to other unrelated genl-family operations.