diff options
author | Dave Chinner <david@fromorbit.com> | 2016-07-20 04:53:35 +0300 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2016-07-20 04:53:35 +0300 |
commit | bbfeb6141fcc8e2aea47b2f235cc8cc8ffb4a293 (patch) | |
tree | 65fc831b4e915412ac4baf0fd72525eb05d48aa8 /fs/xfs/xfs_buf_item.c | |
parent | f63716175c0730c2f29b4591146f0045cfcaa8dc (diff) | |
parent | 9c7504aa72b6e2104ba6dcef518c15672ec51175 (diff) | |
download | linux-bbfeb6141fcc8e2aea47b2f235cc8cc8ffb4a293.tar.xz |
Merge branch 'xfs-4.8-buf-fixes' into for-next
Diffstat (limited to 'fs/xfs/xfs_buf_item.c')
-rw-r--r-- | fs/xfs/xfs_buf_item.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c index 2e95ad036316..0337690c88bc 100644 --- a/fs/xfs/xfs_buf_item.c +++ b/fs/xfs/xfs_buf_item.c @@ -1081,6 +1081,8 @@ xfs_buf_iodone_callback_error( trace_xfs_buf_item_iodone_async(bp, _RET_IP_); ASSERT(bp->b_iodone != NULL); + cfg = xfs_error_get_cfg(mp, XFS_ERR_METADATA, bp->b_error); + /* * If the write was asynchronous then no one will be looking for the * error. If this is the first failure of this type, clear the error @@ -1088,13 +1090,12 @@ xfs_buf_iodone_callback_error( * async write failure at least once, but we also need to set the buffer * up to behave correctly now for repeated failures. */ - if (!(bp->b_flags & (XBF_STALE|XBF_WRITE_FAIL)) || + if (!(bp->b_flags & (XBF_STALE | XBF_WRITE_FAIL)) || bp->b_last_error != bp->b_error) { - bp->b_flags |= (XBF_WRITE | XBF_ASYNC | - XBF_DONE | XBF_WRITE_FAIL); + bp->b_flags |= (XBF_WRITE | XBF_DONE | XBF_WRITE_FAIL); bp->b_last_error = bp->b_error; - bp->b_retries = 0; - bp->b_first_retry_time = jiffies; + if (cfg->retry_timeout && !bp->b_first_retry_time) + bp->b_first_retry_time = jiffies; xfs_buf_ioerror(bp, 0); xfs_buf_submit(bp); @@ -1105,7 +1106,6 @@ xfs_buf_iodone_callback_error( * Repeated failure on an async write. Take action according to the * error configuration we have been set up to use. */ - cfg = xfs_error_get_cfg(mp, XFS_ERR_METADATA, bp->b_error); if (cfg->max_retries != XFS_ERR_RETRY_FOREVER && ++bp->b_retries > cfg->max_retries) |