ceph: fix potential memory leak in init_caches()
authorChengguang Xu <cgxu519@icloud.com>
Thu, 1 Mar 2018 06:24:51 +0000 (14:24 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Thu, 1 Mar 2018 15:39:47 +0000 (16:39 +0100)
There is lack of cache destroy operation for ceph_file_cachep
when failing from fscache register.

Signed-off-by: Chengguang Xu <cgxu519@icloud.com>
Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
fs/ceph/super.c

index 1c470b453a9e9d9d89de5541a460032741e02750..fb2bc9c15a2378ceb5712269ab93e677c360f5d0 100644 (file)
@@ -713,14 +713,17 @@ static int __init init_caches(void)
                goto bad_dentry;
 
        ceph_file_cachep = KMEM_CACHE(ceph_file_info, SLAB_MEM_SPREAD);
-
        if (!ceph_file_cachep)
                goto bad_file;
 
-       if ((error = ceph_fscache_register()))
-               goto bad_file;
+       error = ceph_fscache_register();
+       if (error)
+               goto bad_fscache;
 
        return 0;
+
+bad_fscache:
+       kmem_cache_destroy(ceph_file_cachep);
 bad_file:
        kmem_cache_destroy(ceph_dentry_cachep);
 bad_dentry: