• Nicholas Bellinger's avatar
    target/pscsi: Fix TYPE_TAPE + TYPE_MEDIMUM_CHANGER export · af3c9669
    Nicholas Bellinger authored
    commit a04e54f2 upstream.
    
    The following fixes a divide by zero OOPs with TYPE_TAPE
    due to pscsi_tape_read_blocksize() failing causing a zero
    sd->sector_size being propigated up via dev_attrib.hw_block_size.
    
    It also fixes another long-standing bug where TYPE_TAPE and
    TYPE_MEDIMUM_CHANGER where using pscsi_create_type_other(),
    which does not call scsi_device_get() to take the device
    reference.  Instead, rename pscsi_create_type_rom() to
    pscsi_create_type_nondisk() and use it for all cases.
    
    Finally, also drop a dump_stack() in pscsi_get_blocks() for
    non TYPE_DISK, which in modern target-core can get invoked
    via target_sense_desc_format() during CHECK_CONDITION.
    Reported-by: default avatarMalcolm Haak <insanemal@gmail.com>
    Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
    [bwh: Backported to 3.16:
     - Deleted log format is slightly different
     - Cast Scsi_Host::max_sectors from unsigned short to unsigned int, to avoid
       a warning about differing types in min_not_zero()]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    af3c9669
target_core_pscsi.c 29.3 KB