Am 21.11.2012 07:41, schrieb Stefan Hajnoczi:
On Tue, Nov 20, 2012 at 8:16 PM, Stefan Priebe <s.priebe@xxxxxxxxxxxx> 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 <s.priebe@xxxxxxxxxxxx>
---
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
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html