diff options
author | Alexey Dobriyan <adobriyan@gmail.com> | 2017-11-17 15:26:52 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-11-17 16:10:00 -0800 |
commit | 0746a0bc6e6e76444098cf944848554d21d28cae (patch) | |
tree | 2287ccc2e1964153844f291052820e69f6c115a8 /fs/proc | |
parent | 3ee2a19908f27b8fea8ff14ffa8b755585eb7b4a (diff) | |
download | linux-0746a0bc6e6e76444098cf944848554d21d28cae.tar.gz linux-0746a0bc6e6e76444098cf944848554d21d28cae.tar.bz2 linux-0746a0bc6e6e76444098cf944848554d21d28cae.zip |
proc: use do-while in name_to_int()
Gcc doesn't know that "len" is guaranteed to be >=1 by dcache and
generates standard while-loop prologue duplicating loop condition.
add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-27 (-27)
function old new delta
name_to_int 104 77 -27
Link: http://lkml.kernel.org/r/20170912195213.GB17730@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>
Diffstat (limited to 'fs/proc')
-rw-r--r-- | fs/proc/util.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/proc/util.c b/fs/proc/util.c index c29aa497394b..b161cfa0f9fa 100644 --- a/fs/proc/util.c +++ b/fs/proc/util.c @@ -8,7 +8,7 @@ unsigned name_to_int(const struct qstr *qstr) if (len > 1 && *name == '0') goto out; - while (len-- > 0) { + do { unsigned c = *name++ - '0'; if (c > 9) goto out; @@ -16,7 +16,7 @@ unsigned name_to_int(const struct qstr *qstr) goto out; n *= 10; n += c; - } + } while (--len > 0); return n; out: return ~0U; |