mm/slub.c: avoid double string traverse in kmem_cache_flags()
authorYury Norov <yury.norov@gmail.com>
Fri, 12 Jul 2019 03:53:33 +0000 (20:53 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 12 Jul 2019 18:05:41 +0000 (11:05 -0700)
If ',' is not found, kmem_cache_flags() calls strlen() to find the end of
line.  We can do it in a single pass using strchrnul().

Link: http://lkml.kernel.org/r/20190501053111.7950-1-ynorov@marvell.com
Signed-off-by: Yury Norov <ynorov@marvell.com>
Acked-by: Aaron Tomlin <atomlin@redhat.com>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/slub.c

index cd04dbd2b5d0533c1ecd3919f4b067ee9047e693..1802c87799ffcb1594d9ab65ffc5a635b4e7d9c1 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -1313,9 +1313,7 @@ slab_flags_t kmem_cache_flags(unsigned int object_size,
                char *end, *glob;
                size_t cmplen;
 
-               end = strchr(iter, ',');
-               if (!end)
-                       end = iter + strlen(iter);
+               end = strchrnul(iter, ',');
 
                glob = strnchr(iter, end - iter, '*');
                if (glob)