summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2022-12-07 12:59:27 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-01-07 12:07:38 +0100
commit56836c32a4b5df796b19635b84a7ba4e202ffca9 (patch)
tree072c3c7928844893543abbce1261bcb408d80680
parent9c4ef4429f95ffb07026bf0228c0b9fd9547b2d0 (diff)
downloadlinux-stable-56836c32a4b5df796b19635b84a7ba4e202ffca9.tar.gz
linux-stable-56836c32a4b5df796b19635b84a7ba4e202ffca9.tar.bz2
linux-stable-56836c32a4b5df796b19635b84a7ba4e202ffca9.zip
ext4: initialize quota before expanding inode in setproject ioctl
commit 1485f726c6dec1a1f85438f2962feaa3d585526f upstream. Make sure we initialize quotas before possibly expanding inode space (and thus maybe needing to allocate external xattr block) in ext4_ioctl_setproject(). This prevents not accounting the necessary block allocation. Signed-off-by: Jan Kara <jack@suse.cz> Cc: stable@kernel.org Link: https://lore.kernel.org/r/20221207115937.26601-1-jack@suse.cz Signed-off-by: Theodore Ts'o <tytso@mit.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/ext4/ioctl.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index ccb584e60904..ac9f678ac4ae 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -333,6 +333,10 @@ static int ext4_ioctl_setproject(struct file *filp, __u32 projid)
if (IS_NOQUOTA(inode))
goto out_unlock;
+ err = dquot_initialize(inode);
+ if (err)
+ goto out_unlock;
+
err = ext4_get_inode_loc(inode, &iloc);
if (err)
goto out_unlock;
@@ -345,10 +349,6 @@ static int ext4_ioctl_setproject(struct file *filp, __u32 projid)
}
brelse(iloc.bh);
- err = dquot_initialize(inode);
- if (err)
- return err;
-
handle = ext4_journal_start(inode, EXT4_HT_QUOTA,
EXT4_QUOTA_INIT_BLOCKS(sb) +
EXT4_QUOTA_DEL_BLOCKS(sb) + 3);