[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 05/14] block: Add bdrv_(p)write_sync
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 05/14] block: Add bdrv_(p)write_sync |
Date: |
Tue, 22 Jun 2010 16:09:24 +0200 |
Add new functions that write and flush the written data to disk immediately.
This is what needs to be used for image format metadata to maintain integrity
for cache=... modes that don't use O_DSYNC. (Actually, we only need barriers,
and therefore the functions are defined as such, but flushes is what is
implemented in this patch - we can try to change that later)
Signed-off-by: Kevin Wolf <address@hidden>
---
block.c | 37 +++++++++++++++++++++++++++++++++++++
block.h | 4 ++++
2 files changed, 41 insertions(+), 0 deletions(-)
diff --git a/block.c b/block.c
index 3fc2969..e71a771 100644
--- a/block.c
+++ b/block.c
@@ -1010,6 +1010,43 @@ int bdrv_pwrite(BlockDriverState *bs, int64_t offset,
return count1;
}
+/*
+ * Writes to the file and ensures that no writes are reordered across this
+ * request (acts as a barrier)
+ *
+ * Returns 0 on success, -errno in error cases.
+ */
+int bdrv_pwrite_sync(BlockDriverState *bs, int64_t offset,
+ const void *buf, int count)
+{
+ int ret;
+
+ ret = bdrv_pwrite(bs, offset, buf, count);
+ if (ret < 0) {
+ return ret;
+ }
+
+ /* No flush needed for cache=writethrough, it uses O_DSYNC */
+ if ((bs->open_flags & BDRV_O_CACHE_MASK) != 0) {
+ bdrv_flush(bs);
+ }
+
+ return 0;
+}
+
+/*
+ * Writes to the file and ensures that no writes are reordered across this
+ * request (acts as a barrier)
+ *
+ * Returns 0 on success, -errno in error cases.
+ */
+int bdrv_write_sync(BlockDriverState *bs, int64_t sector_num,
+ const uint8_t *buf, int nb_sectors)
+{
+ return bdrv_pwrite_sync(bs, BDRV_SECTOR_SIZE * sector_num,
+ buf, BDRV_SECTOR_SIZE * nb_sectors);
+}
+
/**
* Truncate file to 'offset' bytes (needed only for file protocols)
*/
diff --git a/block.h b/block.h
index 9df9b38..6a157f4 100644
--- a/block.h
+++ b/block.h
@@ -80,6 +80,10 @@ int bdrv_pread(BlockDriverState *bs, int64_t offset,
void *buf, int count);
int bdrv_pwrite(BlockDriverState *bs, int64_t offset,
const void *buf, int count);
+int bdrv_pwrite_sync(BlockDriverState *bs, int64_t offset,
+ const void *buf, int count);
+int bdrv_write_sync(BlockDriverState *bs, int64_t sector_num,
+ const uint8_t *buf, int nb_sectors);
int bdrv_truncate(BlockDriverState *bs, int64_t offset);
int64_t bdrv_getlength(BlockDriverState *bs);
void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr);
--
1.6.6.1
- [Qemu-devel] [PULL 00/14] Block patches, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 02/14] scsi-bus: Add MAINTENANCE_IN and MAINTENANCE_OUT SCSIRequest xfer and mode assignments, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 03/14] block: fix physical_block_size calculation, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 01/14] scsi-bus: Add PERSISTENT_RESERVE_OUT SCSIRequest->cmd.mode setup, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 05/14] block: Add bdrv_(p)write_sync,
Kevin Wolf <=
- [Qemu-devel] [PATCH 04/14] monitor: allow device to be ejected if no disk is inserted, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 07/14] qcow: Use bdrv_(p)write_sync for metadata writes, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 09/14] vmdk: Use bdrv_(p)write_sync for metadata writes, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 06/14] cow: Use bdrv_(p)write_sync for metadata writes, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 11/14] qemu-io: check registered fds in command_loop(), Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 12/14] virtio-blk: fix the list operation in virtio_blk_load()., Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 08/14] qcow2: Use bdrv_(p)write_sync for metadata writes, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 13/14] qcow2: Fix qemu-img check segfault on corrupted images, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 10/14] vpc: Use bdrv_(p)write_sync for metadata writes, Kevin Wolf, 2010/06/22
- [Qemu-devel] [PATCH 14/14] qcow2: Don't try to check tables that couldn't be loaded, Kevin Wolf, 2010/06/22