request size limit in scsi tape driver
Currently the st driver does not to break up write requests into smaller chunks to satisfy the ->max_hw_sectors limit of the underlying host driver.
# modprobe -v scsi_debug ptype=1 opts=1 dev_size_mb=123 # dd if=/dev/zero of=/dev/st0 bs=$((1024*54321))
This leads to -EBUSY from this call chain:st_write -> st_do_scsi -> st_scsi_execute -> blk_rq_map_user
What is the reason for this behaviour?
Should st_write write in smaller chunks, or would that break real hardware because they expect certain block sizes?
The specific issue at hand I have is that the (out-of-tree) Xen pvscsi has a ->max_hw_sectors limit of 200, which limits the block size in a guest to 100K.
Olaf
Quoted 7 lines · Olaf Hering
Currently the st driver does not to break up write requests into smaller chunks to satisfy the ->max_hw_sectors limit of the underlying host driver.
# modprobe -v scsi_debug ptype=1 opts=1 dev_size_mb=123 # dd if=/dev/zero of=/dev/st0 bs=$((1024*54321))
Quoted 7 lines
This leads to
-EBUSYfrom this call chain:st_write->st_do_scsi->st_scsi_execute->blk_rq_map_userWhat is the reason for this behaviour?
Shouldst_writewrite in smaller chunks, or would that break real hardware because they expect certain block sizes?
In variable block mode the write() byte count determines the size of the tape block. Exactly one SCSI command is used to write one block. This is why the writes can't be split in variable block mode. In fixed block mode the writes are split but this results in several tape blocks for each write().
Kai
Quoted 16 lines · Kai Makisara
Quoted 7 lines · Olaf Hering
Currently the st driver does not to break up write requests into smaller chunks to satisfy the ->max_hw_sectors limit of the underlying host driver.
# modprobe -v scsi_debug ptype=1 opts=1 dev_size_mb=123 # dd if=/dev/zero of=/dev/st0 bs=$((1024*54321))Quoted 7 lines
This leads to
-EBUSYfrom this call chain:st_write->st_do_scsi->st_scsi_execute->blk_rq_map_userWhat is the reason for this behaviour?
Shouldst_writewrite in smaller chunks, or would that break real hardware because they expect certain block sizes?
Quoted 5 lines
In variable block mode the
write()byte count determines the size of the tape block. Exactly one SCSI command is used to write one block. This is why the writes can't be split in variable block mode. In fixed block mode the writes are split but this results in several tape blocks for eachwrite().
Thats very unfortunate.
Would it be possible in theory to split and reassemble the SCSI commands in backend/frontend to overcome this protocol limit in pvscsi?
Olaf