On Thu 15-10-20 01:33:24, Andreas Dilger wrote: > 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(). OK, right. I'll change that. Thanks for review. Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR