Il 03/09/2012 15:56, Eric Blake ha scritto: > Exactly how does the *pnum argument work? This interface looks like it > isn't fully thought out yet. Either I want to know if a chunk of > sectors is allocated (I supply start and length of sectors to check), > regardless of how many sectors beyond that point are also allocated > (pnum makes no sense);
pnum makes sense if the [start, start+length) range includes both allocated and unallocated sectors. > or I want to know how many sectors are allocated > from a given point (I supply start, and the function returns length, so > nb_sectors makes no sense). This operation could be O(number of blocks in disk) worst case, so it makes sense to provide nb_sectors as an upper bound. nb_sectors is typically dictated by the size of your buffer. That said, QEMU's internal bdrv_is_allocated function does have one not entirely appealing property: the block at start + *pnum might have the same state as the block at start + *pnum - 1, even if *pnum < length. We may want to work around this in libqblock, but we could also simply document it. Paolo > Either way, I think you are supplying too > many parameters for how I envision checking for allocated sectors.