xfs: kill xfs_read_buf()
xfs_read_buf() is effectively the same as xfs_trans_read_buf() when called outside a transaction context. The error handling is slightly different in that xfs_read_buf stales the errored buffer it gets back, but there is probably good reason for xfs_trans_read_buf() for doing this. Hence update xfs_trans_read_buf() to the same error handling as xfs_read_buf(), and convert all the callers of xfs_read_buf() to use the former function. We can then remove xfs_read_buf(). Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
This commit is contained in:
parent
a8acad7073
commit
7ca790a507
@ -1987,8 +1987,8 @@ xfs_attr_rmtval_get(xfs_da_args_t *args)
|
|||||||
(map[i].br_startblock != HOLESTARTBLOCK));
|
(map[i].br_startblock != HOLESTARTBLOCK));
|
||||||
dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock);
|
dblkno = XFS_FSB_TO_DADDR(mp, map[i].br_startblock);
|
||||||
blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount);
|
blkcnt = XFS_FSB_TO_BB(mp, map[i].br_blockcount);
|
||||||
error = xfs_read_buf(mp, mp->m_ddev_targp, dblkno,
|
error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp,
|
||||||
blkcnt, XBF_DONT_BLOCK, &bp);
|
dblkno, blkcnt, 0, &bp);
|
||||||
if (error)
|
if (error)
|
||||||
return(error);
|
return(error);
|
||||||
|
|
||||||
|
@ -402,7 +402,7 @@ xfs_growfs_data_private(
|
|||||||
|
|
||||||
/* update secondary superblocks. */
|
/* update secondary superblocks. */
|
||||||
for (agno = 1; agno < nagcount; agno++) {
|
for (agno = 1; agno < nagcount; agno++) {
|
||||||
error = xfs_read_buf(mp, mp->m_ddev_targp,
|
error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp,
|
||||||
XFS_AGB_TO_DADDR(mp, agno, XFS_SB_BLOCK(mp)),
|
XFS_AGB_TO_DADDR(mp, agno, XFS_SB_BLOCK(mp)),
|
||||||
XFS_FSS_TO_BB(mp, 1), 0, &bp);
|
XFS_FSS_TO_BB(mp, 1), 0, &bp);
|
||||||
if (error) {
|
if (error) {
|
||||||
|
@ -2539,14 +2539,11 @@ xlog_recover_dquot_pass2(
|
|||||||
return XFS_ERROR(EIO);
|
return XFS_ERROR(EIO);
|
||||||
ASSERT(dq_f->qlf_len == 1);
|
ASSERT(dq_f->qlf_len == 1);
|
||||||
|
|
||||||
error = xfs_read_buf(mp, mp->m_ddev_targp,
|
error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, dq_f->qlf_blkno,
|
||||||
dq_f->qlf_blkno,
|
XFS_FSB_TO_BB(mp, dq_f->qlf_len), 0, &bp);
|
||||||
XFS_FSB_TO_BB(mp, dq_f->qlf_len),
|
if (error)
|
||||||
0, &bp);
|
|
||||||
if (error) {
|
|
||||||
xfs_buf_ioerror_alert(bp, "xlog_recover_do..(read#3)");
|
|
||||||
return error;
|
return error;
|
||||||
}
|
|
||||||
ASSERT(bp);
|
ASSERT(bp);
|
||||||
ddq = (xfs_disk_dquot_t *)xfs_buf_offset(bp, dq_f->qlf_boffset);
|
ddq = (xfs_disk_dquot_t *)xfs_buf_offset(bp, dq_f->qlf_boffset);
|
||||||
|
|
||||||
|
@ -91,56 +91,6 @@ xfs_do_force_shutdown(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* This isn't an absolute requirement, but it is
|
|
||||||
* just a good idea to call xfs_read_buf instead of
|
|
||||||
* directly doing a read_buf call. For one, we shouldn't
|
|
||||||
* be doing this disk read if we are in SHUTDOWN state anyway,
|
|
||||||
* so this stops that from happening. Secondly, this does all
|
|
||||||
* the error checking stuff and the brelse if appropriate for
|
|
||||||
* the caller, so the code can be a little leaner.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
xfs_read_buf(
|
|
||||||
struct xfs_mount *mp,
|
|
||||||
xfs_buftarg_t *target,
|
|
||||||
xfs_daddr_t blkno,
|
|
||||||
int len,
|
|
||||||
uint flags,
|
|
||||||
xfs_buf_t **bpp)
|
|
||||||
{
|
|
||||||
xfs_buf_t *bp;
|
|
||||||
int error;
|
|
||||||
|
|
||||||
if (!flags)
|
|
||||||
flags = XBF_MAPPED;
|
|
||||||
|
|
||||||
bp = xfs_buf_read(target, blkno, len, flags);
|
|
||||||
if (!bp)
|
|
||||||
return XFS_ERROR(EIO);
|
|
||||||
error = bp->b_error;
|
|
||||||
if (!error && !XFS_FORCED_SHUTDOWN(mp)) {
|
|
||||||
*bpp = bp;
|
|
||||||
} else {
|
|
||||||
*bpp = NULL;
|
|
||||||
if (error) {
|
|
||||||
xfs_buf_ioerror_alert(bp, __func__);
|
|
||||||
} else {
|
|
||||||
error = XFS_ERROR(EIO);
|
|
||||||
}
|
|
||||||
if (bp) {
|
|
||||||
XFS_BUF_UNDONE(bp);
|
|
||||||
xfs_buf_stale(bp);
|
|
||||||
/*
|
|
||||||
* brelse clears B_ERROR and b_error
|
|
||||||
*/
|
|
||||||
xfs_buf_relse(bp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (error);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* helper function to extract extent size hint from inode
|
* helper function to extract extent size hint from inode
|
||||||
*/
|
*/
|
||||||
|
@ -39,9 +39,6 @@ xfs_fsb_to_db(struct xfs_inode *ip, xfs_fsblock_t fsb)
|
|||||||
/*
|
/*
|
||||||
* Prototypes for functions in xfs_rw.c.
|
* Prototypes for functions in xfs_rw.c.
|
||||||
*/
|
*/
|
||||||
extern int xfs_read_buf(struct xfs_mount *mp, xfs_buftarg_t *btp,
|
|
||||||
xfs_daddr_t blkno, int len, uint flags,
|
|
||||||
struct xfs_buf **bpp);
|
|
||||||
extern xfs_extlen_t xfs_get_extsz_hint(struct xfs_inode *ip);
|
extern xfs_extlen_t xfs_get_extsz_hint(struct xfs_inode *ip);
|
||||||
|
|
||||||
#endif /* __XFS_RW_H__ */
|
#endif /* __XFS_RW_H__ */
|
||||||
|
@ -274,6 +274,8 @@ xfs_trans_read_buf(
|
|||||||
xfs_buf_log_item_t *bip;
|
xfs_buf_log_item_t *bip;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
*bpp = NULL;
|
||||||
|
|
||||||
if (flags == 0)
|
if (flags == 0)
|
||||||
flags = XBF_MAPPED;
|
flags = XBF_MAPPED;
|
||||||
|
|
||||||
@ -289,6 +291,8 @@ xfs_trans_read_buf(
|
|||||||
if (bp->b_error) {
|
if (bp->b_error) {
|
||||||
error = bp->b_error;
|
error = bp->b_error;
|
||||||
xfs_buf_ioerror_alert(bp, __func__);
|
xfs_buf_ioerror_alert(bp, __func__);
|
||||||
|
XFS_BUF_UNDONE(bp);
|
||||||
|
xfs_buf_stale(bp);
|
||||||
xfs_buf_relse(bp);
|
xfs_buf_relse(bp);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user