[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [RFC PATCH 37/41] migration/block: Use real permissions
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [RFC PATCH 37/41] migration/block: Use real permissions |
Date: |
Mon, 13 Feb 2017 18:22:59 +0100 |
Request BLK_PERM_CONSISTENT_READ for the source of block migration, and
handle potential permission errors as good as we can in this place
(which is not very good, but it matches the other failure cases).
Signed-off-by: Kevin Wolf <address@hidden>
---
migration/block.c | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/migration/block.c b/migration/block.c
index d259936..958d0fc 100644
--- a/migration/block.c
+++ b/migration/block.c
@@ -379,7 +379,7 @@ static void unset_dirty_tracking(void)
}
}
-static void init_blk_migration(QEMUFile *f)
+static int init_blk_migration(QEMUFile *f)
{
BlockDriverState *bs;
BlkMigDevState *bmds;
@@ -390,6 +390,8 @@ static void init_blk_migration(QEMUFile *f)
BlkMigDevState *bmds;
BlockDriverState *bs;
} *bmds_bs;
+ Error *local_err = NULL;
+ int ret;
block_mig_state.submitted = 0;
block_mig_state.read_done = 0;
@@ -411,12 +413,12 @@ static void init_blk_migration(QEMUFile *f)
sectors = bdrv_nb_sectors(bs);
if (sectors <= 0) {
+ ret = sectors;
goto out;
}
bmds = g_new0(BlkMigDevState, 1);
- /* FIXME Use real permissions */
- bmds->blk = blk_new(0, BLK_PERM_ALL);
+ bmds->blk = blk_new(BLK_PERM_CONSISTENT_READ, BLK_PERM_ALL);
bmds->blk_name = g_strdup(bdrv_get_device_name(bs));
bmds->bulk_completed = 0;
bmds->total_sectors = sectors;
@@ -446,7 +448,11 @@ static void init_blk_migration(QEMUFile *f)
BlockDriverState *bs = bmds_bs[i].bs;
if (bmds) {
- blk_insert_bs(bmds->blk, bs, &error_abort);
+ ret = blk_insert_bs(bmds->blk, bs, &local_err);
+ if (ret < 0) {
+ error_report_err(local_err);
+ goto out;
+ }
alloc_aio_bitmap(bmds);
error_setg(&bmds->blocker, "block device is in use by migration");
@@ -454,8 +460,10 @@ static void init_blk_migration(QEMUFile *f)
}
}
+ ret = 0;
out:
g_free(bmds_bs);
+ return ret;
}
/* Called with no lock taken. */
@@ -706,7 +714,10 @@ static int block_save_setup(QEMUFile *f, void *opaque)
block_mig_state.submitted, block_mig_state.transferred);
qemu_mutex_lock_iothread();
- init_blk_migration(f);
+ ret = init_blk_migration(f);
+ if (ret < 0) {
+ return ret;
+ }
/* start track dirty blocks */
ret = set_dirty_tracking();
--
1.8.3.1
- [Qemu-block] [RFC PATCH 29/41] commit: Use real permissions for HMP 'commit', (continued)
- [Qemu-block] [RFC PATCH 29/41] commit: Use real permissions for HMP 'commit', Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 30/41] backup: Use real permissions in backup block job, Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 33/41] block: Allow backing file links in change_parent_backing_link(), Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 36/41] hmp: Request permissions in qemu-io, Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 38/41] nbd/server: Use real permissions for NBD exports, Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 26/41] block: Factor out bdrv_open_driver(), Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 31/41] block: Fix pending requests check in bdrv_append(), Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 32/41] block: BdrvChildRole.attach/detach() callbacks, Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 35/41] stream: Use real permissions in streaming block job, Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 34/41] mirror: Use real permissions in mirror/active commit block job, Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 37/41] migration/block: Use real permissions,
Kevin Wolf <=
- [Qemu-block] [RFC PATCH 39/41] tests: Remove FIXME comments, Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 40/41] block: Pass BdrvChild to bdrv_aligned_preadv/pwritev, Kevin Wolf, 2017/02/13
- [Qemu-block] [RFC PATCH 41/41] block: Assertions for write permissions, Kevin Wolf, 2017/02/13
- Re: [Qemu-block] [Qemu-devel] [RFC PATCH 00/41] New op blocker system, no-reply, 2017/02/13