The ioctl handler can leave a transaction open on an error path. That will wedge up the filesystem. 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 2003-05-30 03:10:45.000000000 -0700 +++ 25-akpm/fs/ext3/ioctl.c 2003-05-30 03:11:19.000000000 -0700 @@ -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; } _