From: Dave Chinner <david@fromorbit.com>
To: Jian Wen <wenjianhn@gmail.com>
Cc: linux-xfs@vger.kernel.org, djwong@kernel.org,
Jian Wen <wenjian1@xiaomi.com>
Subject: Re: [PATCH] xfs: improve handling of prjquot ENOSPC
Date: Fri, 15 Dec 2023 08:13:42 +1100 [thread overview]
Message-ID: <ZXtwBg3GUJLDydlW@dread.disaster.area> (raw)
In-Reply-To: <20231214150708.77586-1-wenjianhn@gmail.com>
On Thu, Dec 14, 2023 at 11:07:08PM +0800, Jian Wen wrote:
> Don't clear space of the whole fs when the project quota limit is
> reached, since it affects the writing performance of files of
> the directories that are under quota.
>
> Only run cow/eofblocks scans on the quota attached to the inode.
>
> Signed-off-by: Jian Wen <wenjian1@xiaomi.com>
> ---
> fs/xfs/xfs_file.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
> index e33e5e13b95f..4fbe262d33cc 100644
> --- a/fs/xfs/xfs_file.c
> +++ b/fs/xfs/xfs_file.c
> @@ -24,6 +24,9 @@
> #include "xfs_pnfs.h"
> #include "xfs_iomap.h"
> #include "xfs_reflink.h"
> +#include "xfs_quota.h"
> +#include "xfs_dquot_item.h"
> +#include "xfs_dquot.h"
>
> #include <linux/dax.h>
> #include <linux/falloc.h>
> @@ -803,8 +806,18 @@ xfs_file_buffered_write(
> goto write_retry;
> } else if (ret == -ENOSPC && !cleared_space) {
> struct xfs_icwalk icw = {0};
> + struct xfs_dquot *pdqp = ip->i_pdquot;
>
> cleared_space = true;
> + if (XFS_IS_PQUOTA_ENFORCED(ip->i_mount) &&
> + pdqp && xfs_dquot_lowsp(pdqp)) {
> + xfs_iunlock(ip, iolock);
> + icw.icw_prid = pdqp->q_id;
> + icw.icw_flags |= XFS_ICWALK_FLAG_PRID;
> + xfs_blockgc_free_space(ip->i_mount, &icw);
> + goto write_retry;
> + }
This is just duplicating the EDQUOT error handling path for the
specific case that project quota exhaustion returns ENOSPC instead
of EDQUOT. i.e. the root cause of the problem is that project
quotas are returning ENOSPC rather than EDQUOT, right?
Perhaps we should look at having project quotas return EDQUOT like
the other quotas so we get the project quota block scan done in the
correct places, then convert the error to ENOSPC if we get a second
EDQUOT from the project quota on retry?
-Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2023-12-14 21:13 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-14 15:07 [PATCH] xfs: improve handling of prjquot ENOSPC Jian Wen
2023-12-14 15:29 ` Christoph Hellwig
2023-12-14 17:06 ` Darrick J. Wong
2023-12-14 21:13 ` Dave Chinner [this message]
2023-12-16 15:49 ` Jian Wen
2023-12-16 15:35 ` [PATCH v2] " Jian Wen
2023-12-18 22:00 ` Dave Chinner
2023-12-19 5:47 ` Christoph Hellwig
2023-12-19 13:50 ` Jian Wen
2023-12-23 11:00 ` Jian Wen
2024-01-04 6:22 ` [PATCH v4] " Jian Wen
2024-01-08 0:35 ` Dave Chinner
2024-01-09 6:14 ` Darrick J. Wong
2024-01-09 6:38 ` Dave Chinner
2024-01-11 1:42 ` Darrick J. Wong
2024-01-11 7:24 ` Dave Chinner
2024-01-10 14:08 ` kernel test robot
2023-12-23 10:56 ` [PATCH v3] " Jian Wen
2024-01-03 1:42 ` Darrick J. Wong
2024-01-03 3:45 ` Jian Wen
2024-01-04 1:46 ` Darrick J. Wong
2024-01-04 3:36 ` Jian Wen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZXtwBg3GUJLDydlW@dread.disaster.area \
--to=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=wenjian1@xiaomi.com \
--cc=wenjianhn@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.