From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:45859) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SrPz0-0003fI-DR for qemu-devel@nongnu.org; Wed, 18 Jul 2012 04:51:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SrPyw-000421-64 for qemu-devel@nongnu.org; Wed, 18 Jul 2012 04:51:46 -0400 Received: from e23smtp04.au.ibm.com ([202.81.31.146]:57380) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SrPyv-00041Q-L7 for qemu-devel@nongnu.org; Wed, 18 Jul 2012 04:51:42 -0400 Received: from /spool/local by e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Wed, 18 Jul 2012 08:29:28 +1000 Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q6I8hHCD3015046 for ; Wed, 18 Jul 2012 18:43:18 +1000 Received: from d23av03.au.ibm.com (loopback [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q6I8pPg2018346 for ; Wed, 18 Jul 2012 18:51:26 +1000 Message-ID: <500678F7.1030705@linux.vnet.ibm.com> Date: Wed, 18 Jul 2012 16:51:03 +0800 From: Wenchao Xia MIME-Version: 1.0 References: <4FFA9C30.2070201@linux.vnet.ibm.com> <4FFAA0C3.3080703@redhat.com> <4FFBB7FB.3070303@linux.vnet.ibm.com> <4FFBD6F1.90403@redhat.com> <20120713091611.GC15503@stefanha-thinkpad.localdomain> <4FFFEF8E.5080705@redhat.com> <50000793.2020401@redhat.com> <5003CDC6.2040103@linux.vnet.ibm.com> <5003CE8B.20804@redhat.com> In-Reply-To: <5003CE8B.20804@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC] introduce a dynamic library to expose qemu block API List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: Anthony Liguori , Stefan Hajnoczi , Michael Tokarev , =?UTF-8?B?TGx1w60=?= =?UTF-8?B?cw==?= , qemu-devel@nongnu.org, Blue Swirl , Stefan Weil , Hannes Reinecke Hi, following is API draft, prototypes were taken from qemu/block.h, and the API prefix is changed frpm bdrv to qbdrvs, to declare related object is BlockDriverState, not BlockDriver. One issue here is it may require include block_int.h, which is not LGPL2 licensed yet. API format is kept mostly the same with qemu generic block layer, to make it easier for implement, and easier to make qemu migrate on it if possible. /* structure init and uninit */ BlockDriverState *qbdrvs_new(const char *device_name); void qbdrvs_delete(BlockDriverState *bs); /* file open and close */ int qbdrvs_open(BlockDriverState *bs, const char *filename, int flags, BlockDriver *drv); void qbdrvs_close(BlockDriverState *bs); int qbdrvs_img_create(const char *filename, const char *fmt, const char *base_filename, const char *base_fmt, char *options, uint64_t img_size, int flags); /* sync access */ int qbdrvs_read(BlockDriverState *bs, int64_t sector_num, uint8_t *buf, int nb_sectors); int qbdrvs_write(BlockDriverState *bs, int64_t sector_num, const uint8_t *buf, int nb_sectors); /* info retrieve */ //sector, size and geometry info int qbdrvs_get_info(BlockDriverState *bs, BlockDriverInfo *bdi); int64_t qbdrvs_getlength(BlockDriverState *bs); int64_t qbdrvs_get_allocated_file_size(BlockDriverState *bs); void qbdrvs_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); //image type const char *qbdrvs_get_format_name(BlockDriverState *bs); //backing file info void qbdrvs_get_backing_filename(BlockDriverState *bs, char *filename, int filename_size); void qbdrvs_get_full_backing_filename(BlockDriverState *bs, char *dest, size_t sz); /* advanced image content access */ int qbdrvs_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, int *pnum); int qbdrvs_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors); int qbdrvs_has_zero_init(BlockDriverState *bs); > Il 16/07/2012 10:16, Wenchao Xia ha scritto: >>> >> Really thanks for the investigation, I paid quite sometime to dig out >> which license is compatible to LGPL, this have sorted it out. >> The coroutine and structure inside is quite a challenge. > > Coroutines are really just a small complication in the program flow if > all you support is synchronous access to files (i.e. no HTTP etc.). > Their usage should be completely transparent. > >> What about >> provide the library first in nbd + sync access, and waiting for the >> library employer response? If it is good to use, then replace implement >> code to native qemu block layer code, change code's license, while keep >> API unchanged. > > You can start by proposing the API. > > Paolo > -- Best Regards Wenchao Xia