ext2: fix a block leak
open file, unlink it, then use ioctl(2) to make it immutable or
append only. Now close it and watch the blocks *not* freed...
Immutable/append-only checks belong in ->setattr().
Note: the bug is old and backport to anything prior to 737f2e93b972
("ext2: convert to use the new truncate convention") will need
these checks lifted into ext2_setattr().
Signed-off-by: Al Viro <email@example.com>
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
index 1e01fab..7163590 100644
@@ -1264,21 +1264,11 @@
static void ext2_truncate_blocks(struct inode *inode, loff_t offset)
- * XXX: it seems like a bug here that we don't allow
- * IS_APPEND inode to have blocks-past-i_size trimmed off.
- * review and fix this.
- * Also would be nice to be able to handle IO errors and such,
- * but that's probably too much to ask.
if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
- if (IS_APPEND(inode) || IS_IMMUTABLE(inode))