qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v2 02/17] block: use int64_t as bytes type in tracked request


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v2 02/17] block: use int64_t as bytes type in tracked requests
Date: Mon, 27 Apr 2020 12:11:59 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0

On 4/27/20 10:23 AM, Vladimir Sementsov-Ogievskiy wrote:
We are generally moving to int64_t for both offset and bytes parameters
on all io paths. Convert tracked requests now.

This doesn't seem a strong justification... If I understand correctly this patch, it is safer to use positive signed type rather than unsigned type. OK it might make sense to better catch overflow, but it should be explained in the function prototypes, else commit message, else the series cover IMHO.

Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
Reviewed-by: Stefan Hajnoczi <address@hidden>
---
  include/block/block_int.h |  4 ++--
  block/io.c                | 11 ++++++-----
  2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/include/block/block_int.h b/include/block/block_int.h
index 4c3587ea19..c8daba608b 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -70,12 +70,12 @@ enum BdrvTrackedRequestType {
  typedef struct BdrvTrackedRequest {
      BlockDriverState *bs;
      int64_t offset;
-    uint64_t bytes;
+    int64_t bytes;
      enum BdrvTrackedRequestType type;
bool serialising;
      int64_t overlap_offset;
-    uint64_t overlap_bytes;
+    int64_t overlap_bytes;
QLIST_ENTRY(BdrvTrackedRequest) list;
      Coroutine *co; /* owner, used for deadlock detection */
diff --git a/block/io.c b/block/io.c
index aba67f66b9..7cbb80bd24 100644
--- a/block/io.c
+++ b/block/io.c
@@ -692,10 +692,11 @@ static void tracked_request_end(BdrvTrackedRequest *req)
  static void tracked_request_begin(BdrvTrackedRequest *req,
                                    BlockDriverState *bs,
                                    int64_t offset,
-                                  uint64_t bytes,
+                                  int64_t bytes,
                                    enum BdrvTrackedRequestType type)
  {
-    assert(bytes <= INT64_MAX && offset <= INT64_MAX - bytes);
+    assert(offset >= 0 && bytes >= 0 &&
+           bytes <= INT64_MAX && offset <= INT64_MAX - bytes);
*req = (BdrvTrackedRequest){
          .bs = bs,
@@ -716,7 +717,7 @@ static void tracked_request_begin(BdrvTrackedRequest *req,
  }
static bool tracked_request_overlaps(BdrvTrackedRequest *req,
-                                     int64_t offset, uint64_t bytes)
+                                     int64_t offset, int64_t bytes)
  {
      /*        aaaa   bbbb */
      if (offset >= req->overlap_offset + req->overlap_bytes) {
@@ -773,8 +774,8 @@ bool bdrv_mark_request_serialising(BdrvTrackedRequest *req, 
uint64_t align)
  {
      BlockDriverState *bs = req->bs;
      int64_t overlap_offset = req->offset & ~(align - 1);
-    uint64_t overlap_bytes = ROUND_UP(req->offset + req->bytes, align)
-                               - overlap_offset;
+    int64_t overlap_bytes =
+            ROUND_UP(req->offset + req->bytes, align) - overlap_offset;
      bool waited;
qemu_co_mutex_lock(&bs->reqs_lock);





reply via email to

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