From: Dave Chinner <david@fromorbit.com>
To: Mikulas Patocka <mpatocka@redhat.com>
Cc: xfs@oss.sgi.com, linux-kernel@vger.kernel.org
Subject: Re: spurious -ENOSPC on XFS
Date: Wed, 14 Jan 2009 08:49:49 +1100 [thread overview]
Message-ID: <20090113214949.GN8071@disturbed> (raw)
In-Reply-To: <Pine.LNX.4.64.0901120509550.11089@hs20-bc2-1.build.redhat.com>
On Mon, Jan 12, 2009 at 06:14:36AM -0500, Mikulas Patocka wrote:
> Hi
>
> I discovered a bug in XFS in delayed allocation.
>
> When you take a small partition (52MB in my case) and copy many small
> files on it (source code) that barely fits there, you get -ENOSPC. Then
> sync the partition, some free space pops up, click "retry" in MC an the
> copy continues. They you get again -ENOSPC, you must sync, click "retry"
> and go on. And so on few times until the source code finally fits on the
> XFS partition.
Not a Bug. This is by design.
> This misbehavior is apparently caused by delayed allocation, delayed
> allocation does not exactly know how much space will be occupied by data,
> so it makes some upper bound guess.
No, we know *exactly* how much space is consumed by the data. What
we don't know is how much space will be required for additional
*metadata* to do the allocation so we reserve the worst case need so
hat we should never get an ENOSPC during async writeback when we
can't report the error to anyone. Worst case is 4 metadata blocks
per allocation (delalloc extent, really).
If we ENOSPC in the delalloc path, we have two choices:
1. potentially lock the system up due to OOM and being
unable to flush pages
2. throw away user data without being able to report an
error to the application that wrote it originally.
Personally, I don't like either option, so premature ENOSPC at
write() time is fine by me....
> Because free space count is only a
> guess, not the actual data being consumed, XFS should not return -ENOSPC
> on behalf of it. When the free space overflows, XFS should sync itself,
> retry allocation and only return -ENOSPC if it fails the second time,
> after the sync.
It does, by graduated response (see xfs_iomap_write_delay() and
xfs_flush_space()):
1. trigger async flush of the inode and retry
2. retry again
3. start a filesystem wide flush, wait 500ms and try again
4. really ENOSPC now.
It could probably be improved but, quite frankly, XFS wasn't designed
for small filesystems so I don't think this is worth investing any
major effort in changing/fixing.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2009-01-13 21:50 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-12 11:14 spurious -ENOSPC on XFS Mikulas Patocka
2009-01-12 15:11 ` Christoph Hellwig
2009-01-13 5:58 ` Lachlan McIlroy
2009-01-14 22:16 ` Dave Chinner
2009-01-15 0:57 ` Lachlan McIlroy
2009-01-15 8:47 ` Dave Chinner
2009-01-13 21:49 ` Dave Chinner [this message]
2009-01-14 4:28 ` Mikulas Patocka
2009-01-18 17:31 ` Christoph Hellwig
2009-01-20 19:38 ` Mikulas Patocka
2009-01-20 23:24 ` Dave Chinner
2009-01-22 20:59 ` Christoph Hellwig
2009-01-22 22:43 ` Christoph Hellwig
2009-01-23 20:14 ` Mikulas Patocka
2009-01-24 7:12 ` Dave Chinner
2009-01-29 16:39 ` Mikulas Patocka
2009-01-29 16:45 ` Mikulas Patocka
2009-01-31 23:57 ` Dave Chinner
2009-02-02 17:36 ` Mikulas Patocka
2009-02-03 3:27 ` Dave Chinner
2009-02-03 20:05 ` Mikulas Patocka
2009-02-04 12:08 ` Dave Chinner
2009-02-05 4:31 ` Mikulas Patocka
2009-02-05 7:43 ` 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=20090113214949.GN8071@disturbed \
--to=david@fromorbit.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mpatocka@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox