forked from Minki/linux
[XFS] Ensure errors from xfs_bdstrat() are correctly checked.
xfsbdstrat() is declared to return an error. That is never checked because the error is propagated by the xfs_buf_t that is passed through the function. Mark xfsbdstrat() as returning void and comment the prototype on the methods needed for error checking. SGI-PV: 980084 SGI-Modid: xfs-linux-melb:xfs-kern:30823a Signed-off-by: David Chinner <dgc@sgi.com> Signed-off-by: Niv Sardi <xaiki@sgi.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
parent
556b8b166c
commit
d64e31a2f5
@ -875,28 +875,21 @@ xfs_bdstrat_cb(struct xfs_buf *bp)
|
||||
}
|
||||
|
||||
/*
|
||||
* Wrapper around bdstrat so that we can stop data
|
||||
* from going to disk in case we are shutting down the filesystem.
|
||||
* Typically user data goes thru this path; one of the exceptions
|
||||
* is the superblock.
|
||||
* Wrapper around bdstrat so that we can stop data from going to disk in case
|
||||
* we are shutting down the filesystem. Typically user data goes thru this
|
||||
* path; one of the exceptions is the superblock.
|
||||
*/
|
||||
int
|
||||
void
|
||||
xfsbdstrat(
|
||||
struct xfs_mount *mp,
|
||||
struct xfs_buf *bp)
|
||||
{
|
||||
ASSERT(mp);
|
||||
if (!XFS_FORCED_SHUTDOWN(mp)) {
|
||||
/* Grio redirection would go here
|
||||
* if (XFS_BUF_IS_GRIO(bp)) {
|
||||
*/
|
||||
|
||||
if (!XFS_FORCED_SHUTDOWN(mp))
|
||||
xfs_buf_iorequest(bp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
xfs_buftrace("XFSBDSTRAT IOERROR", bp);
|
||||
return (xfs_bioerror_relse(bp));
|
||||
xfs_bioerror_relse(bp);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -68,7 +68,8 @@ extern void xfs_inval_cached_trace(struct xfs_inode *,
|
||||
#define xfs_inval_cached_trace(ip, offset, len, first, last)
|
||||
#endif
|
||||
|
||||
extern int xfsbdstrat(struct xfs_mount *, struct xfs_buf *);
|
||||
/* errors from xfsbdstrat() must be extracted from the buffer */
|
||||
extern void xfsbdstrat(struct xfs_mount *, struct xfs_buf *);
|
||||
extern int xfs_bdstrat_cb(struct xfs_buf *);
|
||||
extern int xfs_dev_is_read_only(struct xfs_mount *, char *);
|
||||
|
||||
|
@ -121,7 +121,8 @@ xlog_bread(
|
||||
XFS_BUF_SET_TARGET(bp, log->l_mp->m_logdev_targp);
|
||||
|
||||
xfsbdstrat(log->l_mp, bp);
|
||||
if ((error = xfs_iowait(bp)))
|
||||
error = xfs_iowait(bp);
|
||||
if (error)
|
||||
xfs_ioerror_alert("xlog_bread", log->l_mp,
|
||||
bp, XFS_BUF_ADDR(bp));
|
||||
return error;
|
||||
@ -3849,7 +3850,8 @@ xlog_do_recover(
|
||||
XFS_BUF_READ(bp);
|
||||
XFS_BUF_UNASYNC(bp);
|
||||
xfsbdstrat(log->l_mp, bp);
|
||||
if ((error = xfs_iowait(bp))) {
|
||||
error = xfs_iowait(bp);
|
||||
if (error) {
|
||||
xfs_ioerror_alert("xlog_do_recover",
|
||||
log->l_mp, bp, XFS_BUF_ADDR(bp));
|
||||
ASSERT(0);
|
||||
|
@ -1470,7 +1470,6 @@ xfs_unmountfs_writesb(xfs_mount_t *mp)
|
||||
XFS_BUF_UNASYNC(sbp);
|
||||
ASSERT(XFS_BUF_TARGET(sbp) == mp->m_ddev_targp);
|
||||
xfsbdstrat(mp, sbp);
|
||||
/* Nevermind errors we might get here. */
|
||||
error = xfs_iowait(sbp);
|
||||
if (error)
|
||||
xfs_ioerror_alert("xfs_unmountfs_writesb",
|
||||
|
@ -354,17 +354,15 @@ xfs_trans_read_buf(
|
||||
ASSERT(!XFS_BUF_ISASYNC(bp));
|
||||
XFS_BUF_READ(bp);
|
||||
xfsbdstrat(tp->t_mountp, bp);
|
||||
xfs_iowait(bp);
|
||||
if (XFS_BUF_GETERROR(bp) != 0) {
|
||||
error = xfs_iowait(bp);
|
||||
if (error) {
|
||||
xfs_ioerror_alert("xfs_trans_read_buf", mp,
|
||||
bp, blkno);
|
||||
error = XFS_BUF_GETERROR(bp);
|
||||
xfs_buf_relse(bp);
|
||||
/*
|
||||
* We can gracefully recover from most
|
||||
* read errors. Ones we can't are those
|
||||
* that happen after the transaction's
|
||||
* already dirty.
|
||||
* We can gracefully recover from most read
|
||||
* errors. Ones we can't are those that happen
|
||||
* after the transaction's already dirty.
|
||||
*/
|
||||
if (tp->t_flags & XFS_TRANS_DIRTY)
|
||||
xfs_force_shutdown(tp->t_mountp,
|
||||
|
@ -3825,7 +3825,8 @@ xfs_zero_remaining_bytes(
|
||||
XFS_BUF_READ(bp);
|
||||
XFS_BUF_SET_ADDR(bp, XFS_FSB_TO_DB(ip, imap.br_startblock));
|
||||
xfsbdstrat(mp, bp);
|
||||
if ((error = xfs_iowait(bp))) {
|
||||
error = xfs_iowait(bp);
|
||||
if (error) {
|
||||
xfs_ioerror_alert("xfs_zero_remaining_bytes(read)",
|
||||
mp, bp, XFS_BUF_ADDR(bp));
|
||||
break;
|
||||
@ -3837,7 +3838,8 @@ xfs_zero_remaining_bytes(
|
||||
XFS_BUF_UNREAD(bp);
|
||||
XFS_BUF_WRITE(bp);
|
||||
xfsbdstrat(mp, bp);
|
||||
if ((error = xfs_iowait(bp))) {
|
||||
error = xfs_iowait(bp);
|
||||
if (error) {
|
||||
xfs_ioerror_alert("xfs_zero_remaining_bytes(write)",
|
||||
mp, bp, XFS_BUF_ADDR(bp));
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user