I'm really worried about how this is tied into the sd driver. >From a quick look it seems like the only thing you really need in the scheduler that is done through struct scsi_disk is the offset + len -> zone number lookup - I'd much rather expose this from sd upwards and keep the scheduler in the block code. Except for that this looks like a fine approach to me.