• Tejun Heo's avatar
    libata-scsi: improve rbuf handling for simulated commands · 87340e98
    Tejun Heo authored
    Buffer length handling in simulated commands is error-prone and full
    of bugs.  There are a number of places where necessary length checks
    are missing and if the output buffer is passed in as sglist, nothing
    works.
    
    This patch adds a static buffer ata_scsi_rbuf which is sufficiently
    large to handle the larges output from simulated commands (4k
    currently), let all simulte functions write to the buffer and removes
    all length checks as we know that there always is enough buffer space.
    Copying in (for ATAPI inquiry fix up) and out are handled by
    sg_copy_to/from_buffer() behind ata_scsi_rbuf_get/put() interface
    which handles sglist properly.
    
    This patch is inspired from buffer length check fix patch from Petr
    Vandrovec.
    
    Updated to use sg_copy_to/from_buffer() as suggested by FUJITA
    Tomonori.
    Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
    Cc: Petr Vandrovec <petr@vmware.com>
    Cc: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
    Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
    87340e98
libata-scsi.c 89 KB