From: Alex Elder <aelder@sgi.com>
To: Dave Chinner <david@fromorbit.com>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 3/3] xfs: Increase the default size of the reserved blocks pool
Date: Fri, 05 Mar 2010 09:45:53 -0600 [thread overview]
Message-ID: <1267803953.2478.13.camel@doink> (raw)
In-Reply-To: <1267667185-7736-4-git-send-email-david@fromorbit.com>
On Thu, 2010-03-04 at 12:46 +1100, Dave Chinner wrote:
> The current default size of the reserved blocks pool is easy to deplete
> with certain workloads, in particular workloads that do lots of concurrent
> delayed allocation extent conversions. If enough transactions are running
> in parallel and the entire pool is consumed then subsequent calls to
> xfs_trans_reserve() will fail with ENOSPC. Also add a rate limited
> warning so we know if this starts happening again.
>
> This is an updated version of an old patch from Lachlan McIlroy.
Looks good. The comment and code rearrangements are an
improvement.
I have also reviewed the other two patches in the series
(including the updated patch 2) and they too look good.
> Signed-off-by: Dave Chinner <david@fromorbit.com>
So is it got to be fromorbit or redhat?
(You used both in this series.)
Reviewed-by: Alex Elder <aelder@sgi.com>
> ---
> fs/xfs/xfs_mount.c | 49 +++++++++++++++++++++++++++++--------------------
> 1 files changed, 29 insertions(+), 20 deletions(-)
>
> diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c
> index c207fef..e79b56b 100644
> --- a/fs/xfs/xfs_mount.c
> +++ b/fs/xfs/xfs_mount.c
> @@ -1097,13 +1097,15 @@ xfs_default_resblks(xfs_mount_t *mp)
> __uint64_t resblks;
>
> /*
> - * We default to 5% or 1024 fsbs of space reserved, whichever is smaller.
> - * This may drive us straight to ENOSPC on mount, but that implies
> - * we were already there on the last unmount. Warn if this occurs.
> + * We default to 5% or 8192 fsbs of space reserved, whichever is
> + * smaller. This is intended to cover concurrent allocation
> + * transactions when we initially hit enospc. These each require a 4
> + * block reservation. Hence by default we cover roughly 2000 concurrent
> + * allocation reservations.
> */
> resblks = mp->m_sb.sb_dblocks;
> do_div(resblks, 20);
> - resblks = min_t(__uint64_t, resblks, 1024);
> + resblks = min_t(__uint64_t, resblks, 8192);
> return resblks;
> }
>
> @@ -1417,6 +1419,9 @@ xfs_mountfs(
> * when at ENOSPC. This is needed for operations like create with
> * attr, unwritten extent conversion at ENOSPC, etc. Data allocations
> * are not allowed to use this reserved space.
> + *
> + * This may drive us straight to ENOSPC on mount, but that implies
> + * we were already there on the last unmount. Warn if this occurs.
> */
> if (!(mp->m_flags & XFS_MOUNT_RDONLY)) {
> resblks = xfs_default_resblks(mp);
> @@ -1725,26 +1730,30 @@ xfs_mod_incore_sb_unlocked(
> lcounter += rem;
> }
> } else { /* Taking blocks away */
> -
> lcounter += delta;
> + if (lcounter >= 0) {
> + mp->m_sb.sb_fdblocks = lcounter +
> + XFS_ALLOC_SET_ASIDE(mp);
> + return 0;
> + }
>
> - /*
> - * If were out of blocks, use any available reserved blocks if
> - * were allowed to.
> - */
I was just looking at this code yesterday, and got confused
by the indentation of this comment. You beat me to fixing it.
I also think your rearranging of the logic below is an improvement.
> + /*
> + * We are out of blocks, use any available reserved
> + * blocks if were allowed to.
> + */
> + if (!rsvd)
> + return XFS_ERROR(ENOSPC);
>
> - if (lcounter < 0) {
> - if (rsvd) {
> - lcounter = (long long)mp->m_resblks_avail + delta;
> - if (lcounter < 0) {
> - return XFS_ERROR(ENOSPC);
> - }
> - mp->m_resblks_avail = lcounter;
> - return 0;
> - } else { /* not reserved */
> - return XFS_ERROR(ENOSPC);
> - }
> + lcounter = (long long)mp->m_resblks_avail + delta;
> + if (lcounter >= 0) {
> + mp->m_resblks_avail = lcounter;
> + return 0;
> }
> + printk_once(KERN_WARNING
> + "Filesystem \"%s\": reserve blocks depleted! "
> + "Consider increasing reserve pool size.",
> + mp->m_fsname);
> + return XFS_ERROR(ENOSPC);
> }
>
> mp->m_sb.sb_fdblocks = lcounter + XFS_ALLOC_SET_ASIDE(mp);
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2010-03-05 15:44 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-04 1:46 [PATCH 0/3] xfs: delayed allocation @ ENOSPC fixes Dave Chinner
2010-03-04 1:46 ` [PATCH 1/3] xfs: check for more work before sleeping in xfssyncd Dave Chinner
2010-03-04 13:50 ` Christoph Hellwig
2010-03-04 22:56 ` Dave Chinner
2010-03-04 1:46 ` [PATCH 2/3] xfs: truncate delalloc extents when IO fails in writeback Dave Chinner
2010-03-04 14:28 ` Christoph Hellwig
2010-03-04 22:03 ` Dave Chinner
2010-03-05 2:00 ` [PATCH v2] " Dave Chinner
2010-03-05 9:21 ` Christoph Hellwig
2010-03-10 9:12 ` [PATCH 2/3] " Christoph Hellwig
2010-03-10 12:52 ` Dave Chinner
2010-03-10 18:18 ` Christoph Hellwig
2010-03-04 1:46 ` [PATCH 3/3] xfs: Increase the default size of the reserved blocks pool Dave Chinner
2010-03-05 15:45 ` Alex Elder [this message]
2010-03-05 23:26 ` Dave Chinner
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=1267803953.2478.13.camel@doink \
--to=aelder@sgi.com \
--cc=david@fromorbit.com \
--cc=xfs@oss.sgi.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.