From b45832c9cafb9e6c86365fd7bed52114aafe0e83 Mon Sep 17 00:00:00 2001 From: Li Zefan Date: Thu, 25 Dec 2008 13:32:15 +0800 Subject: [PATCH] --- yaml --- r: 125767 b: refs/heads/master c: d8e9650dff48055057253ca30933605bd7d0733b h: refs/heads/master i: 125765: 0025f15350aaafd06d04f2cfd81dc09f15efa5b5 125763: 66c4ce4f51d8e835885f987ced5412bed0a5ebf6 125759: 514de885ecbcf3d678d95e0ae560ac0731865ff5 v: v3 --- [refs] | 2 +- trunk/fs/filesystems.c | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index bd90d8971b10..3ed4da32ba44 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4c728ef583b3d82266584da5cb068294c09df31e +refs/heads/master: d8e9650dff48055057253ca30933605bd7d0733b diff --git a/trunk/fs/filesystems.c b/trunk/fs/filesystems.c index d0e20ced62dd..d488dcd7f2bb 100644 --- a/trunk/fs/filesystems.c +++ b/trunk/fs/filesystems.c @@ -253,24 +253,27 @@ static int __init proc_filesystems_init(void) module_init(proc_filesystems_init); #endif -struct file_system_type *get_fs_type(const char *name) +static struct file_system_type *__get_fs_type(const char *name, int len) { struct file_system_type *fs; - const char *dot = strchr(name, '.'); - unsigned len = dot ? dot - name : strlen(name); read_lock(&file_systems_lock); fs = *(find_filesystem(name, len)); if (fs && !try_module_get(fs->owner)) fs = NULL; read_unlock(&file_systems_lock); - if (!fs && (request_module("%.*s", len, name) == 0)) { - read_lock(&file_systems_lock); - fs = *(find_filesystem(name, len)); - if (fs && !try_module_get(fs->owner)) - fs = NULL; - read_unlock(&file_systems_lock); - } + return fs; +} + +struct file_system_type *get_fs_type(const char *name) +{ + struct file_system_type *fs; + const char *dot = strchr(name, '.'); + int len = dot ? dot - name : strlen(name); + + fs = __get_fs_type(name, len); + if (!fs && (request_module("%.*s", len, name) == 0)) + fs = __get_fs_type(name, len); if (dot && fs && !(fs->fs_flags & FS_HAS_SUBTYPE)) { put_filesystem(fs);