qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 1/1] block migration: fix return value mismatch


From: Gary Hook
Subject: [Qemu-devel] [PATCH 1/1] block migration: fix return value mismatch
Date: Wed, 12 Nov 2014 18:48:18 +0000

The function uses a ternary return value (<, >, == 0) defined as an int. The code in in this function uses int64_t types to collect ftell() return values and use their difference as the return value. Unfortunately, narrowing of integer types results in the disposal of the left-most bits that won’t fit in the target type. Here, for values larger than 2GB, the resulting value will be randomly negative or positive, based on total number of blocks. The patch ensures that only +1, -1, or 0 are returned to properly report status.



diff -u -r a/block-migration.c b/block-migration.c

--- a/block-migration.c 2014-04-17 08:30:59.000000000 -0500

+++ b/block-migration.c 2014-11-10 12:39:10.727431187 -0600

@@ -628,6 +628,7 @@

 {

     int ret;

     int64_t last_ftell = qemu_ftell(f);

+    int64_t delta_ftell;

 

     DPRINTF("Enter save live iterate submitted %d transferred %d\n",

             block_mig_state.submitted, block_mig_state.transferred);

@@ -677,7 +678,8 @@

     }

 

     qemu_put_be64(f, BLK_MIG_FLAG_EOS);

-    return qemu_ftell(f) - last_ftell;

+    delta_ftell = qemu_ftell(f) - last_ftell;

+    return( (delta_ftell > 0) ? 1 : (delta_ftell < 0) ? -1 : 0 );

 }

 

 /* Called with iothread lock taken.  */



reply via email to

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