Skip to content
  • Aurelien Jarno's avatar
    scsi-generic: correct error management · 89c0f643
    Aurelien Jarno authored
    
    
    this patch allows to fully use a tape device connected to qemu through
    the scsi-generic interface.
    
    Previous patch introduced tape SCSI commands management, this one
    improve error case management:
    
    - the SCSI controller command completion must be called with the status
    value, not the sense value. In the case of scsi-generic, the SCSI status
    is given by the field status of sg_io_hdr_t (the value is left shifted
    by one regarding status codes defined in /usr/include/scsi/scsi.h)
    
    - when a read is aborted due to a mark/EOF/EOD/EOM, the len reported to
    controller can be 0. LSI controller emulation doesn't know how to manage
    this. A workaround found is to call the completion routine with
    SCSI_REASON_DONE just after calling it with SCSI_REASON_DATA with len=0.
    
    This patch also manages correctly the block size of the tape device.
    
    This patch has been tested with a real tape device "HP C5683A", linux
    guest (debian etch) and tools like "mt", "tar" and "btape".
    
    Windows guest is not better supported than before...
    
    Signed-off-by: default avatarLaurent Vivier <Laurent.Vivier@bull.net>
    Signed-off-by: default avatarAurelien Jarno <aurelien@aurel32.net>
    
    git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5497 c046a42c-6fe2-441c-8c8c-71466251a162
    89c0f643