f2fs: report error of f2fs_create_root_stats
authorChao Yu <chao2.yu@samsung.com>
Thu, 29 Oct 2015 01:13:04 +0000 (09:13 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 4 Dec 2015 19:52:33 +0000 (11:52 -0800)
f2fs_create_root_stats can fail due to no memory, report it to user.

Signed-off-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/debug.c
fs/f2fs/f2fs.h
fs/f2fs/super.c

index 478e5d54154f5b8e1faed3f5b2414c43475b06d5..b0966f3b1c9a8126938b65d5f4cfb97976d47b03 100644 (file)
@@ -406,20 +406,23 @@ void f2fs_destroy_stats(struct f2fs_sb_info *sbi)
        kfree(si);
 }
 
-void __init f2fs_create_root_stats(void)
+int __init f2fs_create_root_stats(void)
 {
        struct dentry *file;
 
        f2fs_debugfs_root = debugfs_create_dir("f2fs", NULL);
        if (!f2fs_debugfs_root)
-               return;
+               return -ENOMEM;
 
        file = debugfs_create_file("status", S_IRUGO, f2fs_debugfs_root,
                        NULL, &stat_fops);
        if (!file) {
                debugfs_remove(f2fs_debugfs_root);
                f2fs_debugfs_root = NULL;
+               return -ENOMEM;
        }
+
+       return 0;
 }
 
 void f2fs_destroy_root_stats(void)
index 9db5500d63d9805437a028fcedd0820a1ebf5135..3f1570c4fcf05d911e88537392270a713d955867 100644 (file)
@@ -1987,7 +1987,7 @@ static inline struct f2fs_stat_info *F2FS_STAT(struct f2fs_sb_info *sbi)
 
 int f2fs_build_stats(struct f2fs_sb_info *);
 void f2fs_destroy_stats(struct f2fs_sb_info *);
-void __init f2fs_create_root_stats(void);
+int __init f2fs_create_root_stats(void);
 void f2fs_destroy_root_stats(void);
 #else
 #define stat_inc_cp_count(si)
@@ -2015,7 +2015,7 @@ void f2fs_destroy_root_stats(void);
 
 static inline int f2fs_build_stats(struct f2fs_sb_info *sbi) { return 0; }
 static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { }
-static inline void __init f2fs_create_root_stats(void) { }
+static inline int __init f2fs_create_root_stats(void) { return 0; }
 static inline void f2fs_destroy_root_stats(void) { }
 #endif
 
index 3a65e013235283e2b0fd1f8e6afe6790b0af41a6..67864ab376c89993e46fec34af5d25ede0da46a2 100644 (file)
@@ -1478,10 +1478,14 @@ static int __init init_f2fs_fs(void)
        err = register_filesystem(&f2fs_fs_type);
        if (err)
                goto free_shrinker;
-       f2fs_create_root_stats();
+       err = f2fs_create_root_stats();
+       if (err)
+               goto free_filesystem;
        f2fs_proc_root = proc_mkdir("fs/f2fs", NULL);
        return 0;
 
+free_filesystem:
+       unregister_filesystem(&f2fs_fs_type);
 free_shrinker:
        unregister_shrinker(&f2fs_shrinker_info);
 free_crypto: