From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55919) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b0leW-0006xg-V2 for qemu-devel@nongnu.org; Thu, 12 May 2016 04:07:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1b0leV-0007pN-Li for qemu-devel@nongnu.org; Thu, 12 May 2016 04:07:24 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42201) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1b0leV-0007pH-FD for qemu-devel@nongnu.org; Thu, 12 May 2016 04:07:23 -0400 References: <1462532187-22787-1-git-send-email-zhangchen.fnst@cn.fujitsu.com> <5732F4FF.5060206@redhat.com> <57331577.2090206@cn.fujitsu.com> <5733D852.9080301@redhat.com> <573423B6.2040602@cn.fujitsu.com> From: Jason Wang Message-ID: <573439B4.9040300@redhat.com> Date: Thu, 12 May 2016 16:07:16 +0800 MIME-Version: 1.0 In-Reply-To: <573423B6.2040602@cn.fujitsu.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] net/net: Add ReadState for reuse codes List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Zhang Chen , qemu devel Cc: "eddie . dong" , "Dr . David Alan Gilbert" , Li Zhijian On 2016=E5=B9=B405=E6=9C=8812=E6=97=A5 14:33, Zhang Chen wrote: >>>>> + ret =3D net_fill_rstate(&s->rs, buf, size); >>>>> + >>>>> + if (ret =3D=3D -1) { >>>>> + goto eoc; >>>>> + } else if (ret =3D=3D 1) { >>>>> + if (qemu_send_packet_async(&s->nc, s->rs.buf, >>>>> + s->rs.packet_len, >>>>> + net_socket_send_completed) =3D=3D 0) { >>>>> + net_socket_read_poll(s, false); >>>> >>>> This looks not elegant, maybe we could use callback (which was=20 >>>> initialized by the helper I mention above) to do this. Any thoughts=20 >>>> on this? >>> >>> Do you mean: >>> >>> remove >>> + if (qemu_send_packet_async(&s->nc, s->rs.buf, >>> + s->rs.packet_len, >>> + net_socket_send_completed) =3D=3D= 0) { >>> + net_socket_read_poll(s, false); >>> >>> add >>> >>> s->rs->done >>> >>> void socket_fill_rsstate_done_cb(SocketReadState *srs, void *opaque) >>> { >>> NetSocketState *s =3D opaque; >>> >>> if (qemu_send_packet_async(&s->nc, srs->buf, >>> srs->packet_len, >>> net_socket_send_completed) =3D=3D 0) { >>> net_socket_read_poll(s, false); >>> } >>> } >> >> Yes, but there's no need for opaque, we can infer the container by=20 >> container_of(). >> > > But in filter-mirror.c we need do this: > > > void redirector_fill_rsstate_done_cb(SocketReadState *srs, void *opaqu= e) > { > NetFilterState *nf =3D opaque; > > redirector_to_filter(nf, srs->buf, srs->packet_len); > } > > so,I think we have to use void *opaque. > > > You mean you need to get nf? Since SocketReadState were embedded in=20 MirrorState, so you could get the address of MirrorState, then it's not=20 hard to get nf address?