From: Dave Chinner <david@fromorbit.com>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-xfs@vger.kernel.org
Subject: Re: [PATCH 3/8] xfs: remove magic handling of unwritten extents in xfs_bmapi_allocate
Date: Sat, 6 Oct 2018 19:34:34 +1000 [thread overview]
Message-ID: <20181006093433.GA18095@dastard> (raw)
In-Reply-To: <20181002174207.25275-4-hch@lst.de>
On Tue, Oct 02, 2018 at 10:42:02AM -0700, Christoph Hellwig wrote:
> There is no real need to treat unwritten delalloc extent special in
> any way here, so remove the special casing and related comment.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
> ---
> fs/xfs/libxfs/xfs_bmap.c | 16 +++-------------
> 1 file changed, 3 insertions(+), 13 deletions(-)
>
> diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
> index da6b768664e3..3bb250ee6c7c 100644
> --- a/fs/xfs/libxfs/xfs_bmap.c
> +++ b/fs/xfs/libxfs/xfs_bmap.c
> @@ -4069,20 +4069,10 @@ xfs_bmapi_allocate(
> bma->got.br_startoff = bma->offset;
> bma->got.br_startblock = bma->blkno;
> bma->got.br_blockcount = bma->length;
> - bma->got.br_state = XFS_EXT_NORM;
> -
> - /*
> - * In the data fork, a wasdelay extent has been initialized, so
> - * shouldn't be flagged as unwritten.
> - *
> - * For the cow fork, however, we convert delalloc reservations
> - * (extents allocated for speculative preallocation) to
> - * allocated unwritten extents, and only convert the unwritten
> - * extents to real extents when we're about to write the data.
> - */
> - if ((!bma->wasdel || (bma->flags & XFS_BMAPI_COWFORK)) &&
> - (bma->flags & XFS_BMAPI_PREALLOC))
> + if (bma->flags & XFS_BMAPI_PREALLOC)
> bma->got.br_state = XFS_EXT_UNWRITTEN;
> + else
> + bma->got.br_state = XFS_EXT_NORM;
I bisected the generic/127 rmap corruption down to this patch:
[ 36.523002] run fstests generic/127 at 2018-10-06 19:25:42
[ 48.642735] XFS: Assertion failed: fs_is_ok, file: fs/xfs/libxfs/xfs_rmap.c, line: 418
[ 48.647380] ------------ [ cut here ]------------
[ 48.648322] kernel BUG at fs/xfs/xfs_message.c:102!
[ 48.649347] invalid opcode: 0000
[#1] PREEMPT SMP
[ 48.650303] CPU: 9 PID: 4468 Comm: fsx Not tainted 4.19.0-rc6-dgc+ #681
[ 48.651874] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.1-1 04/01/2014
[ 48.653562] RIP: 0010:assfail+0x28/0x30
[ 48.654332] Code: c3 90 66 66 66 66 90 48 89 f1 41 89 d0 48 c7 c6 70 56 2e 82 48 89 fa 31 ff e8 64 f9 ff ff 80 3d 75 9f 0a 01 00 75 03 0f 0b c3 <0f> 0b 66 0f 1f 44 00 00 66 66 66 66 90 48 63 f6 49 89a
[ 48.657980] RSP: 0018:ffffc900049a7b18 EFLAGS: 00010202
[ 48.659015] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
[ 48.660423] RDX: 00000000ffffffc0 RSI: 000000000000000a RDI: ffffffff8227ab34
[ 48.661817] RBP: ffffc900049a7c38 R08: 0000000000000000 R09: 0000000000000000
[ 48.663209] R10: 00000000000000c0 R11: f000000000000000 R12: 00000000000000c0
[ 48.664634] R13: 0000000000000004 R14: ffff880239789d20 R15: 0000000000000000
[ 48.666033] FS: 00007fb5eed1db80(0000) GS:ffff88023fd00000(0000) knlGS:0000000000000000
[ 48.667608] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 48.668752] CR2: 00007f5ce9a0e8e0 CR3: 0000000238f5c001 CR4: 0000000000060ee0
[ 48.670168] Call Trace:
[ 48.671250] xfs_rmap_unmap+0x633/0x980
[ 48.672037] ? kmem_zone_alloc+0x61/0xe0
[ 48.672842] xfs_rmap_finish_one+0x2d0/0x340
[ 48.673692] xfs_trans_log_finish_rmap_update+0x2f/0x40
[ 48.674737] xfs_rmap_update_finish_item+0x2c/0x40
[ 48.675710] xfs_defer_finish_noroll+0x184/0x520
[ 48.676614] ? xfs_rmap_update_cancel_item+0x10/0x10
[ 48.677615] ? xfs_free_file_space+0x355/0x390
[ 48.678512] __xfs_trans_commit+0x189/0x370
[ 48.679360] xfs_free_file_space+0x355/0x390
[ 48.680227] xfs_file_fallocate+0x1b3/0x330
[ 48.681077] ? __sb_start_write+0x8d/0xc0
[ 48.681889] vfs_fallocate+0x13d/0x270
[ 48.682637] ksys_fallocate+0x3c/0x70
[ 48.683382] __x64_sys_fallocate+0x1a/0x20
[ 48.684208] do_syscall_64+0x5a/0x180
[ 48.684953] entry_SYSCALL_64_after_hwframe+0x49/0xbe
The corruption check that is failing is this:
/* Make sure the unwritten flag matches. */
XFS_WANT_CORRUPTED_GOTO(mp, (flags & XFS_RMAP_UNWRITTEN) ==
(rec->rm_flags & XFS_RMAP_UNWRITTEN), out);
So this patch does not appear to be doing the right thing with
unwritten extent flagging in some case.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2018-10-06 16:37 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-02 17:41 delalloc and reflink fixes & tweaks V3 Christoph Hellwig
2018-10-02 17:42 ` [PATCH 1/8] xfs: remove XFS_IO_INVALID Christoph Hellwig
2018-10-02 17:42 ` [PATCH 2/8] xfs: remove suport for filesystems without unwritten extent flag Christoph Hellwig
2018-10-03 12:15 ` Brian Foster
2018-10-03 14:52 ` Darrick J. Wong
2018-10-03 14:54 ` Christoph Hellwig
2018-10-02 17:42 ` [PATCH 3/8] xfs: remove magic handling of unwritten extents in xfs_bmapi_allocate Christoph Hellwig
2018-10-03 12:15 ` Brian Foster
2018-10-06 9:34 ` Dave Chinner [this message]
2018-10-06 9:43 ` Christoph Hellwig
2018-10-07 10:13 ` Christoph Hellwig
2018-10-07 22:02 ` Dave Chinner
2018-10-08 2:24 ` Dave Chinner
2018-10-08 6:07 ` Dave Chinner
2018-10-02 17:42 ` [PATCH 4/8] xfs: handle zeroing in xfs_file_iomap_begin_delay Christoph Hellwig
2018-10-03 12:16 ` Brian Foster
2018-10-02 17:42 ` [PATCH 5/8] xfs: remove the unused shared argument to xfs_reflink_reserve_cow Christoph Hellwig
2018-10-02 17:42 ` [PATCH 6/8] xfs: remove the unused trimmed argument from xfs_reflink_trim_around_shared Christoph Hellwig
2018-10-02 17:42 ` [PATCH 7/8] xfs: fix fork selection in xfs_find_trim_cow_extent Christoph Hellwig
2018-10-02 17:42 ` [PATCH 8/8] xfs: print dangling delalloc extents Christoph Hellwig
2018-10-05 9:29 ` delalloc and reflink fixes & tweaks V3 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=20181006093433.GA18095@dastard \
--to=david@fromorbit.com \
--cc=hch@lst.de \
--cc=linux-xfs@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).