From: "Denis V. Lunev" <den@openvz.org>
To: Eric Blake <eblake@redhat.com>, qemu-devel@nongnu.org
Cc: qemu-block@nongnu.org, alex@alex.org.uk,
Kevin Wolf <kwolf@redhat.com>, Max Reitz <mreitz@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Hitoshi Mitake <mitake.hitoshi@lab.ntt.co.jp>,
Liu Yuan <namei.unix@gmail.com>, Jeff Cody <jcody@redhat.com>,
Stefan Weil <sw@weilnetz.de>, Fam Zheng <famz@redhat.com>,
David Gibson <david@gibson.dropbear.id.au>,
Alexander Graf <agraf@suse.de>,
Paolo Bonzini <pbonzini@redhat.com>,
"open list:Sheepdog" <sheepdog@lists.wpkg.org>,
"open list:sPAPR" <qemu-ppc@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH v3 09/44] block: Allow BDRV_REQ_FUA through blk_pwrite()
Date: Sat, 23 Apr 2016 11:12:39 +0300 [thread overview]
Message-ID: <571B2E77.5080509@openvz.org> (raw)
In-Reply-To: <1461368452-10389-10-git-send-email-eblake@redhat.com>
On 04/23/2016 02:40 AM, Eric Blake wrote:
> We have several block drivers that understand BDRV_REQ_FUA,
> and emulate it in the block layer for the rest by a full flush.
> But without a way to actually request BDRV_REQ_FUA during a
> pass-through blk_pwrite(), FUA-aware block drivers like NBD are
> forced to repeat the emulation logic of a full flush regardless
> of whether the backend they are writing to could do it more
> efficiently.
>
> This patch just wires up a flags argument; a followup patch
> will actually make use of it in the NBD driver and in qemu-io.
>
> Signed-off-by: Eric Blake <eblake@redhat.com>
> ---
> include/sysemu/block-backend.h | 3 ++-
> block/block-backend.c | 6 ++++--
> block/crypto.c | 2 +-
> block/parallels.c | 2 +-
> block/qcow.c | 8 ++++----
> block/qcow2.c | 4 ++--
> block/qed.c | 6 +++---
> block/sheepdog.c | 2 +-
> block/vdi.c | 4 ++--
> block/vhdx.c | 5 +++--
> block/vmdk.c | 10 +++++-----
> block/vpc.c | 10 +++++-----
> hw/nvram/spapr_nvram.c | 4 ++--
> nbd/server.c | 2 +-
> qemu-io-cmds.c | 2 +-
> 15 files changed, 37 insertions(+), 33 deletions(-)
>
> diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h
> index c62b6fe..6991b26 100644
> --- a/include/sysemu/block-backend.h
> +++ b/include/sysemu/block-backend.h
> @@ -102,7 +102,8 @@ BlockAIOCB *blk_aio_write_zeroes(BlockBackend *blk, int64_t sector_num,
> int nb_sectors, BdrvRequestFlags flags,
> BlockCompletionFunc *cb, void *opaque);
> int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int count);
> -int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int count);
> +int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int count,
> + BdrvRequestFlags flags);
> int64_t blk_getlength(BlockBackend *blk);
> void blk_get_geometry(BlockBackend *blk, uint64_t *nb_sectors_ptr);
> int64_t blk_nb_sectors(BlockBackend *blk);
> diff --git a/block/block-backend.c b/block/block-backend.c
> index 16c9d5e..4551865 100644
> --- a/block/block-backend.c
> +++ b/block/block-backend.c
> @@ -955,9 +955,11 @@ int blk_pread(BlockBackend *blk, int64_t offset, void *buf, int count)
> return count;
> }
>
> -int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int count)
> +int blk_pwrite(BlockBackend *blk, int64_t offset, const void *buf, int count,
> + BdrvRequestFlags flags)
> {
> - int ret = blk_prw(blk, offset, (void*) buf, count, blk_write_entry, 0);
> + int ret = blk_prw(blk, offset, (void *) buf, count, blk_write_entry,
> + flags);
> if (ret < 0) {
> return ret;
> }
> diff --git a/block/crypto.c b/block/crypto.c
> index 1903e84..32ba17c 100644
> --- a/block/crypto.c
> +++ b/block/crypto.c
> @@ -91,7 +91,7 @@ static ssize_t block_crypto_write_func(QCryptoBlock *block,
> struct BlockCryptoCreateData *data = opaque;
> ssize_t ret;
>
> - ret = blk_pwrite(data->blk, offset, buf, buflen);
> + ret = blk_pwrite(data->blk, offset, buf, buflen, 0);
> if (ret < 0) {
> error_setg_errno(errp, -ret, "Could not write encryption header");
> return ret;
> diff --git a/block/parallels.c b/block/parallels.c
> index 324ed43..2d8bc87 100644
> --- a/block/parallels.c
> +++ b/block/parallels.c
> @@ -512,7 +512,7 @@ static int parallels_create(const char *filename, QemuOpts *opts, Error **errp)
> memset(tmp, 0, sizeof(tmp));
> memcpy(tmp, &header, sizeof(header));
>
> - ret = blk_pwrite(file, 0, tmp, BDRV_SECTOR_SIZE);
> + ret = blk_pwrite(file, 0, tmp, BDRV_SECTOR_SIZE, 0);
> if (ret < 0) {
> goto exit;
> }
> diff --git a/block/qcow.c b/block/qcow.c
> index 60ddb12..d6dc1b0 100644
> --- a/block/qcow.c
> +++ b/block/qcow.c
> @@ -853,14 +853,14 @@ static int qcow_create(const char *filename, QemuOpts *opts, Error **errp)
> }
>
> /* write all the data */
> - ret = blk_pwrite(qcow_blk, 0, &header, sizeof(header));
> + ret = blk_pwrite(qcow_blk, 0, &header, sizeof(header), 0);
> if (ret != sizeof(header)) {
> goto exit;
> }
>
> if (backing_file) {
> ret = blk_pwrite(qcow_blk, sizeof(header),
> - backing_file, backing_filename_len);
> + backing_file, backing_filename_len, 0);
> if (ret != backing_filename_len) {
> goto exit;
> }
> @@ -869,8 +869,8 @@ static int qcow_create(const char *filename, QemuOpts *opts, Error **errp)
> tmp = g_malloc0(BDRV_SECTOR_SIZE);
> for (i = 0; i < ((sizeof(uint64_t)*l1_size + BDRV_SECTOR_SIZE - 1)/
> BDRV_SECTOR_SIZE); i++) {
> - ret = blk_pwrite(qcow_blk, header_size +
> - BDRV_SECTOR_SIZE*i, tmp, BDRV_SECTOR_SIZE);
> + ret = blk_pwrite(qcow_blk, header_size + BDRV_SECTOR_SIZE * i,
> + tmp, BDRV_SECTOR_SIZE, 0);
> if (ret != BDRV_SECTOR_SIZE) {
> g_free(tmp);
> goto exit;
> diff --git a/block/qcow2.c b/block/qcow2.c
> index 470734b..3090538 100644
> --- a/block/qcow2.c
> +++ b/block/qcow2.c
> @@ -2207,7 +2207,7 @@ static int qcow2_create2(const char *filename, int64_t total_size,
> cpu_to_be64(QCOW2_COMPAT_LAZY_REFCOUNTS);
> }
>
> - ret = blk_pwrite(blk, 0, header, cluster_size);
> + ret = blk_pwrite(blk, 0, header, cluster_size, 0);
> g_free(header);
> if (ret < 0) {
> error_setg_errno(errp, -ret, "Could not write qcow2 header");
> @@ -2217,7 +2217,7 @@ static int qcow2_create2(const char *filename, int64_t total_size,
> /* Write a refcount table with one refcount block */
> refcount_table = g_malloc0(2 * cluster_size);
> refcount_table[0] = cpu_to_be64(2 * cluster_size);
> - ret = blk_pwrite(blk, cluster_size, refcount_table, 2 * cluster_size);
> + ret = blk_pwrite(blk, cluster_size, refcount_table, 2 * cluster_size, 0);
> g_free(refcount_table);
>
> if (ret < 0) {
> diff --git a/block/qed.c b/block/qed.c
> index 0af5274..6cfd4c1 100644
> --- a/block/qed.c
> +++ b/block/qed.c
> @@ -601,18 +601,18 @@ static int qed_create(const char *filename, uint32_t cluster_size,
> }
>
> qed_header_cpu_to_le(&header, &le_header);
> - ret = blk_pwrite(blk, 0, &le_header, sizeof(le_header));
> + ret = blk_pwrite(blk, 0, &le_header, sizeof(le_header), 0);
> if (ret < 0) {
> goto out;
> }
> ret = blk_pwrite(blk, sizeof(le_header), backing_file,
> - header.backing_filename_size);
> + header.backing_filename_size, 0);
> if (ret < 0) {
> goto out;
> }
>
> l1_table = g_malloc0(l1_size);
> - ret = blk_pwrite(blk, header.l1_table_offset, l1_table, l1_size);
> + ret = blk_pwrite(blk, header.l1_table_offset, l1_table, l1_size, 0);
> if (ret < 0) {
> goto out;
> }
> diff --git a/block/sheepdog.c b/block/sheepdog.c
> index 33e0a33..625f876 100644
> --- a/block/sheepdog.c
> +++ b/block/sheepdog.c
> @@ -1678,7 +1678,7 @@ static int sd_prealloc(const char *filename, Error **errp)
> if (ret < 0) {
> goto out;
> }
> - ret = blk_pwrite(blk, idx * buf_size, buf, buf_size);
> + ret = blk_pwrite(blk, idx * buf_size, buf, buf_size, 0);
> if (ret < 0) {
> goto out;
> }
> diff --git a/block/vdi.c b/block/vdi.c
> index 75d4819..12ab3a6 100644
> --- a/block/vdi.c
> +++ b/block/vdi.c
> @@ -808,7 +808,7 @@ static int vdi_create(const char *filename, QemuOpts *opts, Error **errp)
> vdi_header_print(&header);
> #endif
> vdi_header_to_le(&header);
> - ret = blk_pwrite(blk, offset, &header, sizeof(header));
> + ret = blk_pwrite(blk, offset, &header, sizeof(header), 0);
> if (ret < 0) {
> error_setg(errp, "Error writing header to %s", filename);
> goto exit;
> @@ -829,7 +829,7 @@ static int vdi_create(const char *filename, QemuOpts *opts, Error **errp)
> bmap[i] = VDI_UNALLOCATED;
> }
> }
> - ret = blk_pwrite(blk, offset, bmap, bmap_size);
> + ret = blk_pwrite(blk, offset, bmap, bmap_size, 0);
> if (ret < 0) {
> error_setg(errp, "Error writing bmap to %s", filename);
> goto exit;
> diff --git a/block/vhdx.c b/block/vhdx.c
> index 2b7b332..ec778fe 100644
> --- a/block/vhdx.c
> +++ b/block/vhdx.c
> @@ -1856,13 +1856,14 @@ static int vhdx_create(const char *filename, QemuOpts *opts, Error **errp)
> creator = g_utf8_to_utf16("QEMU v" QEMU_VERSION, -1, NULL,
> &creator_items, NULL);
> signature = cpu_to_le64(VHDX_FILE_SIGNATURE);
> - ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET, &signature, sizeof(signature));
> + ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET, &signature, sizeof(signature),
> + 0);
> if (ret < 0) {
> goto delete_and_exit;
> }
> if (creator) {
> ret = blk_pwrite(blk, VHDX_FILE_ID_OFFSET + sizeof(signature),
> - creator, creator_items * sizeof(gunichar2));
> + creator, creator_items * sizeof(gunichar2), 0);
> if (ret < 0) {
> goto delete_and_exit;
> }
> diff --git a/block/vmdk.c b/block/vmdk.c
> index 45f9d3c..0cc2011 100644
> --- a/block/vmdk.c
> +++ b/block/vmdk.c
> @@ -1728,12 +1728,12 @@ static int vmdk_create_extent(const char *filename, int64_t filesize,
> header.check_bytes[3] = 0xa;
>
> /* write all the data */
> - ret = blk_pwrite(blk, 0, &magic, sizeof(magic));
> + ret = blk_pwrite(blk, 0, &magic, sizeof(magic), 0);
> if (ret < 0) {
> error_setg(errp, QERR_IO_ERROR);
> goto exit;
> }
> - ret = blk_pwrite(blk, sizeof(magic), &header, sizeof(header));
> + ret = blk_pwrite(blk, sizeof(magic), &header, sizeof(header), 0);
> if (ret < 0) {
> error_setg(errp, QERR_IO_ERROR);
> goto exit;
> @@ -1753,7 +1753,7 @@ static int vmdk_create_extent(const char *filename, int64_t filesize,
> gd_buf[i] = cpu_to_le32(tmp);
> }
> ret = blk_pwrite(blk, le64_to_cpu(header.rgd_offset) * BDRV_SECTOR_SIZE,
> - gd_buf, gd_buf_size);
> + gd_buf, gd_buf_size, 0);
> if (ret < 0) {
> error_setg(errp, QERR_IO_ERROR);
> goto exit;
> @@ -1765,7 +1765,7 @@ static int vmdk_create_extent(const char *filename, int64_t filesize,
> gd_buf[i] = cpu_to_le32(tmp);
> }
> ret = blk_pwrite(blk, le64_to_cpu(header.gd_offset) * BDRV_SECTOR_SIZE,
> - gd_buf, gd_buf_size);
> + gd_buf, gd_buf_size, 0);
> if (ret < 0) {
> error_setg(errp, QERR_IO_ERROR);
> goto exit;
> @@ -2028,7 +2028,7 @@ static int vmdk_create(const char *filename, QemuOpts *opts, Error **errp)
>
> blk_set_allow_write_beyond_eof(new_blk, true);
>
> - ret = blk_pwrite(new_blk, desc_offset, desc, desc_len);
> + ret = blk_pwrite(new_blk, desc_offset, desc, desc_len, 0);
> if (ret < 0) {
> error_setg_errno(errp, -ret, "Could not write description");
> goto exit;
> diff --git a/block/vpc.c b/block/vpc.c
> index 3e2ea69..a55a3e4 100644
> --- a/block/vpc.c
> +++ b/block/vpc.c
> @@ -783,13 +783,13 @@ static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf,
> block_size = 0x200000;
> num_bat_entries = (total_sectors + block_size / 512) / (block_size / 512);
>
> - ret = blk_pwrite(blk, offset, buf, HEADER_SIZE);
> + ret = blk_pwrite(blk, offset, buf, HEADER_SIZE, 0);
> if (ret < 0) {
> goto fail;
> }
>
> offset = 1536 + ((num_bat_entries * 4 + 511) & ~511);
> - ret = blk_pwrite(blk, offset, buf, HEADER_SIZE);
> + ret = blk_pwrite(blk, offset, buf, HEADER_SIZE, 0);
> if (ret < 0) {
> goto fail;
> }
> @@ -799,7 +799,7 @@ static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf,
>
> memset(buf, 0xFF, 512);
> for (i = 0; i < (num_bat_entries * 4 + 511) / 512; i++) {
> - ret = blk_pwrite(blk, offset, buf, 512);
> + ret = blk_pwrite(blk, offset, buf, 512, 0);
> if (ret < 0) {
> goto fail;
> }
> @@ -826,7 +826,7 @@ static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf,
> /* Write the header */
> offset = 512;
>
> - ret = blk_pwrite(blk, offset, buf, 1024);
> + ret = blk_pwrite(blk, offset, buf, 1024, 0);
> if (ret < 0) {
> goto fail;
> }
> @@ -848,7 +848,7 @@ static int create_fixed_disk(BlockBackend *blk, uint8_t *buf,
> return ret;
> }
>
> - ret = blk_pwrite(blk, total_size - HEADER_SIZE, buf, HEADER_SIZE);
> + ret = blk_pwrite(blk, total_size - HEADER_SIZE, buf, HEADER_SIZE, 0);
> if (ret < 0) {
> return ret;
> }
> diff --git a/hw/nvram/spapr_nvram.c b/hw/nvram/spapr_nvram.c
> index 802636e..019f25d 100644
> --- a/hw/nvram/spapr_nvram.c
> +++ b/hw/nvram/spapr_nvram.c
> @@ -124,7 +124,7 @@ static void rtas_nvram_store(PowerPCCPU *cpu, sPAPRMachineState *spapr,
>
> alen = len;
> if (nvram->blk) {
> - alen = blk_pwrite(nvram->blk, offset, membuf, len);
> + alen = blk_pwrite(nvram->blk, offset, membuf, len, 0);
> }
>
> assert(nvram->buf);
> @@ -190,7 +190,7 @@ static int spapr_nvram_post_load(void *opaque, int version_id)
> sPAPRNVRAM *nvram = VIO_SPAPR_NVRAM(opaque);
>
> if (nvram->blk) {
> - int alen = blk_pwrite(nvram->blk, 0, nvram->buf, nvram->size);
> + int alen = blk_pwrite(nvram->blk, 0, nvram->buf, nvram->size, 0);
>
> if (alen < 0) {
> return alen;
> diff --git a/nbd/server.c b/nbd/server.c
> index aa252a4..9be0a99 100644
> --- a/nbd/server.c
> +++ b/nbd/server.c
> @@ -1154,7 +1154,7 @@ static void nbd_trip(void *opaque)
> TRACE("Writing to device");
>
> ret = blk_pwrite(exp->blk, request.from + exp->dev_offset,
> - req->data, request.len);
> + req->data, request.len, 0);
> if (ret < 0) {
> LOG("writing to file failed");
> reply.error = -ret;
> diff --git a/qemu-io-cmds.c b/qemu-io-cmds.c
> index e34f777..e26e543 100644
> --- a/qemu-io-cmds.c
> +++ b/qemu-io-cmds.c
> @@ -474,7 +474,7 @@ static int do_pwrite(BlockBackend *blk, char *buf, int64_t offset,
> return -ERANGE;
> }
>
> - *total = blk_pwrite(blk, offset, (uint8_t *)buf, count);
> + *total = blk_pwrite(blk, offset, (uint8_t *)buf, count, 0);
> if (*total < 0) {
> return *total;
> }
Acked-by: Denis V. Lunev <den@openvz.org>
next prev parent reply other threads:[~2016-04-23 8:12 UTC|newest]
Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-22 23:40 [Qemu-devel] [PATCH v3 00/44] NBD protocol additions Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 01/44] nbd: More debug typo fixes, use correct formats Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 02/44] nbd: Quit server after any write error Eric Blake
2016-04-25 9:21 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 03/44] nbd: Improve server handling of bogus commands Eric Blake
2016-04-25 9:29 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 04/44] nbd: Reject unknown request flags Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 05/44] nbd: Group all Linux-specific ioctl code in one place Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 06/44] nbd: Clean up ioctl handling of qemu-nbd -c Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 07/44] nbd: Limit nbdflags to 16 bits Eric Blake
2016-04-25 9:24 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 08/44] nbd: Add qemu-nbd -D for human-readable description Eric Blake
2016-04-25 9:25 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 09/44] block: Allow BDRV_REQ_FUA through blk_pwrite() Eric Blake
2016-04-23 8:12 ` Denis V. Lunev [this message]
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 10/44] fdc: Switch to byte-based block access Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 11/44] nand: " Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 12/44] onenand: " Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 13/44] pflash: " Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 14/44] sd: " Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 15/44] m25p80: " Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 16/44] atapi: " Eric Blake
2016-04-25 21:36 ` John Snow
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 17/44] nbd: " Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 18/44] qemu-img: " Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 19/44] qemu-io: " Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 20/44] block: Switch blk_read_unthrottled() to byte interface Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 21/44] block: Switch blk_write_zeroes() " Eric Blake
2016-04-23 8:12 ` Denis V. Lunev
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 22/44] block: Kill blk_write(), blk_read() Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 23/44] qemu-io: Add missing option documentation Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 24/44] qemu-io: Add 'write -f' to test FUA flag Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 25/44] qemu-io: Add 'open -u' to set BDRV_O_UNMAP after the fact Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 26/44] qemu-io: Add 'write -z -u' to test MAY_UNMAP flag Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 27/44] nbd: Use BDRV_REQ_FUA for better FUA where supported Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 28/44] nbd: Detect servers that send unexpected error values Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 29/44] nbd: Avoid magic number for NBD max name size Eric Blake
2016-04-25 9:32 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 30/44] nbd: Treat flags vs. command type as separate fields Eric Blake
2016-04-25 9:34 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 31/44] nbd: Share common reply-sending code in server Eric Blake
2016-04-25 9:34 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 32/44] nbd: Share common option-sending code in client Eric Blake
2016-04-25 9:37 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 33/44] nbd: Let client skip portions of server reply Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 34/44] nbd: Less allocation during NBD_OPT_LIST Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 35/44] nbd: Support shorter handshake Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 36/44] nbd: Improve handling of shutdown requests Eric Blake
2016-04-25 9:47 ` Alex Bligh
2016-04-25 19:20 ` Eric Blake
2016-04-25 19:40 ` Alex Bligh
2016-04-25 19:48 ` Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 37/44] nbd: Create struct for tracking export info Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 38/44] block: Add blk_get_opt_transfer_length() Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 39/44] nbd: Implement NBD_OPT_GO on server Eric Blake
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 40/44] nbd: Implement NBD_OPT_GO on client Eric Blake
2016-04-25 10:31 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 41/44] nbd: Implement NBD_CMD_WRITE_ZEROES on server Eric Blake
2016-04-23 9:00 ` Pavel Borzenkov
2016-04-25 12:11 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 42/44] nbd: Implement NBD_CMD_WRITE_ZEROES on client Eric Blake
2016-04-25 12:12 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 43/44] nbd: Implement NBD_OPT_BLOCK_SIZE on server Eric Blake
2016-04-25 12:16 ` Alex Bligh
2016-04-22 23:40 ` [Qemu-devel] [PATCH v3 44/44] nbd: Implement NBD_OPT_BLOCK_SIZE on client Eric Blake
2016-04-25 12:19 ` Alex Bligh
2016-04-25 19:16 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=571B2E77.5080509@openvz.org \
--to=den@openvz.org \
--cc=agraf@suse.de \
--cc=alex@alex.org.uk \
--cc=david@gibson.dropbear.id.au \
--cc=eblake@redhat.com \
--cc=famz@redhat.com \
--cc=jcody@redhat.com \
--cc=kwolf@redhat.com \
--cc=mitake.hitoshi@lab.ntt.co.jp \
--cc=mreitz@redhat.com \
--cc=namei.unix@gmail.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
--cc=sheepdog@lists.wpkg.org \
--cc=stefanha@redhat.com \
--cc=sw@weilnetz.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.