|
@@ -929,19 +929,7 @@ xfs_buf_iodone_work(
|
|
xfs_buf_t *bp =
|
|
xfs_buf_t *bp =
|
|
container_of(work, xfs_buf_t, b_iodone_work);
|
|
container_of(work, xfs_buf_t, b_iodone_work);
|
|
|
|
|
|
- /*
|
|
|
|
- * We can get an EOPNOTSUPP to ordered writes. Here we clear the
|
|
|
|
- * ordered flag and reissue them. Because we can't tell the higher
|
|
|
|
- * layers directly that they should not issue ordered I/O anymore, they
|
|
|
|
- * need to check if the _XFS_BARRIER_FAILED flag was set during I/O completion.
|
|
|
|
- */
|
|
|
|
- if ((bp->b_error == EOPNOTSUPP) &&
|
|
|
|
- (bp->b_flags & (XBF_ORDERED|XBF_ASYNC)) == (XBF_ORDERED|XBF_ASYNC)) {
|
|
|
|
- trace_xfs_buf_ordered_retry(bp, _RET_IP_);
|
|
|
|
- bp->b_flags &= ~XBF_ORDERED;
|
|
|
|
- bp->b_flags |= _XFS_BARRIER_FAILED;
|
|
|
|
- xfs_buf_iorequest(bp);
|
|
|
|
- } else if (bp->b_iodone)
|
|
|
|
|
|
+ if (bp->b_iodone)
|
|
(*(bp->b_iodone))(bp);
|
|
(*(bp->b_iodone))(bp);
|
|
else if (bp->b_flags & XBF_ASYNC)
|
|
else if (bp->b_flags & XBF_ASYNC)
|
|
xfs_buf_relse(bp);
|
|
xfs_buf_relse(bp);
|
|
@@ -1200,7 +1188,7 @@ _xfs_buf_ioapply(
|
|
|
|
|
|
if (bp->b_flags & XBF_ORDERED) {
|
|
if (bp->b_flags & XBF_ORDERED) {
|
|
ASSERT(!(bp->b_flags & XBF_READ));
|
|
ASSERT(!(bp->b_flags & XBF_READ));
|
|
- rw = WRITE_BARRIER;
|
|
|
|
|
|
+ rw = WRITE_FLUSH_FUA;
|
|
} else if (bp->b_flags & XBF_LOG_BUFFER) {
|
|
} else if (bp->b_flags & XBF_LOG_BUFFER) {
|
|
ASSERT(!(bp->b_flags & XBF_READ_AHEAD));
|
|
ASSERT(!(bp->b_flags & XBF_READ_AHEAD));
|
|
bp->b_flags &= ~_XBF_RUN_QUEUES;
|
|
bp->b_flags &= ~_XBF_RUN_QUEUES;
|