Hello everyone,

I am having trouble with my qemu guests. I am facing buffer input output
errors on the guests' kernel log:
[TIMESTAMP] Buffer I/O error on device vda1, logical block XXXXXX
[TIMESTAMP] end_request: I/O error, dev vda, sector XXXXXX

I am also reading in the qemu log:
qemu-system-x86_64: shrinking is not supported

I traced this message to the block driver I am using (sheepdog):
static int sd_truncate(BlockDriverState *bs, int64_t offset)
{
    BDRVSheepdogState *s = bs->opaque;
    int ret, fd;
    unsigned int datalen;

    if (offset < s->inode.vdi_size) {
        error_report("shrinking is not supported");
        return -EINVAL;
    } else if (offset > SD_MAX_VDI_SIZE) {
        error_report("too big image size");
        return -EINVAL;
    }

    fd = connect_to_sdog(s);
    if (fd < 0) {
        return fd;
    }
...
}

This function is called as the .bdrv_truncate function. I already asked
people on sheepdog about what could cause calls to this function but as far
as they know, only qemu-img resize could call this function.
I am using libvirt as well.

Does anyone have a clue?

Thanks,

Hadrien Kohl



---------- Forwarded message ----------
From: Liu Yuan <namei.u...@gmail.com>
Date: 2013/12/12
Subject: Re: [sheepdog] Call to sd_truncate()
To: Hadrien KOHL <hadrien.k...@gmail.com>
Cc: sheep...@lists.wpkg.org


On Thu, Dec 12, 2013 at 11:36:06AM +0100, Hadrien KOHL wrote:
> Hi,
>
> Thanks, that's interesting. I don't have any component I can think of that
> does this though.
> Could it be possible that the kernel/filesystem of the host is doing it on
> it's own?
>

IMO only 'qemu-img resize'(probably libvirt has similar function) and
'dog vdi resize' can resize the volume.

But any higher component in QEMU might call .bdrv_truncate() too, which is
out
of my cscope. I'd suggest you ask the qemu list that anyone else execept
'qemu-img resize' would call .bdrv_truncate() while VM is running.

Thanks
Yuan

Reply via email to