* [PATCH] xfs: fix error handling in xfs_refcount_insert()
@ 2018-05-31 23:46 Dave Chinner
2018-05-31 23:48 ` Darrick J. Wong
0 siblings, 1 reply; 2+ messages in thread
From: Dave Chinner @ 2018-05-31 23:46 UTC (permalink / raw)
To: linux-xfs
From: Dave Chinner <dchinner@redhat.com>
generic/475 fired an assert failure just after the filesystem was
shut down:
XFS: Assertion failed: fs_is_ok, file: fs/xfs/libxfs/xfs_refcount.c, line: 182
.....
Call Trace:
xfs_refcount_insert+0x151/0x190
xfs_refcount_adjust_extents.constprop.11+0x9c/0x470
xfs_refcount_adjust.constprop.10+0xb0/0x270
xfs_refcount_finish_one+0x25a/0x420
xfs_trans_log_finish_refcount_update+0x2a/0x40
xfs_refcount_update_finish_item+0x35/0xa0
xfs_defer_finish+0x15e/0x4d0
xfs_reflink_remap_extent+0x1bc/0x610
xfs_reflink_remap_blocks+0x6e/0x280
xfs_reflink_remap_range+0x311/0x530
vfs_clone_file_range+0x119/0x200
....
If xfs_btree_insert() returns an error, the corruption check fires
instead of passing the error back the caller. The corruption check
should be after we've checked for an error, not before, thereby
avoiding assert failures if the filesystem shuts down during a
refcount btree record insert.
Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
fs/xfs/libxfs/xfs_refcount.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c
index ae07a85d9bd5..235a9cf7265f 100644
--- a/fs/xfs/libxfs/xfs_refcount.c
+++ b/fs/xfs/libxfs/xfs_refcount.c
@@ -165,7 +165,10 @@ xfs_refcount_insert(
cur->bc_rec.rc.rc_blockcount = irec->rc_blockcount;
cur->bc_rec.rc.rc_refcount = irec->rc_refcount;
error = xfs_btree_insert(cur, i);
+ if (error)
+ goto out_error;
XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, *i == 1, out_error);
+
out_error:
if (error)
trace_xfs_refcount_insert_error(cur->bc_mp,
--
2.17.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] xfs: fix error handling in xfs_refcount_insert()
2018-05-31 23:46 [PATCH] xfs: fix error handling in xfs_refcount_insert() Dave Chinner
@ 2018-05-31 23:48 ` Darrick J. Wong
0 siblings, 0 replies; 2+ messages in thread
From: Darrick J. Wong @ 2018-05-31 23:48 UTC (permalink / raw)
To: Dave Chinner; +Cc: linux-xfs
On Fri, Jun 01, 2018 at 09:46:25AM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
>
> generic/475 fired an assert failure just after the filesystem was
> shut down:
>
> XFS: Assertion failed: fs_is_ok, file: fs/xfs/libxfs/xfs_refcount.c, line: 182
> .....
> Call Trace:
> xfs_refcount_insert+0x151/0x190
> xfs_refcount_adjust_extents.constprop.11+0x9c/0x470
> xfs_refcount_adjust.constprop.10+0xb0/0x270
> xfs_refcount_finish_one+0x25a/0x420
> xfs_trans_log_finish_refcount_update+0x2a/0x40
> xfs_refcount_update_finish_item+0x35/0xa0
> xfs_defer_finish+0x15e/0x4d0
> xfs_reflink_remap_extent+0x1bc/0x610
> xfs_reflink_remap_blocks+0x6e/0x280
> xfs_reflink_remap_range+0x311/0x530
> vfs_clone_file_range+0x119/0x200
> ....
>
> If xfs_btree_insert() returns an error, the corruption check fires
> instead of passing the error back the caller. The corruption check
> should be after we've checked for an error, not before, thereby
> avoiding assert failures if the filesystem shuts down during a
> refcount btree record insert.
>
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
HAAA I ARE DUMMM
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> fs/xfs/libxfs/xfs_refcount.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/fs/xfs/libxfs/xfs_refcount.c b/fs/xfs/libxfs/xfs_refcount.c
> index ae07a85d9bd5..235a9cf7265f 100644
> --- a/fs/xfs/libxfs/xfs_refcount.c
> +++ b/fs/xfs/libxfs/xfs_refcount.c
> @@ -165,7 +165,10 @@ xfs_refcount_insert(
> cur->bc_rec.rc.rc_blockcount = irec->rc_blockcount;
> cur->bc_rec.rc.rc_refcount = irec->rc_refcount;
> error = xfs_btree_insert(cur, i);
> + if (error)
> + goto out_error;
> XFS_WANT_CORRUPTED_GOTO(cur->bc_mp, *i == 1, out_error);
> +
> out_error:
> if (error)
> trace_xfs_refcount_insert_error(cur->bc_mp,
> --
> 2.17.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-05-31 23:48 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-31 23:46 [PATCH] xfs: fix error handling in xfs_refcount_insert() Dave Chinner
2018-05-31 23:48 ` Darrick J. Wong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox