diff options
author | Arnd Bergmann <arnd@arndb.de> | 2012-10-11 09:20:00 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-10-11 20:02:16 -0400 |
commit | 98f6ef64b15a48f15062aff5d143b5d9a6ae7711 (patch) | |
tree | 83220a8a4bca542c4044dd30f836c98af481125e | |
parent | 808d4e3cfdcc52b19276175464f6dbca4df13b09 (diff) |
vfs: bogus warnings in fs/namei.c
The follow_link() function always initializes its *p argument,
or returns an error, but when building with 'gcc -s', the compiler
gets confused by the __always_inline attribute to the function
and can no longer detect where the cookie was initialized.
The solution is to always initialize the pointer from follow_link,
even in the error path. When building with -O2, this has zero impact
on generated code and adds a single instruction in the error path
for a -Os build on ARM.
Without this patch, building with gcc-4.6 through gcc-4.8 and
CONFIG_CC_OPTIMIZE_FOR_SIZE results in:
fs/namei.c: In function 'link_path_walk':
fs/namei.c:649:24: warning: 'cookie' may be used uninitialized in this function [-Wuninitialized]
fs/namei.c:1544:9: note: 'cookie' was declared here
fs/namei.c: In function 'path_lookupat':
fs/namei.c:649:24: warning: 'cookie' may be used uninitialized in this function [-Wuninitialized]
fs/namei.c:1934:10: note: 'cookie' was declared here
fs/namei.c: In function 'path_openat':
fs/namei.c:649:24: warning: 'cookie' may be used uninitialized in this function [-Wuninitialized]
fs/namei.c:2899:9: note: 'cookie' was declared here
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | fs/namei.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/namei.c b/fs/namei.c index 6d47fac64292..c1f18e4f034c 100644 --- a/fs/namei.c +++ b/fs/namei.c | |||
@@ -810,6 +810,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p) | |||
810 | return error; | 810 | return error; |
811 | 811 | ||
812 | out_put_nd_path: | 812 | out_put_nd_path: |
813 | *p = NULL; | ||
813 | path_put(&nd->path); | 814 | path_put(&nd->path); |
814 | path_put(link); | 815 | path_put(link); |
815 | return error; | 816 | return error; |