All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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 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.