qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 15/21] parallels: update used bitmap in allocate_cluster


From: Alexander Ivanov
Subject: Re: [PATCH 15/21] parallels: update used bitmap in allocate_cluster
Date: Mon, 18 Sep 2023 13:58:06 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.1



On 9/15/23 20:41, Denis V. Lunev wrote:
We should extend the bitmap ff the file is extended and set the bit in
Typo: ff -> if.
the image used bitmap once the cluster is allocated. Sanity check at
that moment also looks like a good idea.

Signed-off-by: Denis V. Lunev <den@openvz.org>
---
  block/parallels.c | 14 ++++++++++++++
  1 file changed, 14 insertions(+)

diff --git a/block/parallels.c b/block/parallels.c
index a2ba5a9353..a6d2f05863 100644
--- a/block/parallels.c
+++ b/block/parallels.c
@@ -282,6 +282,8 @@ allocate_clusters(BlockDriverState *bs, int64_t sector_num,
          return len;
      }
      if (s->data_end + space > (len >> BDRV_SECTOR_BITS)) {
+        uint32_t new_usedsize;
+
          space += s->prealloc_size;
          /*
           * We require the expanded size to read back as zero. If the
@@ -305,6 +307,12 @@ allocate_clusters(BlockDriverState *bs, int64_t sector_num,
          if (ret < 0) {
              return ret;
          }
+
+        new_usedsize = s->used_bmap_size +
+                       (space << BDRV_SECTOR_BITS) / s->cluster_size;
+        s->used_bmap = bitmap_zero_extend(s->used_bmap, s->used_bmap_size,
+                                          new_usedsize);
+        s->used_bmap_size = new_usedsize;
      }
/*
@@ -336,6 +344,12 @@ allocate_clusters(BlockDriverState *bs, int64_t sector_num,
          }
      }
+ ret = mark_used(bs, s->used_bmap, s->used_bmap_size,
+                    s->data_end << BDRV_SECTOR_BITS, to_allocate);
+    if (ret < 0) {
+        /* Image consistency is broken. Alarm! */
+        return ret;
+    }
      for (i = 0; i < to_allocate; i++) {
          parallels_set_bat_entry(s, idx + i, s->data_end / s->off_multiplier);
          s->data_end += s->tracks;

Otherwise the typo, LGTM.

Reviewed-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com>



reply via email to

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