Skip to contentSkip to conversation

no quota output if no usage?

DISCUSSION Eric Sandeen 3 participants 7 messages Nov 26, 2014 – Nov 28, 2014

lore
Share & tools
lore
#0 lore raw

This seems a bit weird:

# xfs_quota -x -c 'quota -p project1' /mnt/test
#

Huh, did it work?

# xfs_quota -x -c 'quota -pv project1' /mnt/test
Disk quotas for Project project1 (1)
Filesystem              Blocks      Quota      Limit  Warn/Time      Mounted on
/dev/sdc2                    0    1024000    1228800   00 [--------] /mnt/test
#

Oh, ok!

I don't know why reporting limits should depend on the verbose flag, but it has been that way since 2005 in quota_mount() :

        if (!(flags & VERBOSE_FLAG)) {
                count = 0;
                if ((form & XFS_BLOCK_QUOTA) && d.d_bcount)
                        count++;
                if ((form & XFS_INODE_QUOTA) && d.d_icount)
                        count++;
                if ((form & XFS_RTBLOCK_QUOTA) && d.d_rtbcount)
                        count++;
                if (!count)
                        return 0;
        }

I'm inclined to change it, but is it OK to change the output of this - might old scripts be relying on this (odd) silent behavior? I think it can certainly cause confusion (as evidenced by at least one bug I'm looking at ...)

Thanks,
-Eric

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#1 lore raw
Quoted 30 lines · Eric Sandeen

This seems a bit weird:

# xfs_quota -x -c 'quota -p project1' /mnt/test
#

Huh, did it work?

# xfs_quota -x -c 'quota -pv project1' /mnt/test
Disk quotas for Project project1 (1)
Filesystem              Blocks      Quota      Limit  Warn/Time      Mounted on
/dev/sdc2                    0    1024000    1228800   00 [--------] /mnt/test
#

Oh, ok!

I don't know why reporting limits should depend on the verbose flag, but it has been that way since 2005 in quota_mount() :

        if (!(flags & VERBOSE_FLAG)) {
                count = 0;
                if ((form & XFS_BLOCK_QUOTA) && d.d_bcount)
                        count++;
                if ((form & XFS_INODE_QUOTA) && d.d_icount)
                        count++;
                if ((form & XFS_RTBLOCK_QUOTA) && d.d_rtbcount)
                        count++;
                if (!count)
                        return 0;
        }
Quoted 3 lines

I'm inclined to change it, but is it OK to change the output of this - might old scripts be relying on this (odd) silent behavior? I think it can certainly cause confusion (as evidenced by at least one bug I'm looking at ...)

It's done that way because the quota lookup can find dquots that are completely empty because there are no uid/gid/prid found in the filesystem, but the dquot is allocated because it's within a block that has in use dquots in it. I'd guess that if you queried a non-existent project quota (e.g. prid 2) you'd get the same result....

i.e. you've got to have inodes or blocks accounted to have a dquot "created" for the uid/gid/prid in normal conditions, hence dquots with zero counts are ignored by default as they are effectively the same as unallocated dquots....

Cheers,

Dave.

Signature · 7 lines
Dave Chinner
[email protected]

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
#2 lore raw
Quoted 35 lines · Dave Chinner
Quoted 30 lines · Eric Sandeen

This seems a bit weird:

# xfs_quota -x -c 'quota -p project1' /mnt/test
#

Huh, did it work?

# xfs_quota -x -c 'quota -pv project1' /mnt/test
Disk quotas for Project project1 (1)
Filesystem              Blocks      Quota      Limit  Warn/Time      Mounted on
/dev/sdc2                    0    1024000    1228800   00 [--------] /mnt/test
#

Oh, ok!

I don't know why reporting limits should depend on the verbose flag, but it has been that way since 2005 in quota_mount() :

        if (!(flags & VERBOSE_FLAG)) {
                count = 0;
                if ((form & XFS_BLOCK_QUOTA) && d.d_bcount)
                        count++;
                if ((form & XFS_INODE_QUOTA) && d.d_icount)
                        count++;
                if ((form & XFS_RTBLOCK_QUOTA) && d.d_rtbcount)
                        count++;
                if (!count)
                        return 0;
        }
Quoted 3 lines

I'm inclined to change it, but is it OK to change the output of this - might old scripts be relying on this (odd) silent behavior? I think it can certainly cause confusion (as evidenced by at least one bug I'm looking at ...)

Quoted 6 lines

It's done that way because the quota lookup can find dquots that are completely empty because there are no uid/gid/prid found in the filesystem, but the dquot is allocated because it's within a block that has in use dquots in it. I'd guess that if you queried a non-existent project quota (e.g. prid 2) you'd get the same result....

if I ask for something that doesn't exist by name, it tells me:

# xfs_quota -x -c 'quota -pv project4' /mnt/test
xfs_quota: cannot find project project4

