]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
xfs: make xfs_trans_get_buf_map return an error code
authorDarrick J. Wong <darrick.wong@oracle.com>
Fri, 24 Jan 2020 01:01:18 +0000 (17:01 -0800)
committerDarrick J. Wong <darrick.wong@oracle.com>
Sun, 26 Jan 2020 22:32:26 +0000 (14:32 -0800)
Convert xfs_trans_get_buf_map() to return numeric error codes like most
everywhere else in xfs.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
fs/xfs/libxfs/xfs_da_btree.c
fs/xfs/xfs_trans.h
fs/xfs/xfs_trans_buf.c

index 8c3eafe280edf0f3d1986b8d4fb653e2f3ef511f..875e04f82541fa07d71c41e4a36698c7eef19c72 100644 (file)
@@ -2591,13 +2591,9 @@ xfs_da_get_buf(
        if (error || nmap == 0)
                goto out_free;
 
-       bp = xfs_trans_get_buf_map(tp, mp->m_ddev_targp, mapp, nmap, 0);
-       error = bp ? bp->b_error : -EIO;
-       if (error) {
-               if (bp)
-                       xfs_trans_brelse(tp, bp);
+       error = xfs_trans_get_buf_map(tp, mp->m_ddev_targp, mapp, nmap, 0, &bp);
+       if (error)
                goto out_free;
-       }
 
        *bpp = bp;
 
index 64d7f171ebd32ae8ebe4992b64700d36e49f18f1..a0be934ec8118d6e50a8bee6630c6acac61a11b4 100644 (file)
@@ -169,10 +169,9 @@ int                xfs_trans_alloc_empty(struct xfs_mount *mp,
                        struct xfs_trans **tpp);
 void           xfs_trans_mod_sb(xfs_trans_t *, uint, int64_t);
 
-struct xfs_buf *xfs_trans_get_buf_map(struct xfs_trans *tp,
-                                      struct xfs_buftarg *target,
-                                      struct xfs_buf_map *map, int nmaps,
-                                      uint flags);
+int xfs_trans_get_buf_map(struct xfs_trans *tp, struct xfs_buftarg *target,
+               struct xfs_buf_map *map, int nmaps, xfs_buf_flags_t flags,
+               struct xfs_buf **bpp);
 
 static inline struct xfs_buf *
 xfs_trans_get_buf(
@@ -182,8 +181,14 @@ xfs_trans_get_buf(
        int                     numblks,
        uint                    flags)
 {
+       struct xfs_buf          *bp;
+       int                     error;
+
        DEFINE_SINGLE_BUF_MAP(map, blkno, numblks);
-       return xfs_trans_get_buf_map(tp, target, &map, 1, flags);
+       error = xfs_trans_get_buf_map(tp, target, &map, 1, flags, &bp);
+       if (error)
+               return NULL;
+       return bp;
 }
 
 int            xfs_trans_read_buf_map(struct xfs_mount *mp,
index cdb66c661425c2385ac030a0160ba27926b0a9d2..83470998f87b2f283295f8cae4e2fde86ac37879 100644 (file)
@@ -112,24 +112,22 @@ xfs_trans_bjoin(
  * If the transaction pointer is NULL, make this just a normal
  * get_buf() call.
  */
-struct xfs_buf *
+int
 xfs_trans_get_buf_map(
        struct xfs_trans        *tp,
        struct xfs_buftarg      *target,
        struct xfs_buf_map      *map,
        int                     nmaps,
-       xfs_buf_flags_t         flags)
+       xfs_buf_flags_t         flags,
+       struct xfs_buf          **bpp)
 {
        xfs_buf_t               *bp;
        struct xfs_buf_log_item *bip;
        int                     error;
 
-       if (!tp) {
-               error = xfs_buf_get_map(target, map, nmaps, flags, &bp);
-               if (error)
-                       return NULL;
-               return bp;
-       }
+       *bpp = NULL;
+       if (!tp)
+               return xfs_buf_get_map(target, map, nmaps, flags, bpp);
 
        /*
         * If we find the buffer in the cache with this transaction
@@ -151,18 +149,20 @@ xfs_trans_get_buf_map(
                ASSERT(atomic_read(&bip->bli_refcount) > 0);
                bip->bli_recur++;
                trace_xfs_trans_get_buf_recur(bip);
-               return bp;
+               *bpp = bp;
+               return 0;
        }
 
        error = xfs_buf_get_map(target, map, nmaps, flags, &bp);
        if (error)
-               return NULL;
+               return error;
 
        ASSERT(!bp->b_error);
 
        _xfs_trans_bjoin(tp, bp, 1);
        trace_xfs_trans_get_buf(bp->b_log_item);
-       return bp;
+       *bpp = bp;
+       return 0;
 }
 
 /*