[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 10/12] block/iscsi: fix rounding in iscsi_allocationm
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 10/12] block/iscsi: fix rounding in iscsi_allocationmap_set |
Date: |
Tue, 19 Jul 2016 10:34:17 +0200 |
From: Peter Lieven <address@hidden>
when setting clusters as alloacted the boundaries have
to be expanded. As Paolo pointed out the calculation of
the number of clusters is wrong:
Suppose cluster_sectors is 2, sector_num = 1, nb_sectors = 6:
In the "mark allocated" case, you want to set 0..8, i.e.
cluster_num=0, nb_clusters=4.
0--.--2--.--4--.--6--.--8
<--|_________________|--> (<--> = expanded)
Instead you are setting nb_clusters=3, so that 6..8 is not marked.
0--.--2--.--4--.--6--.--8
<--|______________|!!! (! = wrong)
Cc: address@hidden
Reported-by: Paolo Bonzini <address@hidden>
Signed-off-by: Peter Lieven <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
block/iscsi.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/block/iscsi.c b/block/iscsi.c
index cf1e9e7..22330e1 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -432,12 +432,14 @@ static unsigned long *iscsi_allocationmap_init(IscsiLun
*iscsilun)
static void iscsi_allocationmap_set(IscsiLun *iscsilun, int64_t sector_num,
int nb_sectors)
{
+ int64_t cluster_num, nb_clusters;
if (iscsilun->allocationmap == NULL) {
return;
}
- bitmap_set(iscsilun->allocationmap,
- sector_num / iscsilun->cluster_sectors,
- DIV_ROUND_UP(nb_sectors, iscsilun->cluster_sectors));
+ cluster_num = sector_num / iscsilun->cluster_sectors;
+ nb_clusters = DIV_ROUND_UP(sector_num + nb_sectors,
+ iscsilun->cluster_sectors) - cluster_num;
+ bitmap_set(iscsilun->allocationmap, cluster_num, nb_clusters);
}
static void iscsi_allocationmap_clear(IscsiLun *iscsilun, int64_t sector_num,
--
2.7.4
- [Qemu-devel] [PULL v2 00/12] Misc patches for 2.7 hard freeze from 2016-07-18, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 02/12] Changed malloc to g_malloc, free to g_free in bsd-user/qemu.h, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 01/12] use g_path_get_dirname instead of dirname, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 05/12] megasas: remove useless check for cmd->frame, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 03/12] hw/i386: add device tree support, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 04/12] compiler: never omit assertions if using a static analysis tool, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 08/12] cpu-exec: Move down some declarations in cpu_exec(), Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 07/12] exec: avoid realloc in phys_map_node_reserve, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 10/12] block/iscsi: fix rounding in iscsi_allocationmap_set,
Paolo Bonzini <=
- [Qemu-devel] [PULL 09/12] Move README to markdown, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 06/12] checkpatch: consider git extended headers valid patches, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 12/12] target-i386: Remove redundant HF_SOFTMMU_MASK, Paolo Bonzini, 2016/07/19
- [Qemu-devel] [PULL 11/12] block/iscsi: allow caching of the allocation map, Paolo Bonzini, 2016/07/19
- Re: [Qemu-devel] [PULL v2 00/12] Misc patches for 2.7 hard freeze from 2016-07-18, Peter Maydell, 2016/07/19