xfs: xfs_inode_free_quota_blocks should scan project quota
authorDarrick J. Wong <djwong@kernel.org>
Sat, 23 Jan 2021 00:48:35 +0000 (16:48 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 3 Feb 2021 17:18:49 +0000 (09:18 -0800)
Buffered writers who have run out of quota reservation call
xfs_inode_free_quota_blocks to try to free any space reservations that
might reduce the quota usage.  Unfortunately, the buffered write path
treats "out of project quota" the same as "out of overall space" so this
function has never supported scanning for space that might ease an "out
of project quota" condition.

We're about to start using this function for cases where we actually
/can/ tell if we're out of project quota, so add in this functionality.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
fs/xfs/xfs_icache.c

index 89f9e692fde759eb0b7b223d91918dcd0b17fd58..10c1a0dee17d1389d91d2280c4b7ddf38d2520ba 100644 (file)
@@ -1434,6 +1434,15 @@ xfs_inode_free_quota_blocks(
                }
        }
 
+       if (XFS_IS_PQUOTA_ENFORCED(ip->i_mount)) {
+               dq = xfs_inode_dquot(ip, XFS_DQTYPE_PROJ);
+               if (dq && xfs_dquot_lowsp(dq)) {
+                       eofb.eof_prid = ip->i_d.di_projid;
+                       eofb.eof_flags |= XFS_EOF_FLAGS_PRID;
+                       do_work = true;
+               }
+       }
+
        if (!do_work)
                return false;