@@ -208,8 +208,7 @@ libxfs_buf_read(
#endif /* XFS_BUF_TRACING */
-extern void libxfs_readbuf_verify(struct xfs_buf *bp,
- const struct xfs_buf_ops *ops);
+int libxfs_readbuf_verify(struct xfs_buf *bp, const struct xfs_buf_ops *ops);
struct xfs_buf *libxfs_getsb(struct xfs_mount *);
extern void libxfs_bcache_purge(void);
extern void libxfs_bcache_free(void);
@@ -943,14 +943,18 @@ libxfs_readbufr(struct xfs_buftarg *btp, xfs_daddr_t blkno, xfs_buf_t *bp,
return error;
}
-void
-libxfs_readbuf_verify(struct xfs_buf *bp, const struct xfs_buf_ops *ops)
+int
+libxfs_readbuf_verify(
+ struct xfs_buf *bp,
+ const struct xfs_buf_ops *ops)
{
if (!ops)
- return;
+ return bp->b_error;
+
bp->b_ops = ops;
bp->b_ops->verify_read(bp);
bp->b_flags &= ~LIBXFS_B_UNCHECKED;
+ return bp->b_error;
}
static struct xfs_buf *
@@ -400,9 +400,10 @@ pf_read_inode_dirs(
int icnt = 0;
int hasdir = 0;
int isadir;
+ int error;
- libxfs_readbuf_verify(bp, &xfs_inode_buf_ops);
- if (bp->b_error)
+ error = -libxfs_readbuf_verify(bp, &xfs_inode_buf_ops);
+ if (error)
return;
for (icnt = 0; icnt < (bp->b_bcount >> mp->m_sb.sb_inodelog); icnt++) {