[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 02/11] block: Introduce blk_set_allow_write_beyond_e
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PATCH 02/11] block: Introduce blk_set_allow_write_beyond_eof() |
Date: |
Tue, 8 Mar 2016 17:34:23 +0100 |
We check that the guest can't write beyond the end of its disk, but for
other internal users it can make sense to allow growing a file.
Signed-off-by: Kevin Wolf <address@hidden>
---
block/block-backend.c | 23 ++++++++++++++++-------
include/sysemu/block-backend.h | 1 +
2 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/block/block-backend.c b/block/block-backend.c
index ebdf78a..03e71b4 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -50,6 +50,8 @@ struct BlockBackend {
bool iostatus_enabled;
BlockDeviceIoStatus iostatus;
+ bool allow_write_beyond_eof;
+
NotifierList remove_bs_notifiers, insert_bs_notifiers;
};
@@ -579,6 +581,11 @@ void blk_iostatus_set_err(BlockBackend *blk, int error)
}
}
+void blk_set_allow_write_beyond_eof(BlockBackend *blk, bool allow)
+{
+ blk->allow_write_beyond_eof = allow;
+}
+
static int blk_check_byte_request(BlockBackend *blk, int64_t offset,
size_t size)
{
@@ -592,17 +599,19 @@ static int blk_check_byte_request(BlockBackend *blk,
int64_t offset,
return -ENOMEDIUM;
}
- len = blk_getlength(blk);
- if (len < 0) {
- return len;
- }
-
if (offset < 0) {
return -EIO;
}
- if (offset > len || len - offset < size) {
- return -EIO;
+ if (!blk->allow_write_beyond_eof) {
+ len = blk_getlength(blk);
+ if (len < 0) {
+ return len;
+ }
+
+ if (offset > len || len - offset < size) {
+ return -EIO;
+ }
}
return 0;
diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
index 66c5cf2..00d69ba 100644
--- a/include/sysemu/block-backend.h
+++ b/include/sysemu/block-backend.h
@@ -78,6 +78,7 @@ void blk_insert_bs(BlockBackend *blk, BlockDriverState *bs);
void blk_hide_on_behalf_of_hmp_drive_del(BlockBackend *blk);
+void blk_set_allow_write_beyond_eof(BlockBackend *blk, bool allow);
void blk_iostatus_enable(BlockBackend *blk);
bool blk_iostatus_is_enabled(const BlockBackend *blk);
BlockDeviceIoStatus blk_iostatus(const BlockBackend *blk);
--
1.8.3.1
- [Qemu-block] [PATCH 00/11] block: Use BB function in .bdrv_create() implementations, Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 01/11] block: Use writeback in .bdrv_create() implementations, Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 05/11] qcow2: Use BB functions in .bdrv_create(), Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 04/11] qcow: Use BB functions in .bdrv_create(), Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 02/11] block: Introduce blk_set_allow_write_beyond_eof(),
Kevin Wolf <=
- [Qemu-block] [PATCH 07/11] sheepdog: Use BB functions in .bdrv_create(), Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 03/11] parallels: Use BB functions in .bdrv_create(), Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 08/11] vdi: Use BB functions in .bdrv_create(), Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 09/11] vhdx: Use BB functions in .bdrv_create(), Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 06/11] qed: Use BB functions in .bdrv_create(), Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 10/11] vmdk: Use BB functions in .bdrv_create(), Kevin Wolf, 2016/03/08
- [Qemu-block] [PATCH 11/11] vpc: Use BB functions in .bdrv_create(), Kevin Wolf, 2016/03/08
- Re: [Qemu-block] [PATCH 00/11] block: Use BB function in .bdrv_create() implementations, Kevin Wolf, 2016/03/14