Skip to contentSkip to conversation

request size limit in scsi tape driver

DISCUSSION Olaf Hering 2 participants 3 messages Aug 20, 2012 – Aug 23, 2012 SCSI

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
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 -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?

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

#2 lore raw
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 -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?

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 each write().

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