get_gfs2_sb does a get_fs_type without doing a put_filesystem and
thus leaking a file_system_type reference everytime it's called.

Just use gfs2_fs_type directly instead of doing the lookup and thus
fix the problem.


Signed-off-by: Christoph Hellwig <[EMAIL PROTECTED]>

Index: linux-2.6/fs/gfs2/ops_fstype.c
===================================================================
--- linux-2.6.orig/fs/gfs2/ops_fstype.c 2008-02-25 18:53:11.000000000 +0100
+++ linux-2.6/fs/gfs2/ops_fstype.c      2008-02-25 18:53:36.000000000 +0100
@@ -874,7 +874,6 @@ static struct super_block* get_gfs2_sb(c
 {
        struct kstat stat;
        struct nameidata nd;
-       struct file_system_type *fstype;
        struct super_block *sb = NULL, *s;
        int error;
 
@@ -886,8 +885,7 @@ static struct super_block* get_gfs2_sb(c
        }
        error = vfs_getattr(nd.path.mnt, nd.path.dentry, &stat);
 
-       fstype = get_fs_type("gfs2");
-       list_for_each_entry(s, &fstype->fs_supers, s_instances) {
+       list_for_each_entry(s, &gfs2_fs_type.fs_supers, s_instances) {
                if ((S_ISBLK(stat.mode) && s->s_dev == stat.rdev) ||
                    (S_ISDIR(stat.mode) &&
                     s == nd.path.dentry->d_inode->i_sb)) {

Reply via email to