Am 20.09.2012 21:13, schrieb Jeff Cody: > Move AIO initialization for raw-posix block driver into a helper function. > > In addition to just code motion, the aio_ctx pointer is checked for NULL, > prior to calling laio_init(), to make sure laio_init() is only run once. > > Signed-off-by: Jeff Cody <jc...@redhat.com> > --- > block/raw-posix.c | 53 +++++++++++++++++++++++++++++++++++------------------ > 1 file changed, 35 insertions(+), 18 deletions(-) > > diff --git a/block/raw-posix.c b/block/raw-posix.c > index 6be20b1..5981d04 100644 > --- a/block/raw-posix.c > +++ b/block/raw-posix.c
> @@ -240,25 +272,10 @@ static int raw_open_common(BlockDriverState *bs, const > char *filename, > } > > #ifdef CONFIG_LINUX_AIO > - /* > - * Currently Linux do AIO only for files opened with O_DIRECT > - * specified so check NOCACHE flag too > - */ > - if ((bdrv_flags & (BDRV_O_NOCACHE|BDRV_O_NATIVE_AIO)) == > - (BDRV_O_NOCACHE|BDRV_O_NATIVE_AIO)) { > - > - s->aio_ctx = laio_init(); > - if (!s->aio_ctx) { > - goto out_free_buf; > - } > - s->use_aio = 1; > - } else > -#endif > - { > -#ifdef CONFIG_LINUX_AIO > - s->use_aio = 0; > -#endif > + if (raw_set_aio(&s->aio_ctx, &s->use_aio, bdrv_flags)) { > + goto out_close; This leaks s->aligned_buf. It's removed later in the series anyway, so no big deal, but if you need to respin for other reasons, probably worth fixing. Kevin