diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 3100f4aa2d59510a5a8d017a27cc2864ce7ff986..f961f7d94a7095bea9abdd5622c763c9e61fc84d 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -6080,10 +6080,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; @@ -6103,7 +6100,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; }