until now the allocation map was used only as a hint if a cluster is allocated or not. If a block was not allocated (or Qemu had no info about the allocation status) a get_block_status call was issued to check the allocation status and possibly avoid a subsequent read of unallocated sectors. If a block known to be allocated the get_block_status call was omitted. In the other case a get_block_status call was issued before every read to avoid the necessity for a consistent allocation map. To avoid the potential overhead of calling get_block_status for each and every read request this took only place for the bigger requests.
This patch enhances this mechanism to cache the allocation status and avoid calling get_block_status for blocks where the allocation status has been queried before. This allows for bypassing the read request even for smaller requests and additionally omits calling get_block_status for known to be unallocated blocks. History: v4->v5: - fix rounding if clusters are expanded [Paolo] - Remove the checking for nb_clusters > 0 as bitmap_set and bitmap_clear can both handle nr == 0. - fixed comment in iscsi_allocmap_set_unallocated (third -> fifth argument) v3->v4: - added comment to iscsi_allocmap_set_unallocated [Paolo] - rebased to current master v2->v3: - fix wording errors [Fam] - reinit allocmap only if allocmap is present in bdrv_reopen_commit v1->v2: - add more comments [Fam] - free allocmap if allocation of allocmap_valid fails [Fam] - fix indent and whitespace errors [Fam] - account for cache mode changes on reopen Peter Lieven (2): block/iscsi: fix rounding in iscsi_allocationmap_set block/iscsi: allow caching of the allocation map block/iscsi.c | 248 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 192 insertions(+), 56 deletions(-) -- 1.9.1