proc: : uninline name_to_int()
authorAlexey Dobriyan <adobriyan@gmail.com>
Fri, 17 Nov 2017 23:26:49 +0000 (15:26 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 18 Nov 2017 00:10:00 +0000 (16:10 -0800)
Save ~360 bytes.

add/remove: 1/0 grow/shrink: 0/4 up/down: 104/-463 (-359)
function                                     old     new   delta
name_to_int                                    -     104    +104
proc_pid_lookup                              217     126     -91
proc_lookupfd_common                         212     121     -91
proc_task_lookup                             289     194     -95
__proc_create                                588     402    -186

Link: http://lkml.kernel.org/r/20170912194850.GA17730@avx2
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/proc/Makefile
fs/proc/internal.h
fs/proc/util.c [new file with mode: 0644]

index f7456c4..ead487e 100644 (file)
@@ -21,6 +21,7 @@ proc-y        += loadavg.o
 proc-y += meminfo.o
 proc-y += stat.o
 proc-y += uptime.o
+proc-y += util.o
 proc-y += version.o
 proc-y += softirqs.o
 proc-y += namespaces.o
index a34195e..9aad373 100644 (file)
@@ -103,28 +103,7 @@ static inline struct task_struct *get_proc_task(struct inode *inode)
 void task_dump_owner(struct task_struct *task, mode_t mode,
                     kuid_t *ruid, kgid_t *rgid);
 
-static inline unsigned name_to_int(const struct qstr *qstr)
-{
-       const char *name = qstr->name;
-       int len = qstr->len;
-       unsigned n = 0;
-
-       if (len > 1 && *name == '0')
-               goto out;
-       while (len-- > 0) {
-               unsigned c = *name++ - '0';
-               if (c > 9)
-                       goto out;
-               if (n >= (~0U-9)/10)
-                       goto out;
-               n *= 10;
-               n += c;
-       }
-       return n;
-out:
-       return ~0U;
-}
-
+unsigned name_to_int(const struct qstr *qstr);
 /*
  * Offset of the first process in the /proc root directory..
  */
diff --git a/fs/proc/util.c b/fs/proc/util.c
new file mode 100644 (file)
index 0000000..c29aa49
--- /dev/null
@@ -0,0 +1,23 @@
+#include <linux/dcache.h>
+
+unsigned name_to_int(const struct qstr *qstr)
+{
+       const char *name = qstr->name;
+       int len = qstr->len;
+       unsigned n = 0;
+
+       if (len > 1 && *name == '0')
+               goto out;
+       while (len-- > 0) {
+               unsigned c = *name++ - '0';
+               if (c > 9)
+                       goto out;
+               if (n >= (~0U-9)/10)
+                       goto out;
+               n *= 10;
+               n += c;
+       }
+       return n;
+out:
+       return ~0U;
+}