On 05/17/2016 01:16 PM, Bart Van Assche wrote: > On 05/16/2016 12:02 PM, Martin K. Petersen wrote: >>>>>>> "Bart" == Bart Van Assche writes: >> >> Bart> That's a good catch. But seeing this patch makes me wonder whether >> Bart> this patch introduces a 64-bit division? If so, I'm afraid this >> Bart> patch will make 32-bit users unhappy. Have you considered to use >> Bart> do_div() or >> (ilog2(block_size) - 9) instead? For the latter >> Bart> alternative no 64-bit cast is needed. >> >> Please use logical_to_sectors(). > > Hello Martin, > > For SCSI initiator devices the logical block size is stored in struct > scsi_device. logical_to_sectors() gets the logical block size from > struct scsi_device. LIO however stores the logical block size in struct > se_dev_attrib. If we want to keep SCSI initiator and SCSI target headers > separate I think we will need two logical_to_sectors() functions - one > for SCSI initiator devices and one for SCSI target devices. > Or block layer helpers? Something like the attached patch. It is a compile only tested patch (just for show and not for submission as I would break it up and test, etc) that would move the scsi converter to the block layer, and convert the target layer and scsi to use it.