[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 35/38] Revert "block: Fix unaligned zero write"
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 35/38] Revert "block: Fix unaligned zero write" |
Date: |
Fri, 22 May 2015 10:02:07 +0100 |
From: Fam Zheng <address@hidden>
This reverts commit fc3959e4669a1c2149b91ccb05101cfc7ae1fc05.
The core write code already handles the case, so remove this
duplication.
Because commit 61007b316 moved the touched code from block.c to
block/io.c, the change is manually reverted.
Signed-off-by: Fam Zheng <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
Reviewed-by: Kevin Wolf <address@hidden>
Message-id: address@hidden
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
block/io.c | 45 ++++++---------------------------------------
1 file changed, 6 insertions(+), 39 deletions(-)
diff --git a/block/io.c b/block/io.c
index b3ea95c..ad877b0 100644
--- a/block/io.c
+++ b/block/io.c
@@ -934,19 +934,6 @@ out:
return ret;
}
-static inline uint64_t bdrv_get_align(BlockDriverState *bs)
-{
- /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */
- return MAX(BDRV_SECTOR_SIZE, bs->request_alignment);
-}
-
-static inline bool bdrv_req_is_aligned(BlockDriverState *bs,
- int64_t offset, size_t bytes)
-{
- int64_t align = bdrv_get_align(bs);
- return !(offset & (align - 1) || (bytes & (align - 1)));
-}
-
/*
* Handle a read request in coroutine context
*/
@@ -957,7 +944,8 @@ static int coroutine_fn bdrv_co_do_preadv(BlockDriverState
*bs,
BlockDriver *drv = bs->drv;
BdrvTrackedRequest req;
- uint64_t align = bdrv_get_align(bs);
+ /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */
+ uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment);
uint8_t *head_buf = NULL;
uint8_t *tail_buf = NULL;
QEMUIOVector local_qiov;
@@ -1199,7 +1187,8 @@ static int coroutine_fn
bdrv_co_do_pwritev(BlockDriverState *bs,
BdrvRequestFlags flags)
{
BdrvTrackedRequest req;
- uint64_t align = bdrv_get_align(bs);
+ /* TODO Lift BDRV_SECTOR_SIZE restriction in BlockDriver interface */
+ uint64_t align = MAX(BDRV_SECTOR_SIZE, bs->request_alignment);
uint8_t *head_buf = NULL;
uint8_t *tail_buf = NULL;
QEMUIOVector local_qiov;
@@ -1298,10 +1287,6 @@ static int coroutine_fn
bdrv_co_do_pwritev(BlockDriverState *bs,
bytes = ROUND_UP(bytes, align);
}
- if (use_local_qiov) {
- /* Local buffer may have non-zero data. */
- flags &= ~BDRV_REQ_ZERO_WRITE;
- }
ret = bdrv_aligned_pwritev(bs, &req, offset, bytes,
use_local_qiov ? &local_qiov : qiov,
flags);
@@ -1342,32 +1327,14 @@ int coroutine_fn bdrv_co_write_zeroes(BlockDriverState
*bs,
int64_t sector_num, int nb_sectors,
BdrvRequestFlags flags)
{
- int ret;
-
trace_bdrv_co_write_zeroes(bs, sector_num, nb_sectors, flags);
if (!(bs->open_flags & BDRV_O_UNMAP)) {
flags &= ~BDRV_REQ_MAY_UNMAP;
}
- if (bdrv_req_is_aligned(bs, sector_num << BDRV_SECTOR_BITS,
- nb_sectors << BDRV_SECTOR_BITS)) {
- ret = bdrv_co_do_writev(bs, sector_num, nb_sectors, NULL,
- BDRV_REQ_ZERO_WRITE | flags);
- } else {
- uint8_t *buf;
- QEMUIOVector local_qiov;
- size_t bytes = nb_sectors << BDRV_SECTOR_BITS;
- buf = qemu_memalign(bdrv_opt_mem_align(bs), bytes);
- memset(buf, 0, bytes);
- qemu_iovec_init(&local_qiov, 1);
- qemu_iovec_add(&local_qiov, buf, bytes);
-
- ret = bdrv_co_do_writev(bs, sector_num, nb_sectors, &local_qiov,
- BDRV_REQ_ZERO_WRITE | flags);
- qemu_vfree(buf);
- }
- return ret;
+ return bdrv_co_do_writev(bs, sector_num, nb_sectors, NULL,
+ BDRV_REQ_ZERO_WRITE | flags);
}
int bdrv_flush_all(void)
--
2.1.0
- [Qemu-devel] [PULL 23/38] block/parallels: create bat_entry_off helper, (continued)
- [Qemu-devel] [PULL 23/38] block/parallels: create bat_entry_off helper, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 26/38] block/parallels: optimize linear image expansion, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 28/38] configure: handle clang -nopie argument warning, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 27/38] block/parallels: improve image writing performance further, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 29/38] configure: factor out supported flag check, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 25/38] block/parallels: add prealloc-mode and prealloc-size open paramemets, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 30/38] configure: silence glib unknown attribute __alloc_size__, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 31/38] configure: Add workaround for ccache and clang, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 33/38] block: minimal bounce buffer alignment, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 34/38] block: align bounce buffers to page, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 35/38] Revert "block: Fix unaligned zero write",
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 32/38] block: return EPERM on writes or discards to read-only devices, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 38/38] block: get_block_status: use "else" when testing the opposite condition, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 37/38] qemu-iotests: Test unaligned sub-block zero write, Stefan Hajnoczi, 2015/05/22
- [Qemu-devel] [PULL 36/38] block: Fix NULL deference for unaligned write if qiov is NULL, Stefan Hajnoczi, 2015/05/22
- Re: [Qemu-devel] [PULL 00/38] Block patches, Peter Maydell, 2015/05/22