The ioctl handler can leave a transaction open on an error path.  That
will wedge up the filesystem.



 25-akpm/fs/ext3/ioctl.c |   12 +++++-------
 1 files changed, 5 insertions(+), 7 deletions(-)

diff -puN fs/ext3/ioctl.c~ext3-050-ioctl-transaction-leak fs/ext3/ioctl.c
--- 25/fs/ext3/ioctl.c~ext3-050-ioctl-transaction-leak	Thu Jun  5 15:14:43 2003
+++ 25-akpm/fs/ext3/ioctl.c	Thu Jun  5 15:14:43 2003
@@ -119,13 +119,11 @@ flags_err:
 		if (IS_ERR(handle))
 			return PTR_ERR(handle);
 		err = ext3_reserve_inode_write(handle, inode, &iloc);
-		if (err)
-			return err;
-
-		inode->i_ctime = CURRENT_TIME;
-		inode->i_generation = generation;
-
-		err = ext3_mark_iloc_dirty(handle, inode, &iloc);
+		if (err == 0) {
+			inode->i_ctime = CURRENT_TIME;
+			inode->i_generation = generation;
+			err = ext3_mark_iloc_dirty(handle, inode, &iloc);
+		}
 		ext3_journal_stop(handle);
 		return err;
 	}

_