[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [PATCH v2 1/6] qemu-io: Drop write permissions before r
From: |
Fam Zheng |
Subject: |
Re: [Qemu-block] [PATCH v2 1/6] qemu-io: Drop write permissions before read-only reopen |
Date: |
Fri, 22 Sep 2017 21:22:54 +0800 |
User-agent: |
Mutt/1.8.3 (2017-05-23) |
On Fri, 09/22 14:55, Kevin Wolf wrote:
> qemu-io provides a 'reopen' command that allows switching from writable
> to read-only access. We need to make sure that we don't try to keep
> write permissions to a BlockBackend that becomes read-only, otherwise
> things are going to fail.
>
> This requires a bdrv_drain() call because otherwise in-flight AIO
> write requests could issue new internal requests while the permission
> has already gone away, which would cause assertion failures. Draining
> the queue doesn't break AIO requests in any new way, bdrv_reopen() would
> drain it anyway only a few lines later.
>
> Signed-off-by: Kevin Wolf <address@hidden>
> ---
> qemu-io-cmds.c | 12 ++++++++++++
> tests/qemu-iotests/187.out | 2 +-
> 2 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
> index 2811a89099..3727fb43f3 100644
> --- a/qemu-io-cmds.c
> +++ b/qemu-io-cmds.c
> @@ -2010,6 +2010,18 @@ static int reopen_f(BlockBackend *blk, int argc, char
> **argv)
> return 0;
> }
>
> + if (!(flags & BDRV_O_RDWR)) {
> + uint64_t orig_perm, orig_shared_perm;
> +
> + bdrv_drain(bs);
> +
> + blk_get_perm(blk, &orig_perm, &orig_shared_perm);
> + blk_set_perm(blk,
> + orig_perm & ~(BLK_PERM_WRITE |
> BLK_PERM_WRITE_UNCHANGED),
> + orig_shared_perm,
> + &error_abort);
> + }
> +
> qopts = qemu_opts_find(&reopen_opts, NULL);
> opts = qopts ? qemu_opts_to_qdict(qopts, NULL) : NULL;
> qemu_opts_reset(&reopen_opts);
> diff --git a/tests/qemu-iotests/187.out b/tests/qemu-iotests/187.out
> index 68fb944cd5..30b987f71f 100644
> --- a/tests/qemu-iotests/187.out
> +++ b/tests/qemu-iotests/187.out
> @@ -12,7 +12,7 @@ Start from read-write
>
> wrote 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> -write failed: Operation not permitted
> +Block node is read-only
> wrote 65536/65536 bytes at offset 0
> 64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
> *** done
> --
> 2.13.5
>
Reviewed-by: Fam Zheng <address@hidden>
- [Qemu-block] [PATCH 0/6] block: Fix permissions after ro/rw reopen, Kevin Wolf, 2017/09/15
- [Qemu-block] [PATCH 1/6] qemu-io: Reset qemuio_blk permissions before each command, Kevin Wolf, 2017/09/15
- [Qemu-block] [PATCH 3/6] block: Add reopen queue to bdrv_check_perm(), Kevin Wolf, 2017/09/15
- [Qemu-block] [PATCH 4/6] block: Base permissions on rw state after reopen, Kevin Wolf, 2017/09/15
- [Qemu-block] [PATCH 2/6] block: Add reopen_queue to bdrv_child_perm(), Kevin Wolf, 2017/09/15
- [Qemu-block] [PATCH 5/6] block: reopen: Queue children after their parents, Kevin Wolf, 2017/09/15
- [Qemu-block] [PATCH 6/6] block: Fix permissions after bdrv_reopen(), Kevin Wolf, 2017/09/15