From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57912) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XOMzk-0001jY-Fo for qemu-devel@nongnu.org; Mon, 01 Sep 2014 04:29:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XOMzf-0000aY-D1 for qemu-devel@nongnu.org; Mon, 01 Sep 2014 04:29:48 -0400 Received: from lputeaux-656-01-25-125.w80-12.abo.wanadoo.fr ([80.12.84.125]:36278 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XOMzf-0000aJ-1X for qemu-devel@nongnu.org; Mon, 01 Sep 2014 04:29:43 -0400 Date: Mon, 1 Sep 2014 10:28:54 +0200 From: =?iso-8859-1?Q?Beno=EEt?= Canet Message-ID: <20140901082854.GC15537@irqsave.net> References: <1409557394-11853-1-git-send-email-namei.unix@gmail.com> <1409557394-11853-3-git-send-email-namei.unix@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <1409557394-11853-3-git-send-email-namei.unix@gmail.com> Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH 2/8] block: add driver operation callbacks List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Liu Yuan Cc: Kevin Wolf , qemu-devel@nongnu.org, Stefan Hajnoczi The Monday 01 Sep 2014 =E0 15:43:08 (+0800), Liu Yuan wrote : > Driver operations are defined as callbacks passed from block upper driv= ers to > lower drivers and are supposed to be called by lower drivers. >=20 > Requests handling(queuing, submitting, etc.) are done in protocol tier = in the > block layer and connection states are also maintained down there. Drive= r > operations are supposed to notify the upper tier (such as quorum) of th= e states > changes. >=20 > For now only two operation are added: >=20 > driver_disconnect: called when connection is off > driver_reconnect: called when connection is on after disconnection >=20 > Which are used to notify upper tier of the connection state. >=20 > Cc: Eric Blake > Cc: Benoit Canet > Cc: Kevin Wolf > Cc: Stefan Hajnoczi > Signed-off-by: Liu Yuan > --- > block.c | 7 +++++++ > include/block/block.h | 7 +++++++ > include/block/block_int.h | 3 +++ > 3 files changed, 17 insertions(+) >=20 > diff --git a/block.c b/block.c > index c12b8de..22eb3e4 100644 > --- a/block.c > +++ b/block.c > @@ -2152,6 +2152,13 @@ void bdrv_set_dev_ops(BlockDriverState *bs, cons= t BlockDevOps *ops, > bs->dev_opaque =3D opaque; > } > =20 > +void bdrv_set_drv_ops(BlockDriverState *bs, const BlockDrvOps *ops, > + void *opaque) > +{ > + bs->drv_ops =3D ops; > + bs->drv_opaque =3D opaque; We need to be very carefull of the mix between these fields and the infam= ous bdrv_swap function. Also I don't know if "driver operations" is the right name since the Bloc= kDriver structure's callback could also be named "driver operations". > +} > + > static void bdrv_dev_change_media_cb(BlockDriverState *bs, bool load) > { > if (bs->dev_ops && bs->dev_ops->change_media_cb) { > diff --git a/include/block/block.h b/include/block/block.h > index 8f4ad16..a61eaf0 100644 > --- a/include/block/block.h > +++ b/include/block/block.h > @@ -82,6 +82,11 @@ typedef struct BlockDevOps { > void (*resize_cb)(void *opaque); > } BlockDevOps; > =20 > +typedef struct BlockDrvOps { > + void (*driver_reconnect)(BlockDriverState *bs); > + void (*driver_disconnect)(BlockDriverState *bs); > +} BlockDrvOps; > + > typedef enum { > BDRV_REQ_COPY_ON_READ =3D 0x1, > BDRV_REQ_ZERO_WRITE =3D 0x2, > @@ -234,6 +239,8 @@ void bdrv_detach_dev(BlockDriverState *bs, void *de= v); > void *bdrv_get_attached_dev(BlockDriverState *bs); > void bdrv_set_dev_ops(BlockDriverState *bs, const BlockDevOps *ops, > void *opaque); > +void bdrv_set_drv_ops(BlockDriverState *bs, const BlockDrvOps *ops, > + void *opaque); > void bdrv_dev_eject_request(BlockDriverState *bs, bool force); > bool bdrv_dev_has_removable_media(BlockDriverState *bs); > bool bdrv_dev_is_tray_open(BlockDriverState *bs); > diff --git a/include/block/block_int.h b/include/block/block_int.h > index 2334895..9fdec7f 100644 > --- a/include/block/block_int.h > +++ b/include/block/block_int.h > @@ -319,6 +319,9 @@ struct BlockDriverState { > const BlockDevOps *dev_ops; > void *dev_opaque; > =20 > + const BlockDrvOps *drv_ops; > + void *drv_opaque; > + > AioContext *aio_context; /* event loop used for fd handlers, timer= s, etc */ > =20 > char filename[1024]; > --=20 > 1.9.1 >=20