Von meinem iPhone gesendet
Am 21.06.2013 um 22:00 schrieb Paolo Bonzini <pbonz...@redhat.com>: > Il 20/06/2013 20:20, Peter Lieven ha scritto: >> + for (lba = 0; lba < iscsilun->num_blocks; lba += 1 << 26) { >> + nb_sectors = 1 << 26; >> + if (lba + nb_sectors > iscsilun->num_blocks) { >> + nb_sectors = iscsilun->num_blocks - lba; >> + } >> + nb_sectors *= (iscsilun->block_size / BDRV_SECTOR_SIZE); >> + n = 0; >> + ret = iscsi_co_is_allocated(bs, lba, nb_sectors, &n); >> + if (ret || n != nb_sectors) { >> + return 0; >> + } > > I would just do lba += n in the for loop, and only exit if n == 0. The > SCSI spec does not forbid splitting a single allocated area into > multiple descriptors, or only returning part of an allocated area into > the last descriptor. > > Otherwise looks good, but you may want to cache the result. It would > not be 1 anymore after the first write. > Of course, but after some discussions with Kevin we might have found a better Solution than extending has_zero_init this far. Let you know soon :-) > Paolo