From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:33998) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RSTM9-0001CH-30 for qemu-devel@nongnu.org; Mon, 21 Nov 2011 07:52:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RSTM5-0008Fl-8b for qemu-devel@nongnu.org; Mon, 21 Nov 2011 07:52:17 -0500 Received: from e23smtp06.au.ibm.com ([202.81.31.148]:43135) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RSTM4-0008Fg-NE for qemu-devel@nongnu.org; Mon, 21 Nov 2011 07:52:13 -0500 Received: from /spool/local by e23smtp06.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 21 Nov 2011 12:50:06 +1000 Received: from d23av04.au.ibm.com (d23av04.au.ibm.com [9.190.235.139]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id pALCmbYD3354712 for ; Mon, 21 Nov 2011 23:48:37 +1100 Received: from d23av04.au.ibm.com (loopback [127.0.0.1]) by d23av04.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id pALCpqUD025517 for ; Mon, 21 Nov 2011 23:51:54 +1100 Message-ID: <4ECA447A.40500@in.ibm.com> Date: Mon, 21 Nov 2011 18:00:50 +0530 From: supriya kannery MIME-Version: 1.0 References: <20111111064707.15024.69847.sendpatchset@skannery.in.ibm.com> <20111111064833.15024.54047.sendpatchset@skannery.in.ibm.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit 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: Stefan Hajnoczi Cc: Kevin Wolf , Supriya Kannery , Christoph Hellwig , qemu-devel@nongnu.org, Luiz Capitulino Stefan Hajnoczi wrote: > On Fri, Nov 11, 2011 at 6:48 AM, Supriya Kannery > wrote: > >> +static int raw_reopen_prepare(BlockDriverState *bs, BDRVReopenState **prs, >> + int flags) >> +{ >> + BDRVRawReopenState *raw_rs = g_malloc0(sizeof(BDRVRawReopenState)); >> + BDRVRawState *s = bs->opaque; >> + int ret = 0; >> + >> + raw_rs->reopen_state.reopen_flags = s->open_flags; >> + raw_rs->reopen_state.bs = bs; >> + raw_rs->reopen_fd = -1; >> + *prs = &(raw_rs->reopen_state); >> + >> + /* Flags that can be set using fcntl */ >> + int fcntl_flags = BDRV_O_NOCACHE; >> + >> + if ((bs->open_flags & ~fcntl_flags) == (flags & ~fcntl_flags)) { >> + raw_rs->reopen_fd = dup(s->fd); >> + if (raw_rs->reopen_fd <= 0) { >> + return -1; >> > > return -errno; > > >> + } >> + if ((flags & BDRV_O_NOCACHE)) { >> + raw_rs->reopen_state.reopen_flags |= O_DIRECT; >> + } else { >> + raw_rs->reopen_state.reopen_flags &= ~O_DIRECT; >> + } >> + ret = fcntl_setfl(raw_rs->reopen_fd, raw_rs->reopen_state.reopen_flags); >> > > I wonder if this works on Solaris, FreeBSD, etc? > > Perhaps there needs to be a fallback to the missing "else" case below... > > ok. Will look into whether this will work on Solaris, FreeBSD etc.. >> + } else { >> + >> + /* TBD: Handle O_DSYNC and other flags. For now return error */ >> + ret = -1; >> > > ...and this needs to be implemented. > > ok >> + } >> + return ret; >> +} >> > > Stefan > >