Since the READ(6) and WRITE(6) commands interpret a zero in the transfer
length field in the CDB as 256 logical blocks, avoid submitting such
commands.
Cc: Douglas Gilbert <dgilbert@interlog.com>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Christoph Hellwig <hch@lst.de>
Reported-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Douglas Gilbert <dgilbert@interlog.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
                                      sector_t lba, unsigned int nr_blocks,
                                      unsigned char flags)
 {
+       /* Avoid that 0 blocks gets translated into 256 blocks. */
+       if (WARN_ON_ONCE(nr_blocks == 0))
+               return BLK_STS_IOERR;
+
        if (unlikely(flags & 0x8)) {
                /*
                 * This happens only if this drive failed 10byte rw