kernel/umh.c: optimize 'proc_cap_handler()'
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Fri, 17 Nov 2017 23:27:32 +0000 (15:27 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 18 Nov 2017 00:10:01 +0000 (16:10 -0800)
If 'write' is 0, we can avoid a call to spin_lock/spin_unlock.

Link: http://lkml.kernel.org/r/20171020193331.7233-1-christophe.jaillet@wanadoo.fr
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Acked-by: Luis R. Rodriguez <mcgrof@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/umh.c

index 6ff9905250ff0563713c64585a74e888de70f343..18e5fa4b0e71913087585429e561d9eb4e30b73d 100644 (file)
@@ -537,14 +537,14 @@ static int proc_cap_handler(struct ctl_table *table, int write,
        /*
         * Drop everything not in the new_cap (but don't add things)
         */
-       spin_lock(&umh_sysctl_lock);
        if (write) {
+               spin_lock(&umh_sysctl_lock);
                if (table->data == CAP_BSET)
                        usermodehelper_bset = cap_intersect(usermodehelper_bset, new_cap);
                if (table->data == CAP_PI)
                        usermodehelper_inheritable = cap_intersect(usermodehelper_inheritable, new_cap);
+               spin_unlock(&umh_sysctl_lock);
        }
-       spin_unlock(&umh_sysctl_lock);
 
        return 0;
 }