On Mon, Aug 22 2005, Douglas Gilbert wrote:
>       if (scsicmd[0] == READ_6 || scsicmd[0] == WRITE_6) {
> -             qc->nsect = tf->nsect = scsicmd[4];
> +             if (scsicmd[4] == 0) {
> +                     /*
> +                      * For READ_6 and WRITE_6 (only)
> +                      * transfer_len==0 -> 256 blocks !!
> +                      */
> +                     if (lba48) {
> +                             tf->hob_nsect = 1;
> +                             qc->nsect = 256;
> +                     } else
> +                             return 1;

This isn't quite right, for 28-bit lba a 0 sector value means 256
sectors to transfer as well. So just make that:

        if (lba48) {
                tf->hob_nsect = 1;
                qc->nsect = 256;
        }

        /* continue */

and it should work fine. Similarly for 48-bit lba, 0 means 16^2 sectors.

-- 
Jens Axboe

-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to