• Dave Chinner's avatar
    xfs: fix error handling in xfs_refcount_insert() · 16858f7c
    Dave Chinner authored
    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: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    16858f7c
xfs_refcount.c 46.8 KB