diff options
| author | Peter Maydell <peter.maydell@linaro.org> | 2014-03-19 13:47:22 +0000 |
|---|---|---|
| committer | Peter Maydell <peter.maydell@linaro.org> | 2014-03-19 13:47:22 +0000 |
| commit | c1b94a0ed2332b08ea7799c003c3ee9996782a3c (patch) | |
| tree | b263954ef8abf2e8c92cba8841c57c822b090f60 /block.c | |
| parent | 319c66d5abfb30553895589d24b70043639ad06d (diff) | |
| parent | 198fd05c357afff22f0b0e02639937519ed49b1f (diff) | |
| download | focaccia-qemu-c1b94a0ed2332b08ea7799c003c3ee9996782a3c.tar.gz focaccia-qemu-c1b94a0ed2332b08ea7799c003c3ee9996782a3c.zip | |
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
Block patches for 2.0.0-rc1 # gpg: Signature made Wed 19 Mar 2014 13:03:27 GMT using RSA key ID C88F2FD6 # gpg: Good signature from "Kevin Wolf <kwolf@redhat.com>" * remotes/kevin/tags/for-upstream: dataplane: fix implicit IOThread refcount block/nfs: report errors from libnfs block/nfs: bump libnfs requirement to 1.9.3 qcow2: Fix fail path in realloc_refcount_block() qcow2: Correct comment for realloc_refcount_block() qemu-io: Extended "--cmd" description in usage text qemu-io-cmds: Fixed typo in example for writev. block: Add error handling to bdrv_invalidate_cache() Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'block.c')
| -rw-r--r-- | block.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/block.c b/block.c index 53f5b44fbb..acb70fde3d 100644 --- a/block.c +++ b/block.c @@ -4781,27 +4781,43 @@ flush_parent: return bdrv_co_flush(bs->file); } -void bdrv_invalidate_cache(BlockDriverState *bs) +void bdrv_invalidate_cache(BlockDriverState *bs, Error **errp) { + Error *local_err = NULL; + int ret; + if (!bs->drv) { return; } if (bs->drv->bdrv_invalidate_cache) { - bs->drv->bdrv_invalidate_cache(bs); + bs->drv->bdrv_invalidate_cache(bs, &local_err); } else if (bs->file) { - bdrv_invalidate_cache(bs->file); + bdrv_invalidate_cache(bs->file, &local_err); + } + if (local_err) { + error_propagate(errp, local_err); + return; } - refresh_total_sectors(bs, bs->total_sectors); + ret = refresh_total_sectors(bs, bs->total_sectors); + if (ret < 0) { + error_setg_errno(errp, -ret, "Could not refresh total sector count"); + return; + } } -void bdrv_invalidate_cache_all(void) +void bdrv_invalidate_cache_all(Error **errp) { BlockDriverState *bs; + Error *local_err = NULL; QTAILQ_FOREACH(bs, &bdrv_states, device_list) { - bdrv_invalidate_cache(bs); + bdrv_invalidate_cache(bs, &local_err); + if (local_err) { + error_propagate(errp, local_err); + return; + } } } |