Il 13/09/2013 14:22, Peter Lieven ha scritto: > Am 13.09.2013 13:45, schrieb Paolo Bonzini: >> Il 13/09/2013 12:44, Peter Lieven ha scritto: >>> On 13.09.2013 12:34, Paolo Bonzini wrote: >>>> Il 13/09/2013 12:25, Peter Lieven ha scritto: >>>>> + /* maximum number of sectors that can be discarded at once */ >>>>> + int max_discard; >>>>> + /* maximum number of sectors that can zeroized at once */ >>>>> + int max_write_zeroes; >>>> These should not be needed outside the driver. >>>> >>>> If you want to make them private between block.c and block/iscsi.c, you >>>> can add them to BlockDriverState. >>> The question is, if the discard_zeroes or discard_write_zeroes is needed >>> outside the driver as well? >>> >>> I can put the max_* information in the block driver state. I also thought >>> to add alignment and granularity information even if they are currently >>> not yet used. >> Yeah, in fact bdrv_write_zeroes and bdrv_discard can be taught to split >> requests according to these parameters instead of introducing a new >> function bdrv_zeroize. You don't need bdrv_zeroize I think; you can >> simply use bdrv_write_zeroes. This is why I don't like this information >> in BlockDriverInfo. > > bdrv_zeroize has one big advantage over a bdrv_write_zeroes over > the whole device: it checks the block status before it sends requests. > this can be a great performance benefit if a lot of blocks are already > unmapped. so i would like to keep it in, but simplifiy it (see below).
Good idea. > For now I can factor out the request split logic out of > iscsi_co_discard, iscsi_co_write_zeroes and bdrv_sanitize > and put them in bdrv_co_discard and bdrv_co_write_zeroes. > > I would like to leave the misalignment logic to a later patch. Sure. > What would you think are reasonable default values for > max_discard and max_write_zeroes? 32768 (16 MB) is the highest power-of-two amount that fits in 16 bits assuming 512-byte sectors. But you could also take a look at what the Linux kernel does in drivers/scsi/sd.c. Paolo