ext4: make sure quota gets properly shutdown on error
When we hit an error when enabling quotas and setting inode flags, we do not properly shutdown quota subsystem despite returning error from Q_QUOTAON quotactl. This can lead to some odd situations like kernel using quota file while it is still writeable for userspace. Make sure we properly cleanup the quota subsystem in case of error. Signed-off-by: Jan Kara <jack@suse.cz> Cc: stable@kernel.org Link: https://lore.kernel.org/r/20211007155336.12493-2-jack@suse.cz Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
380a0091ca
commit
15fc69bbbb
@ -6749,10 +6749,7 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,
|
||||
|
||||
lockdep_set_quota_inode(path->dentry->d_inode, I_DATA_SEM_QUOTA);
|
||||
err = dquot_quota_on(sb, type, format_id, path);
|
||||
if (err) {
|
||||
lockdep_set_quota_inode(path->dentry->d_inode,
|
||||
I_DATA_SEM_NORMAL);
|
||||
} else {
|
||||
if (!err) {
|
||||
struct inode *inode = d_inode(path->dentry);
|
||||
handle_t *handle;
|
||||
|
||||
@ -6772,7 +6769,12 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id,
|
||||
ext4_journal_stop(handle);
|
||||
unlock_inode:
|
||||
inode_unlock(inode);
|
||||
if (err)
|
||||
dquot_quota_off(sb, type);
|
||||
}
|
||||
if (err)
|
||||
lockdep_set_quota_inode(path->dentry->d_inode,
|
||||
I_DATA_SEM_NORMAL);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user