On Oct 13, 2020, at 7:22 AM, Jan Kara <jack@xxxxxxx> wrote: > > When we try to use file already used as a quota file again (for the same > or different quota type), strange things can happen. At the very least > lockdep annotations may be wrong but also inode flags may be wrongly set > / reset. When the file is used for two quota types at once we can even > corrupt the file and likely crash the kernel. Catch all these cases by > checking whether passed file is already used as quota file and bail > early in that case. > > This fixes occasional generic/219 failure due to lockdep complaint. > > Reported-by: Ritesh Harjani <riteshh@xxxxxxxxxxxxx> > Signed-off-by: Jan Kara <jack@xxxxxxx> Patch looks OK, but a minor question/suggestion below... Reviewed-by: Andreas Dilger <adilger@xxxxxxxxx> > diff --git a/fs/ext4/super.c b/fs/ext4/super.c > index ea425b49b345..49b2e6be35c4 100644 > --- a/fs/ext4/super.c > +++ b/fs/ext4/super.c > @@ -6042,6 +6042,11 @@ static int ext4_quota_on(struct super_block *sb, int type, int format_id, > /* Quotafile not on the same filesystem? */ > if (path->dentry->d_sb != sb) > return -EXDEV; > + > + /* Quota already enabled for this file? */ > + if (path->dentry->d_inode->i_flags & S_NOQUOTA) > + return -EBUSY; Any reason not to use IS_NOQUOTA(path->dentry->d_inode) here? I was trying to see where S_NOQUOTA is set, and it seems that all of the quota code is using IS_NOQUOTA(). Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP