|
@@ -1074,45 +1074,6 @@ xfs_buf_ioerror_alert(
|
|
|
(__uint64_t)XFS_BUF_ADDR(bp), func, -bp->b_error, bp->b_length);
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * Same as xfs_bioerror, except that we are releasing the buffer
|
|
|
- * here ourselves, and avoiding the xfs_buf_ioend call.
|
|
|
- * This is meant for userdata errors; metadata bufs come with
|
|
|
- * iodone functions attached, so that we can track down errors.
|
|
|
- */
|
|
|
-int
|
|
|
-xfs_bioerror_relse(
|
|
|
- struct xfs_buf *bp)
|
|
|
-{
|
|
|
- int64_t fl = bp->b_flags;
|
|
|
- /*
|
|
|
- * No need to wait until the buffer is unpinned.
|
|
|
- * We aren't flushing it.
|
|
|
- *
|
|
|
- * chunkhold expects B_DONE to be set, whether
|
|
|
- * we actually finish the I/O or not. We don't want to
|
|
|
- * change that interface.
|
|
|
- */
|
|
|
- XFS_BUF_UNREAD(bp);
|
|
|
- XFS_BUF_DONE(bp);
|
|
|
- xfs_buf_stale(bp);
|
|
|
- bp->b_iodone = NULL;
|
|
|
- if (!(fl & XBF_ASYNC)) {
|
|
|
- /*
|
|
|
- * Mark b_error and B_ERROR _both_.
|
|
|
- * Lot's of chunkcache code assumes that.
|
|
|
- * There's no reason to mark error for
|
|
|
- * ASYNC buffers.
|
|
|
- */
|
|
|
- xfs_buf_ioerror(bp, -EIO);
|
|
|
- complete(&bp->b_iowait);
|
|
|
- } else {
|
|
|
- xfs_buf_relse(bp);
|
|
|
- }
|
|
|
-
|
|
|
- return -EIO;
|
|
|
-}
|
|
|
-
|
|
|
int
|
|
|
xfs_bwrite(
|
|
|
struct xfs_buf *bp)
|