Commit 9ed6c2fb authored by Chris Sykes's avatar Chris Sykes Committed by Linus Torvalds
Browse files

[PATCH] Fix ext2_new_inode() failure paths



Fix failure paths in ext2_new_inode() and clean up duplicated code: -
DQUOT_DROP() was not being called if ext2_init_security() failed.

Signed-off-by: default avatarChris Sykes <chris@sigsegv.plus.com>
Cc: Stephen Smalley <sds@epoch.ncsc.mil>
Cc: Jan Kara <jack@ucw.cz>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent ee4e5271
Loading
Loading
Loading
Loading
+13 −12
Original line number Diff line number Diff line
@@ -605,27 +605,28 @@ got:
	insert_inode_hash(inode);

	if (DQUOT_ALLOC_INODE(inode)) {
		DQUOT_DROP(inode);
		err = -ENOSPC;
		goto fail2;
		goto fail_drop;
	}

	err = ext2_init_acl(inode, dir);
	if (err) {
		DQUOT_FREE_INODE(inode);
		DQUOT_DROP(inode);
		goto fail2;
	}
	if (err)
		goto fail_free_drop;

	err = ext2_init_security(inode,dir);
	if (err) {
		DQUOT_FREE_INODE(inode);
		goto fail2;
	}
	if (err)
		goto fail_free_drop;

	mark_inode_dirty(inode);
	ext2_debug("allocating inode %lu\n", inode->i_ino);
	ext2_preread_inode(inode);
	return inode;

fail2:
fail_free_drop:
	DQUOT_FREE_INODE(inode);

fail_drop:
	DQUOT_DROP(inode);
	inode->i_flags |= S_NOQUOTA;
	inode->i_nlink = 0;
	iput(inode);