diff options
author | Li Zefan <lizf@cn.fujitsu.com> | 2008-12-25 00:32:15 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-01-05 11:54:29 -0500 |
commit | d8e9650dff48055057253ca30933605bd7d0733b (patch) | |
tree | 5121e02ebb787413adfbba34ec84860474b7c660 /fs/filesystems.c | |
parent | 4c728ef583b3d82266584da5cb068294c09df31e (diff) |
vfs: remove duplicate code in get_fs_type()
save 14 bytes:
text data bss dec hex filename
1354 32 4 1390 56e fs/filesystems.o.before
text data bss dec hex filename
1340 32 4 1376 560 fs/filesystems.o
Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/filesystems.c')
-rw-r--r-- | fs/filesystems.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/fs/filesystems.c b/fs/filesystems.c index d0e20ced62dd..d488dcd7f2bb 100644 --- a/fs/filesystems.c +++ b/fs/filesystems.c | |||
@@ -253,24 +253,27 @@ static int __init proc_filesystems_init(void) | |||
253 | module_init(proc_filesystems_init); | 253 | module_init(proc_filesystems_init); |
254 | #endif | 254 | #endif |
255 | 255 | ||
256 | struct file_system_type *get_fs_type(const char *name) | 256 | static struct file_system_type *__get_fs_type(const char *name, int len) |
257 | { | 257 | { |
258 | struct file_system_type *fs; | 258 | struct file_system_type *fs; |
259 | const char *dot = strchr(name, '.'); | ||
260 | unsigned len = dot ? dot - name : strlen(name); | ||
261 | 259 | ||
262 | read_lock(&file_systems_lock); | 260 | read_lock(&file_systems_lock); |
263 | fs = *(find_filesystem(name, len)); | 261 | fs = *(find_filesystem(name, len)); |
264 | if (fs && !try_module_get(fs->owner)) | 262 | if (fs && !try_module_get(fs->owner)) |
265 | fs = NULL; | 263 | fs = NULL; |
266 | read_unlock(&file_systems_lock); | 264 | read_unlock(&file_systems_lock); |
267 | if (!fs && (request_module("%.*s", len, name) == 0)) { | 265 | return fs; |
268 | read_lock(&file_systems_lock); | 266 | } |
269 | fs = *(find_filesystem(name, len)); | 267 | |
270 | if (fs && !try_module_get(fs->owner)) | 268 | struct file_system_type *get_fs_type(const char *name) |
271 | fs = NULL; | 269 | { |
272 | read_unlock(&file_systems_lock); | 270 | struct file_system_type *fs; |
273 | } | 271 | const char *dot = strchr(name, '.'); |
272 | int len = dot ? dot - name : strlen(name); | ||
273 | |||
274 | fs = __get_fs_type(name, len); | ||
275 | if (!fs && (request_module("%.*s", len, name) == 0)) | ||
276 | fs = __get_fs_type(name, len); | ||
274 | 277 | ||
275 | if (dot && fs && !(fs->fs_flags & FS_HAS_SUBTYPE)) { | 278 | if (dot && fs && !(fs->fs_flags & FS_HAS_SUBTYPE)) { |
276 | put_filesystem(fs); | 279 | put_filesystem(fs); |