From 7572ab9c06795119d1898ed24071460d5c03c517 Mon Sep 17 00:00:00 2001 From: Eric Van Hensbergen Date: Mon, 10 Apr 2006 22:54:06 -0700 Subject: [PATCH] --- yaml --- r: 25505 b: refs/heads/master c: 00fbc6dfe7c4487f812829bff79c3121c8fd3bca h: refs/heads/master i: 25503: 6f0499f3c4b83c40bdec34a74544a12489873e09 v: v3 --- [refs] | 2 +- trunk/fs/9p/vfs_super.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 86420e32f644..b21d0b903f91 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e1a2509023785bd3199ac068ab80155aeba01265 +refs/heads/master: 00fbc6dfe7c4487f812829bff79c3121c8fd3bca diff --git a/trunk/fs/9p/vfs_super.c b/trunk/fs/9p/vfs_super.c index b0a0ae509c00..61c599b4a1e3 100644 --- a/trunk/fs/9p/vfs_super.c +++ b/trunk/fs/9p/vfs_super.c @@ -127,12 +127,13 @@ static struct super_block *v9fs_get_sb(struct file_system_type if ((newfid = v9fs_session_init(v9ses, dev_name, data)) < 0) { dprintk(DEBUG_ERROR, "problem initiating session\n"); - kfree(v9ses); - return ERR_PTR(newfid); + sb = ERR_PTR(newfid); + goto out_free_session; } sb = sget(fs_type, NULL, v9fs_set_super, v9ses); - + if (IS_ERR(sb)) + goto out_close_session; v9fs_fill_super(sb, v9ses, flags); inode = v9fs_get_inode(sb, S_IFDIR | mode); @@ -185,6 +186,12 @@ static struct super_block *v9fs_get_sb(struct file_system_type return sb; +out_close_session: + v9fs_session_close(v9ses); +out_free_session: + kfree(v9ses); + return sb; + put_back_sb: /* deactivate_super calls v9fs_kill_super which will frees the rest */ up_write(&sb->s_umount);