Hi all,

Firstly appologies for not using the launchpad bug tracker, it won't
let me register an account, keeps telling me my 'page is stale'.

I'm sending this to you as a build issue, but it could be that it's a
block-io issue. I'm calling it a build issue because I fixed it by
changing the configure/build process.

I'm building on a linux-from-scratch system.

at line 1042 of block/raw-posix.c there's a function called
handle_aiocb_write_zeroes

This function declares a variable 's' only if certain defines are true

#if defined(CONFIG_FALLOCATE) || defined(CONFIG_XFS)
    BDRVRawState *s = aiocb->bs->opaque;
#endif


but it uses variable 's' if *other* defines are true

#ifdef CONFIG_FALLOCATE_ZERO_RANGE
    if (s->has_write_zeroes) {
        int ret = do_fallocate(s->fd, FALLOC_FL_ZERO_RANGE,
                               aiocb->aio_offset, aiocb->aio_nbytes);
        if (ret == 0 || ret != -ENOTSUP) {
            return ret;
        }
        s->has_write_zeroes = false;
    }
#endif


so, if CONFIG_FALLOCATE_ZERO_RANGE is defined, but CONFIG_FALLOCATE
isn't, then the build will fail.

I *think* that CONFIG_FALLOCATE_ZERO_RANGE shouldn't be set if
CONFIG_FALLOCATE isn't set (Quite how this situation has come about
I'm not sure, probably my system is strange in some way). Looking in
'configure' I see (at line 5108):


if test "$fallocate" = "yes" ; then
  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
fi
if test "$fallocate_punch_hole" = "yes" ; then
  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
fi
if test "$fallocate_zero_range" = "yes" ; then
  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
fi
if test "$posix_fallocate" = "yes" ; then
  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
fi
if test "$sync_file_range" = "yes" ; then
  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
fi


If I change the CONFIG_FALLOCATE 'if' block to wrap all the FALLOCATE
options, like so:


if test "$fallocate" = "yes" ; then
  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
if test "$fallocate_punch_hole" = "yes" ; then
  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
fi
if test "$fallocate_zero_range" = "yes" ; then
  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
fi
if test "$posix_fallocate" = "yes" ; then
  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
fi
fi

then qemu builds successfully on my system.


Hope this is some use!

regards

Colum

Reply via email to