]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs: make xfs_buf_read_map return an error code
authorDarrick J. Wong <darrick.wong@oracle.com>
Sat, 14 Mar 2020 03:01:00 +0000 (23:01 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Sat, 14 Mar 2020 03:01:00 +0000 (23:01 -0400)
Source kernel commit: 4ed8e27b4f755f50d78dc3d9f9760b60e891f97b

Convert xfs_buf_read_map() to return numeric error codes like most
everywhere else in xfs.  This involves moving the open-coded logic that
reports metadata IO read / corruption errors and stales the buffer into
xfs_buf_read_map so that the logic is all in one place.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
libxfs/xfs_alloc.c
libxfs/xfs_attr_remote.c

index ec233d0d70a0298931985ba7690b0264bd0c7468..1bf813e36dd17f656f4fdb21e543c3720bbb2a48 100644 (file)
@@ -2952,14 +2952,17 @@ xfs_read_agf(
        trace_xfs_read_agf(mp, agno);
 
        ASSERT(agno != NULLAGNUMBER);
-       error = xfs_trans_read_buf(
-                       mp, tp, mp->m_ddev_targp,
+       error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp,
                        XFS_AG_DADDR(mp, agno, XFS_AGF_DADDR(mp)),
                        XFS_FSS_TO_BB(mp, 1), flags, bpp, &xfs_agf_buf_ops);
+       /*
+        * Callers of xfs_read_agf() currently interpret a NULL bpp as EAGAIN
+        * and need to be converted to check for EAGAIN specifically.
+        */
+       if (error == -EAGAIN)
+               return 0;
        if (error)
                return error;
-       if (!*bpp)
-               return 0;
 
        ASSERT(!(*bpp)->b_error);
        xfs_buf_set_ref(*bpp, XFS_AGF_REF);
index c7a4be35664fc9293e828b89f079e29d52469c7e..00371bdcfb38fb105a4ca3f19d5db873a1bf9dd7 100644 (file)
@@ -421,16 +421,6 @@ xfs_attr_rmtval_get(
                                        &xfs_attr3_rmt_buf_ops);
                        if (!bp)
                                return -ENOMEM;
-                       error = bp->b_error;
-                       if (error) {
-                               xfs_buf_ioerror_alert(bp, __func__);
-                               xfs_buf_relse(bp);
-
-                               /* bad CRC means corrupted metadata */
-                               if (error == -EFSBADCRC)
-                                       error = -EFSCORRUPTED;
-                               return error;
-                       }
 
                        error = xfs_attr_rmtval_copyout(mp, bp, args->dp->i_ino,
                                                        &offset, &valuelen,