Am 30.06.2016 um 17:59 schrieb Paolo Bonzini:
On 30/06/2016 13:08, Peter Lieven wrote:
this fills up the allocationmap at iscsi_open. This helps
to reduce the number of get_block_status requests during runtime
significantly.
Signed-off-by: Peter Lieven <p...@kamp.de>
---
block/iscsi.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/block/iscsi.c b/block/iscsi.c
index 0cdcedb..04fb0a3 100644
--- a/block/iscsi.c
+++ b/block/iscsi.c
@@ -1774,6 +1774,22 @@ static int iscsi_open(BlockDriverState *bs, QDict
*options, int flags,
iscsilun->block_size) >>
BDRV_SECTOR_BITS;
if (iscsilun->lbprz) {
ret = iscsi_allocmap_init(iscsilun, bs->open_flags);
+ if (ret == 0) {
+ unsigned int max_reqs = 64;
+ int64_t sector_num = 0;
+ while (max_reqs-- && sector_num < bs->total_sectors) {
+ int n;
+ BlockDriverState *file;
+ ret = bdrv_get_block_status(bs, sector_num,
+ BDRV_REQUEST_MAX_SECTORS,
+ &n, &file);
+ if (ret < 0) {
+ break;
+ }
+ sector_num += n;
+ ret = 0;
+ }
+ }
}
}
This can take a long time and the disks may not even be ever used. I
don't think it's a good idea.
Sure, the target might stay unused, but why do you suspect its slow?
Peter