qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] use int64_t for return values from rbd instead


From: Stefan Priebe - Profihost AG
Subject: Re: [Qemu-devel] [PATCH] use int64_t for return values from rbd instead of int
Date: Wed, 21 Nov 2012 08:47:16 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121028 Thunderbird/16.0.2

Am 21.11.2012 07:41, schrieb Stefan Hajnoczi:
On Tue, Nov 20, 2012 at 8:16 PM, Stefan Priebe <address@hidden> wrote:
Hi Stefan,

Am 20.11.2012 17:29, schrieb Stefan Hajnoczi:

On Tue, Nov 20, 2012 at 01:44:55PM +0100, Stefan Priebe wrote:

rbd / rados tends to return pretty often length of writes
or discarded blocks. These values might be bigger than int.

Signed-off-by: Stefan Priebe <address@hidden>
---
   block/rbd.c |    4 ++--
   1 file changed, 2 insertions(+), 2 deletions(-)


Looks good but I want to check whether this fixes an bug you've hit?
Please indicate details of the bug and how to reproduce it in the commit
message.


you get various I/O errors in client. As negative return values indicate I/O
errors. When now a big positive value is returned by librbd block/rbd tries
to store this one in acb->ret which is an int. Then it wraps around and is
negative. After that block/rbd thinks this is an I/O error and report this
to the guest.

It's still not clear whether this is a bug that you can reproduce.
After all, the ret value would have to be >2^31 which is a 2+ GB
request!
Yes and that is the fact.

Look here:
   if (acb->cmd == RBD_AIO_WRITE ||
        acb->cmd == RBD_AIO_DISCARD) {
        if (r < 0) {
            acb->ret = r;
            acb->error = 1;
        } else if (!acb->error) {
            acb->ret = rcb->size;
        }

It sets acb->ret to rcb->size. But the size from a DISCARD if you DISCARD a whole device might be 500GB or today even some TB.

Greets,
Stefan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]