or if I ask by prid, I get nothing with or without -v :(

# xfs_quota -x -c 'quota -pv 4' /mnt/test
#
Quoted 4 lines

i.e. you've got to have inodes or blocks accounted to have a dquot "created" for the uid/gid/prid in normal conditions, hence dquots with zero counts are ignored by default as they are effectively the same as unallocated dquots....

That's all well and good, but with -v it is able to tell me what the set limits are, and that I have no blocks allocated within those limits.

So the information we might expect seems available; it's just not shown, because the code short-circuits it w/o -v.

Or am I missing something ...

-Eric

Quoted 4 lines

Cheers,

Dave.

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#3 lore raw
Quoted 43 lines · Eric Sandeen
Quoted 35 lines · Dave Chinner
Quoted 30 lines · Eric Sandeen

This seems a bit weird:

# xfs_quota -x -c 'quota -p project1' /mnt/test
#

Huh, did it work?

# xfs_quota -x -c 'quota -pv project1' /mnt/test
Disk quotas for Project project1 (1)
Filesystem              Blocks      Quota      Limit  Warn/Time      Mounted on
/dev/sdc2                    0    1024000    1228800   00 [--------] /mnt/test
#

Oh, ok!

I don't know why reporting limits should depend on the verbose flag, but it has been that way since 2005 in quota_mount() :

        if (!(flags & VERBOSE_FLAG)) {
                count = 0;
                if ((form & XFS_BLOCK_QUOTA) && d.d_bcount)
                        count++;
                if ((form & XFS_INODE_QUOTA) && d.d_icount)
                        count++;
                if ((form & XFS_RTBLOCK_QUOTA) && d.d_rtbcount)
                        count++;
                if (!count)
                        return 0;
        }
Quoted 3 lines

I'm inclined to change it, but is it OK to change the output of this - might old scripts be relying on this (odd) silent behavior? I think it can certainly cause confusion (as evidenced by at least one bug I'm looking at ...)

Quoted 6 lines

It's done that way because the quota lookup can find dquots that are completely empty because there are no uid/gid/prid found in the filesystem, but the dquot is allocated because it's within a block that has in use dquots in it. I'd guess that if you queried a non-existent project quota (e.g. prid 2) you'd get the same result....

Quoted 4 lines

if I ask for something that doesn't exist by name, it tells me:

# xfs_quota -x -c 'quota -pv project4' /mnt/test
xfs_quota: cannot find project project4

It can't convert it to a prid because it's not in the /etc/projects file. Project quotas are a little bit special in this way.

Quoted 4 lines

or if I ask by prid, I get nothing with or without -v :(

# xfs_quota -x -c 'quota -pv 4' /mnt/test
#

Ah, I missed the XFS_IS_DQUOT_UNINITIALIZED() check at the syscall entry point. It checks for everything being zero and returns -ENOENT if it's an empty dquot. Too many bloody layers of validation....

Quoted 5 lines
Quoted 4 lines

i.e. you've got to have inodes or blocks accounted to have a dquot "created" for the uid/gid/prid in normal conditions, hence dquots with zero counts are ignored by default as they are effectively the same as unallocated dquots....

Quoted 7 lines

That's all well and good, but with -v it is able to tell me what the set limits are, and that I have no blocks allocated within those limits.

So the information we might expect seems available; it's just not shown, because the code short-circuits it w/o -v.

Or am I missing something ...

Nope, I'm confusing different reporting command behaviour....

Cheers,

Dave.

Signature · 7 lines
Dave Chinner
[email protected]

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
#4 lore raw
Quoted 3 lines · Dave Chinner
Quoted 1 line

Or am I missing something ...

Nope, I'm confusing different reporting command behaviour....

Ok, so back to the original question: think it's cool to drop the verbose requirement to find out limits when there is 0 usage?

-Eric

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs

#5 lore raw
Quoted 8 lines · Eric Sandeen
Quoted 3 lines · Dave Chinner
Quoted 1 line

Or am I missing something ...

Nope, I'm confusing different reporting command behaviour....

Ok, so back to the original question: think it's cool to drop the verbose requirement to find out limits when there is 0 usage?

Just as a data point quota(1) command from quota-tools also doesn't
report quota entries where no space & inode is accounted without -v option. I never thought it's particularly useful but apparently it's some heritage from the original implementation of quota in some Unix and so I decided to maintain compatibility...

Honza

Signature · 7 lines
Jan Kara <[email protected]>
SUSE Labs, CR

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
#6 lore raw
Quoted 7 lines · Jan Kara
Quoted 6 lines · Eric Sandeen
Quoted 3 lines · Dave Chinner
Quoted 1 line

Or am I missing something ...

Nope, I'm confusing different reporting command behaviour....

Quoted 7 lines
Quoted 2 lines

Ok, so back to the original question: think it's cool to drop the verbose requirement to find out limits when there is 0 usage?

Just as a data point quota(1) command from quota-tools also doesn't
report quota entries where no space & inode is accounted without -v option. I never thought it's particularly useful but apparently it's some heritage from the original implementation of quota in some Unix and so I decided to maintain compatibility...

Thanks - sounds like maybe the weight of history is behind this. Perhaps it'll just be a documentation fix to clarify what happens when there's no block or inode used.

-Eric

Quoted 2 lines

Honza

_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs