Currently, xfs_rmap_irec_offset_unpack returns only 0 or -EFSCORRUPTED.
Change this function to return the code address of a failed conversion
in preparation for the next patch, which standardizes localized record
checking and reporting code.
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
 }
 
 /* Convert an internal btree record to an rmap record. */
-int
+xfs_failaddr_t
 xfs_rmap_btrec_to_irec(
        const union xfs_btree_rec       *rec,
        struct xfs_rmap_irec            *irec)
 {
        struct xfs_rmap_query_range_info        *query = priv;
        struct xfs_rmap_irec                    irec;
-       int                                     error;
 
-       error = xfs_rmap_btrec_to_irec(rec, &irec);
-       if (error)
-               return error;
+       if (xfs_rmap_btrec_to_irec(rec, &irec) != NULL)
+               return -EFSCORRUPTED;
+
        return query->fn(cur, &irec, query->priv);
 }
 
 
        return x;
 }
 
-static inline int
+static inline xfs_failaddr_t
 xfs_rmap_irec_offset_unpack(
        __u64                   offset,
        struct xfs_rmap_irec    *irec)
 {
        if (offset & ~(XFS_RMAP_OFF_MASK | XFS_RMAP_OFF_FLAGS))
-               return -EFSCORRUPTED;
+               return __this_address;
+
        irec->rm_offset = XFS_RMAP_OFF(offset);
        irec->rm_flags = 0;
        if (offset & XFS_RMAP_OFF_ATTR_FORK)
                irec->rm_flags |= XFS_RMAP_BMBT_BLOCK;
        if (offset & XFS_RMAP_OFF_UNWRITTEN)
                irec->rm_flags |= XFS_RMAP_UNWRITTEN;
-       return 0;
+       return NULL;
 }
 
 static inline void
 int xfs_rmap_compare(const struct xfs_rmap_irec *a,
                const struct xfs_rmap_irec *b);
 union xfs_btree_rec;
-int xfs_rmap_btrec_to_irec(const union xfs_btree_rec *rec,
+xfs_failaddr_t xfs_rmap_btrec_to_irec(const union xfs_btree_rec *rec,
                struct xfs_rmap_irec *irec);
 int xfs_rmap_has_record(struct xfs_btree_cur *cur, xfs_agblock_t bno,
                xfs_extlen_t len, bool *exists);
 
        bool                    is_unwritten;
        bool                    is_bmbt;
        bool                    is_attr;
-       int                     error;
 
-       error = xfs_rmap_btrec_to_irec(rec, &irec);
-       if (!xchk_btree_process_error(bs->sc, bs->cur, 0, &error))
-               goto out;
+       if (xfs_rmap_btrec_to_irec(rec, &irec) != NULL) {
+               xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
+               return 0;
+       }
 
        /* Check extent. */
        if (irec.rm_startblock + irec.rm_blockcount <= irec.rm_startblock)
        }
 
        xchk_rmapbt_xref(bs->sc, &irec);
-out:
-       return error;
+       return 0;
 }
 
 /* Scrub the rmap btree for some AG. */