Re: [PATCH] xfs: show the proper user quota options

Darrick J. Wong
2020-11-24T16:51:44Z

On Tue, Nov 24, 2020 at 04:37:07PM +0800, kaixuxia wrote:
>
>
> On 2020/11/24 8:30, Darrick J. Wong wrote:
> > On Mon, Nov 23, 2020 at 05:38:52PM +0800, xiakaixu1987@gmail.com wrote:
> >> From: Kaixu Xia <kaixuxia@tencent.com>
> >>
> >> The quota option 'usrquota' should be shown if both the XFS_UQUOTA_ACCT
> >> and XFS_UQUOTA_ENFD flags are set. The option 'uqnoenforce' should be
> >> shown when only the XFS_UQUOTA_ACCT flag is set. The current code logic
> >> seems wrong, Fix it and show proper options.
> >
> > This needs a regression test case to make sure that quota mount options
> > passed in ==> quota options in /proc/mounts, wouldn't you say? ;)
>
> Hi Darrick,
>
> The simple test case as follows:
>
> Before the patch:
> # mount -o uqnoenforce /dev/vdc1 /data1
> # cat /proc/mounts | grep xfs
> /dev/vdc1 /data1 xfs rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,usrquota 0 0
>
> After the patch:
> # mount -o uqnoenforce /dev/vdc1 /data1
> # cat /proc/mounts | grep xfs
> /dev/vdc1 /data1 xfs rw,relatime,attr2,inode64,logbufs=8,logbsize=32k,uqnoenforce 0 0
>
> I'm not sure if a xfstest case is needed:)

It's been broken for a decade and nobody noticed.

YES IT IS.

--D

>
> Thanks,
> Kaixu
>
> >
> > --D
> >
> >> Signed-off-by: Kaixu Xia <kaixuxia@tencent.com>
> >> ---
> >> fs/xfs/xfs_super.c | 10 ++++++----
> >> 1 file changed, 6 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
> >> index e3e229e52512..5ebd6cdc44a7 100644
> >> --- a/fs/xfs/xfs_super.c
> >> +++ b/fs/xfs/xfs_super.c
> >> @@ -199,10 +199,12 @@ xfs_fs_show_options(
> >> seq_printf(m, ",swidth=%d",
> >> (int)XFS_FSB_TO_BB(mp, mp->m_swidth));
> >>
> >> - if (mp->m_qflags & (XFS_UQUOTA_ACCT|XFS_UQUOTA_ENFD))
> >> - seq_puts(m, ",usrquota");
> >> - else if (mp->m_qflags & XFS_UQUOTA_ACCT)
> >> - seq_puts(m, ",uqnoenforce");
> >> + if (mp->m_qflags & XFS_UQUOTA_ACCT) {
> >> + if (mp->m_qflags & XFS_UQUOTA_ENFD)
> >> + seq_puts(m, ",usrquota");
> >> + else
> >> + seq_puts(m, ",uqnoenforce");
> >> + }
> >>
> >> if (mp->m_qflags & XFS_PQUOTA_ACCT) {
> >> if (mp->m_qflags & XFS_PQUOTA_ENFD)
> >> --
> >> 2.20.0
> >>
>
> --
> kaixuxia