From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:52445) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RR39Q-0006cq-SG for qemu-devel@nongnu.org; Thu, 17 Nov 2011 09:41:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RR39P-00050T-QB for qemu-devel@nongnu.org; Thu, 17 Nov 2011 09:41:16 -0500 Received: from mail-ww0-f53.google.com ([74.125.82.53]:35532) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RR39P-00050K-Il for qemu-devel@nongnu.org; Thu, 17 Nov 2011 09:41:15 -0500 Received: by wwf27 with SMTP id 27so2736022wwf.10 for ; Thu, 17 Nov 2011 06:41:14 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <20111111064833.15024.54047.sendpatchset@skannery.in.ibm.com> References: <20111111064707.15024.69847.sendpatchset@skannery.in.ibm.com> <20111111064833.15024.54047.sendpatchset@skannery.in.ibm.com> Date: Thu, 17 Nov 2011 14:41:14 +0000 Message-ID: From: Stefan Hajnoczi Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [v9 Patch 6/6]Qemu: raw posix implementation of reopen functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Supriya Kannery Cc: Kevin Wolf , Christoph Hellwig , qemu-devel@nongnu.org, Luiz Capitulino On Fri, Nov 11, 2011 at 6:48 AM, Supriya Kannery wrote: > +static int raw_reopen_prepare(BlockDriverState *bs, BDRVReopenState **pr= s, > + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0int flags) > +{ > + =A0 =A0BDRVRawReopenState *raw_rs =3D g_malloc0(sizeof(BDRVRawReopenSta= te)); > + =A0 =A0BDRVRawState *s =3D bs->opaque; > + =A0 =A0int ret =3D 0; > + > + =A0 =A0raw_rs->reopen_state.reopen_flags =3D s->open_flags; > + =A0 =A0raw_rs->reopen_state.bs =3D bs; > + =A0 =A0raw_rs->reopen_fd =3D -1; > + =A0 =A0*prs =3D &(raw_rs->reopen_state); > + > + =A0 =A0/* Flags that can be set using fcntl */ > + =A0 =A0int fcntl_flags =3D BDRV_O_NOCACHE; > + > + =A0 =A0if ((bs->open_flags & ~fcntl_flags) =3D=3D (flags & ~fcntl_flags= )) { > + =A0 =A0 =A0 =A0raw_rs->reopen_fd =3D dup(s->fd); > + =A0 =A0 =A0 =A0if (raw_rs->reopen_fd <=3D 0) { > + =A0 =A0 =A0 =A0 =A0 =A0return -1; return -errno; > + =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0if ((flags & BDRV_O_NOCACHE)) { > + =A0 =A0 =A0 =A0 =A0 =A0raw_rs->reopen_state.reopen_flags |=3D O_DIRECT; > + =A0 =A0 =A0 =A0} else { > + =A0 =A0 =A0 =A0 =A0 =A0raw_rs->reopen_state.reopen_flags &=3D ~O_DIRECT= ; > + =A0 =A0 =A0 =A0} > + =A0 =A0 =A0 =A0ret =3D fcntl_setfl(raw_rs->reopen_fd, raw_rs->reopen_st= ate.reopen_flags); I wonder if this works on Solaris, FreeBSD, etc? Perhaps there needs to be a fallback to the missing "else" case below... > + =A0 =A0} else { > + > + =A0 =A0 =A0 =A0/* TBD: Handle O_DSYNC and other flags. For now return e= rror */ > + =A0 =A0 =A0 =A0ret =3D -1; ...and this needs to be implemented. > + =A0 =A0} > + =A0 =A0return ret; > +} Stefan