From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40386) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X9xEZ-0003M2-RT for qemu-devel@nongnu.org; Wed, 23 Jul 2014 10:09:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X9xEQ-0003nD-T1 for qemu-devel@nongnu.org; Wed, 23 Jul 2014 10:09:31 -0400 Received: from averel.grnet-hq.admin.grnet.gr ([195.251.29.3]:6818) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X9xEQ-0003f5-Mi for qemu-devel@nongnu.org; Wed, 23 Jul 2014 10:09:22 -0400 From: Chrysostomos Nanakos Date: Wed, 23 Jul 2014 17:07:28 +0300 Message-Id: <1406124453-12226-1-git-send-email-cnanakos@grnet.gr> Subject: [Qemu-devel] [PATCH v7 0/5] Support Archipelago as a QEMU block backend List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, Chrysostomos Nanakos , stefanha@redhat.com v7: - Fix coding style issues. - Rename __archipelago_submit_request function to archipelago_submit_request. - Set X_NONBLOCK flag to xseg_receive(). - Return -EIO to .bdrv_getlength() if archipelago_volume_info() fails. - Fix segment_name mem leak. - Bump version number from 2.1 to 2.2 in qapi/block-core.json file concerning QEMU Archipelago support. - Convert qemu_aio_wait() to aio_poll(). - Remove qemu_blockalign() and memcpy() call and use qemu_iovec_to_buf() directly. v6: - Split v5 1/4 patch into two different patches. First one implements QMP structured options and the second one implements bdrv_parse_filename(). v5: - Remove useless qemu_aio_count variable from BDRVArchipelagoState struct. - Cleanup xseg signal descriptor, call xseg_quit_local_signal() when closing block device. - Fix ds and volname leaks. - Make xseg request handler thread joinable and wait until exits before destroying condition variables and mutexes. Thanks to Stefan Hajnoczi for pointing this out. - Remove error_propagate() useless call. - Use memcpy instead of strncpy. - Remove check after trying to allocate memory with g_malloc(). - Remove pipe code and complete AIO by introducing QEMU "bottom-half". - Add Archipelago shared memory segment name in options list and QMP. - Remove functions archipelago_aio_read()/_write() and introduce new and simpler function, __archipelago_submit_request(). Refactor archipelago_aio_segmented_rw() function. - Enable Archipelago support in qemu-iotests v4: - Move Archipelago QMP support from qapi-schema.json file to qapi/block-core.json. Fixe various typographic errors, thanks to Kevin Wolf and Eric Blake. - Use new .create_opts format, define new QemuOptsList structure and refactor qemu_archipelago_create function. v3: - Break down initial patch from one to three. First patch implements Archipelago QEMU block backend with read/write functionality. Second patch implements .bdrv_create() and adds support for creating Archipelago images. Third patch adds QMP support. - Remove global variable g_xseg_init, make xseg_initialize(), xseg_join() and xseg_leave() reentrant and thread-safe. - Introduce new enum BlockdevOptionsArchipelago for the QMP support. v2: - Implement .bdrv_parse_filename() function to convert the shortuct version with a single string to the individual options. - Remove global variables and move relevant fields to ArchipelagoAIOCB struct. - Remove ArchipelagoConf struct and use the relevant fields as individual arguments. - Remove ArchipelagoCB struct and use ArchipelagoAIOCB instead. - Remove ArchipelagoThread struct and move relevant fields to ArchipelagoAIOCB instead. Now an I/O thread is spawned for per-device to handle all async I/O requests. - Remove double data copy, use qemu_iovec_from_buf() and copy data directly to the destination buffer. - Remove archipelago_aio_bh_cb() function, a full request is completed in qemu_archipelago_complete_aio() instead. - Resolve proposed changes from Kevin Wolf and miscellaneous style issues. Chrysostomos Nanakos (5): block: Support Archipelago as a QEMU block backend block/archipelago: Implement bdrv_parse_filename() block/archipelago: Add support for creating images QMP: Add support for Archipelago qemu-iotests: add support for Archipelago protocol MAINTAINERS | 6 + block/Makefile.objs | 2 + block/archipelago.c | 1064 ++++++++++++++++++++++++++++++++++++++++++ configure | 40 ++ qapi/block-core.json | 38 +- tests/qemu-iotests/common | 6 + tests/qemu-iotests/common.rc | 9 +- 7 files changed, 1161 insertions(+), 4 deletions(-) create mode 100644 block/archipelago.c -- 1.7.10.4