|
|
26ba25 |
From 9cecd3548e9275e7de21801b90c277c7b04cabb4 Mon Sep 17 00:00:00 2001
|
|
|
26ba25 |
From: Max Reitz <mreitz@redhat.com>
|
|
|
26ba25 |
Date: Mon, 18 Jun 2018 16:12:09 +0200
|
|
|
26ba25 |
Subject: [PATCH 042/268] block: Support BDRV_REQ_WRITE_UNCHANGED in filters
|
|
|
26ba25 |
|
|
|
26ba25 |
RH-Author: Max Reitz <mreitz@redhat.com>
|
|
|
26ba25 |
Message-id: <20180618161212.14444-8-mreitz@redhat.com>
|
|
|
26ba25 |
Patchwork-id: 80767
|
|
|
26ba25 |
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH 07/10] block: Support BDRV_REQ_WRITE_UNCHANGED in filters
|
|
|
26ba25 |
Bugzilla: 1518738
|
|
|
26ba25 |
RH-Acked-by: John Snow <jsnow@redhat.com>
|
|
|
26ba25 |
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
26ba25 |
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
26ba25 |
|
|
|
26ba25 |
Update the rest of the filter drivers to support
|
|
|
26ba25 |
BDRV_REQ_WRITE_UNCHANGED. They already forward write request flags to
|
|
|
26ba25 |
their children, so we just have to announce support for it.
|
|
|
26ba25 |
|
|
|
26ba25 |
This patch does not cover the replication driver because that currently
|
|
|
26ba25 |
does not support flags at all, and because it just grabs the WRITE
|
|
|
26ba25 |
permission for its children when it can, so we should be fine just
|
|
|
26ba25 |
submitting the incoming WRITE_UNCHANGED requests as normal writes.
|
|
|
26ba25 |
|
|
|
26ba25 |
It also does not cover format drivers for similar reasons. They all use
|
|
|
26ba25 |
bdrv_format_default_perms() as their .bdrv_child_perm() implementation
|
|
|
26ba25 |
so they just always grab the WRITE permission for their file children
|
|
|
26ba25 |
whenever possible. In addition, it often would be difficult to
|
|
|
26ba25 |
ascertain whether incoming unchanging writes end up as unchanging writes
|
|
|
26ba25 |
in their files. So we just leave them as normal potentially changing
|
|
|
26ba25 |
writes.
|
|
|
26ba25 |
|
|
|
26ba25 |
Signed-off-by: Max Reitz <mreitz@redhat.com>
|
|
|
26ba25 |
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
26ba25 |
Reviewed-by: Alberto Garcia <berto@igalia.com>
|
|
|
26ba25 |
Message-id: 20180421132929.21610-7-mreitz@redhat.com
|
|
|
26ba25 |
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
26ba25 |
Signed-off-by: Max Reitz <mreitz@redhat.com>
|
|
|
26ba25 |
(cherry picked from commit 228345bf5db8bc97d1c64f062e138d389065d1ab)
|
|
|
26ba25 |
Signed-off-by: Max Reitz <mreitz@redhat.com>
|
|
|
26ba25 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
26ba25 |
---
|
|
|
26ba25 |
block/blkdebug.c | 9 +++++----
|
|
|
26ba25 |
block/blkreplay.c | 3 +++
|
|
|
26ba25 |
block/blkverify.c | 3 +++
|
|
|
26ba25 |
block/copy-on-read.c | 10 ++++++----
|
|
|
26ba25 |
block/mirror.c | 2 ++
|
|
|
26ba25 |
block/raw-format.c | 9 +++++----
|
|
|
26ba25 |
block/throttle.c | 6 ++++--
|
|
|
26ba25 |
7 files changed, 28 insertions(+), 14 deletions(-)
|
|
|
26ba25 |
|
|
|
26ba25 |
diff --git a/block/blkdebug.c b/block/blkdebug.c
|
|
|
26ba25 |
index 053372c..526af2a 100644
|
|
|
26ba25 |
--- a/block/blkdebug.c
|
|
|
26ba25 |
+++ b/block/blkdebug.c
|
|
|
26ba25 |
@@ -398,10 +398,11 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags,
|
|
|
26ba25 |
goto out;
|
|
|
26ba25 |
}
|
|
|
26ba25 |
|
|
|
26ba25 |
- bs->supported_write_flags = BDRV_REQ_FUA &
|
|
|
26ba25 |
- bs->file->bs->supported_write_flags;
|
|
|
26ba25 |
- bs->supported_zero_flags = (BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP) &
|
|
|
26ba25 |
- bs->file->bs->supported_zero_flags;
|
|
|
26ba25 |
+ bs->supported_write_flags = BDRV_REQ_WRITE_UNCHANGED |
|
|
|
26ba25 |
+ (BDRV_REQ_FUA & bs->file->bs->supported_write_flags);
|
|
|
26ba25 |
+ bs->supported_zero_flags = BDRV_REQ_WRITE_UNCHANGED |
|
|
|
26ba25 |
+ ((BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP) &
|
|
|
26ba25 |
+ bs->file->bs->supported_zero_flags);
|
|
|
26ba25 |
ret = -EINVAL;
|
|
|
26ba25 |
|
|
|
26ba25 |
/* Set alignment overrides */
|
|
|
26ba25 |
diff --git a/block/blkreplay.c b/block/blkreplay.c
|
|
|
26ba25 |
index fe5a9b4..b016dbe 100755
|
|
|
26ba25 |
--- a/block/blkreplay.c
|
|
|
26ba25 |
+++ b/block/blkreplay.c
|
|
|
26ba25 |
@@ -35,6 +35,9 @@ static int blkreplay_open(BlockDriverState *bs, QDict *options, int flags,
|
|
|
26ba25 |
goto fail;
|
|
|
26ba25 |
}
|
|
|
26ba25 |
|
|
|
26ba25 |
+ bs->supported_write_flags = BDRV_REQ_WRITE_UNCHANGED;
|
|
|
26ba25 |
+ bs->supported_zero_flags = BDRV_REQ_WRITE_UNCHANGED;
|
|
|
26ba25 |
+
|
|
|
26ba25 |
ret = 0;
|
|
|
26ba25 |
fail:
|
|
|
26ba25 |
return ret;
|
|
|
26ba25 |
diff --git a/block/blkverify.c b/block/blkverify.c
|
|
|
26ba25 |
index 754cc9e..da97ee5 100644
|
|
|
26ba25 |
--- a/block/blkverify.c
|
|
|
26ba25 |
+++ b/block/blkverify.c
|
|
|
26ba25 |
@@ -141,6 +141,9 @@ static int blkverify_open(BlockDriverState *bs, QDict *options, int flags,
|
|
|
26ba25 |
goto fail;
|
|
|
26ba25 |
}
|
|
|
26ba25 |
|
|
|
26ba25 |
+ bs->supported_write_flags = BDRV_REQ_WRITE_UNCHANGED;
|
|
|
26ba25 |
+ bs->supported_zero_flags = BDRV_REQ_WRITE_UNCHANGED;
|
|
|
26ba25 |
+
|
|
|
26ba25 |
ret = 0;
|
|
|
26ba25 |
fail:
|
|
|
26ba25 |
qemu_opts_del(opts);
|
|
|
26ba25 |
diff --git a/block/copy-on-read.c b/block/copy-on-read.c
|
|
|
26ba25 |
index 823ec75..6a97208 100644
|
|
|
26ba25 |
--- a/block/copy-on-read.c
|
|
|
26ba25 |
+++ b/block/copy-on-read.c
|
|
|
26ba25 |
@@ -33,11 +33,13 @@ static int cor_open(BlockDriverState *bs, QDict *options, int flags,
|
|
|
26ba25 |
return -EINVAL;
|
|
|
26ba25 |
}
|
|
|
26ba25 |
|
|
|
26ba25 |
- bs->supported_write_flags = BDRV_REQ_FUA &
|
|
|
26ba25 |
- bs->file->bs->supported_write_flags;
|
|
|
26ba25 |
+ bs->supported_write_flags = BDRV_REQ_WRITE_UNCHANGED |
|
|
|
26ba25 |
+ (BDRV_REQ_FUA &
|
|
|
26ba25 |
+ bs->file->bs->supported_write_flags);
|
|
|
26ba25 |
|
|
|
26ba25 |
- bs->supported_zero_flags = (BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP) &
|
|
|
26ba25 |
- bs->file->bs->supported_zero_flags;
|
|
|
26ba25 |
+ bs->supported_zero_flags = BDRV_REQ_WRITE_UNCHANGED |
|
|
|
26ba25 |
+ ((BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP) &
|
|
|
26ba25 |
+ bs->file->bs->supported_zero_flags);
|
|
|
26ba25 |
|
|
|
26ba25 |
return 0;
|
|
|
26ba25 |
}
|
|
|
26ba25 |
diff --git a/block/mirror.c b/block/mirror.c
|
|
|
26ba25 |
index 99da9c0..003f957 100644
|
|
|
26ba25 |
--- a/block/mirror.c
|
|
|
26ba25 |
+++ b/block/mirror.c
|
|
|
26ba25 |
@@ -1152,6 +1152,8 @@ static void mirror_start_job(const char *job_id, BlockDriverState *bs,
|
|
|
26ba25 |
mirror_top_bs->implicit = true;
|
|
|
26ba25 |
}
|
|
|
26ba25 |
mirror_top_bs->total_sectors = bs->total_sectors;
|
|
|
26ba25 |
+ mirror_top_bs->supported_write_flags = BDRV_REQ_WRITE_UNCHANGED;
|
|
|
26ba25 |
+ mirror_top_bs->supported_zero_flags = BDRV_REQ_WRITE_UNCHANGED;
|
|
|
26ba25 |
bdrv_set_aio_context(mirror_top_bs, bdrv_get_aio_context(bs));
|
|
|
26ba25 |
|
|
|
26ba25 |
/* bdrv_append takes ownership of the mirror_top_bs reference, need to keep
|
|
|
26ba25 |
diff --git a/block/raw-format.c b/block/raw-format.c
|
|
|
26ba25 |
index a378547..fe33693 100644
|
|
|
26ba25 |
--- a/block/raw-format.c
|
|
|
26ba25 |
+++ b/block/raw-format.c
|
|
|
26ba25 |
@@ -415,10 +415,11 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags,
|
|
|
26ba25 |
}
|
|
|
26ba25 |
|
|
|
26ba25 |
bs->sg = bs->file->bs->sg;
|
|
|
26ba25 |
- bs->supported_write_flags = BDRV_REQ_FUA &
|
|
|
26ba25 |
- bs->file->bs->supported_write_flags;
|
|
|
26ba25 |
- bs->supported_zero_flags = (BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP) &
|
|
|
26ba25 |
- bs->file->bs->supported_zero_flags;
|
|
|
26ba25 |
+ bs->supported_write_flags = BDRV_REQ_WRITE_UNCHANGED |
|
|
|
26ba25 |
+ (BDRV_REQ_FUA & bs->file->bs->supported_write_flags);
|
|
|
26ba25 |
+ bs->supported_zero_flags = BDRV_REQ_WRITE_UNCHANGED |
|
|
|
26ba25 |
+ ((BDRV_REQ_FUA | BDRV_REQ_MAY_UNMAP) &
|
|
|
26ba25 |
+ bs->file->bs->supported_zero_flags);
|
|
|
26ba25 |
|
|
|
26ba25 |
if (bs->probed && !bdrv_is_read_only(bs)) {
|
|
|
26ba25 |
fprintf(stderr,
|
|
|
26ba25 |
diff --git a/block/throttle.c b/block/throttle.c
|
|
|
26ba25 |
index 95ed06a..e298827 100644
|
|
|
26ba25 |
--- a/block/throttle.c
|
|
|
26ba25 |
+++ b/block/throttle.c
|
|
|
26ba25 |
@@ -81,8 +81,10 @@ static int throttle_open(BlockDriverState *bs, QDict *options,
|
|
|
26ba25 |
if (!bs->file) {
|
|
|
26ba25 |
return -EINVAL;
|
|
|
26ba25 |
}
|
|
|
26ba25 |
- bs->supported_write_flags = bs->file->bs->supported_write_flags;
|
|
|
26ba25 |
- bs->supported_zero_flags = bs->file->bs->supported_zero_flags;
|
|
|
26ba25 |
+ bs->supported_write_flags = bs->file->bs->supported_write_flags |
|
|
|
26ba25 |
+ BDRV_REQ_WRITE_UNCHANGED;
|
|
|
26ba25 |
+ bs->supported_zero_flags = bs->file->bs->supported_zero_flags |
|
|
|
26ba25 |
+ BDRV_REQ_WRITE_UNCHANGED;
|
|
|
26ba25 |
|
|
|
26ba25 |
return throttle_configure_tgm(bs, tgm, options, errp);
|
|
|
26ba25 |
}
|
|
|
26ba25 |
--
|
|
|
26ba25 |
1.8.3.1
|
|
|
26ba25 |
|