diff options
author | Joe Thornber <ejt@redhat.com> | 2019-10-29 10:39:20 +0000 |
---|---|---|
committer | Joe Thornber <ejt@redhat.com> | 2019-10-29 10:39:20 +0000 |
commit | 2b3c39e402b966043a65ae649797defb6db597fc (patch) | |
tree | 7d4855400451a37baf37086d485b05137ec1de83 | |
parent | 5fdebf9bbf68a53b9d2153dbd8bf27a36e0ef3cd (diff) | |
download | lvm2-2b3c39e402b966043a65ae649797defb6db597fc.tar.gz |
[bcache] pass up the error from io_submit rather than using generic -EIO
Author: Heming Zhao
-rw-r--r-- | lib/device/bcache.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/device/bcache.c b/lib/device/bcache.c index b0edf2806..1249d6ef7 100644 --- a/lib/device/bcache.c +++ b/lib/device/bcache.c @@ -293,6 +293,10 @@ static bool _async_issue(struct io_engine *ioe, enum dir d, int fd, if (r < 0) { _cb_free(e->cbs, cb); + ((struct block *) context)->error = r; + log_warn("io_submit <%c> off %llu bytes %llu return %d:%s", + (d == DIR_READ) ? 'R' : 'W', (long long unsigned)offset, + (long long unsigned) nbytes, r, strerror(-r)); return false; } @@ -869,8 +873,7 @@ static void _issue_low_level(struct block *b, enum dir d) dm_list_move(&cache->io_pending, &b->list); if (!cache->engine->issue(cache->engine, d, b->fd, sb, se, b->data, b)) { - /* FIXME: if io_submit() set an errno, return that instead of EIO? */ - _complete_io(b, -EIO); + _complete_io(b, b->error); return; } } |