Merge branch 'upstream'
authorJeff Garzik <jgarzik@pobox.com>
Wed, 9 Nov 2005 06:37:34 +0000 (01:37 -0500)
committerJeff Garzik <jgarzik@pobox.com>
Wed, 9 Nov 2005 06:37:34 +0000 (01:37 -0500)
1  2 
drivers/scsi/libata-scsi.c

index 0dc5503633a3b41385da5e6333e6ecdfb98c2072,bb30fcdc929763d767ad369267207dff7a624a53..d5c4ae19b9061460f04da4060532a3d0bdbd5303
@@@ -37,9 -37,9 +37,9 @@@
  #include <linux/blkdev.h>
  #include <linux/spinlock.h>
  #include <scsi/scsi.h>
- #include "scsi.h"
  #include <scsi/scsi_host.h>
  #include <scsi/scsi_device.h>
+ #include <scsi/scsi_request.h>
  #include <linux/libata.h>
  #include <linux/hdreg.h>
  #include <asm/uaccess.h>
@@@ -131,7 -131,7 +131,7 @@@ int ata_std_bios_param(struct scsi_devi
  
  /**
   *    ata_cmd_ioctl - Handler for HDIO_DRIVE_CMD ioctl
-  *    @dev: Device to whom we are issuing command
+  *    @scsidev: Device to which we are issuing command
   *    @arg: User provided data for issuing command
   *
   *    LOCKING:
@@@ -217,7 -217,7 +217,7 @@@ error
  
  /**
   *    ata_task_ioctl - Handler for HDIO_DRIVE_TASK ioctl
-  *    @dev: Device to whom we are issuing command
+  *    @scsidev: Device to which we are issuing command
   *    @arg: User provided data for issuing command
   *
   *    LOCKING:
@@@ -416,6 -416,7 +416,7 @@@ void ata_dump_status(unsigned id, struc
  
  /**
   *    ata_to_sense_error - convert ATA error to SCSI error
+  *    @id: ATA device number
   *    @drv_stat: value contained in ATA status register
   *    @drv_err: value contained in ATA error register
   *    @sk: the sense key we'll fill out
@@@ -986,13 -987,9 +987,13 @@@ static unsigned int ata_scsi_verify_xla
        if (dev->flags & ATA_DFLAG_LBA) {
                tf->flags |= ATA_TFLAG_LBA;
  
 -              if (dev->flags & ATA_DFLAG_LBA48) {
 -                      if (n_block > (64 * 1024))
 -                              goto invalid_fld;
 +              if (lba_28_ok(block, n_block)) {
 +                      /* use LBA28 */
 +                      tf->command = ATA_CMD_VERIFY;
 +                      tf->device |= (block >> 24) & 0xf;
 +              } else if (lba_48_ok(block, n_block)) {
 +                      if (!(dev->flags & ATA_DFLAG_LBA48))
 +                              goto out_of_range;
  
                        /* use LBA48 */
                        tf->flags |= ATA_TFLAG_LBA48;
                        tf->hob_lbah = (block >> 40) & 0xff;
                        tf->hob_lbam = (block >> 32) & 0xff;
                        tf->hob_lbal = (block >> 24) & 0xff;
 -              } else {
 -                      if (n_block > 256)
 -                              goto invalid_fld;
 -
 -                      /* use LBA28 */
 -                      tf->command = ATA_CMD_VERIFY;
 -
 -                      tf->device |= (block >> 24) & 0xf;
 -              }
 +              } else
 +                      /* request too large even for LBA48 */
 +                      goto out_of_range;
  
                tf->nsect = n_block & 0xff;
  
                /* CHS */
                u32 sect, head, cyl, track;
  
 -              if (n_block > 256)
 -                      goto invalid_fld;
 +              if (!lba_28_ok(block, n_block))
 +                      goto out_of_range;
  
                /* Convert LBA to CHS */
                track = (u32)block / dev->sectors;
@@@ -1132,11 -1135,9 +1133,11 @@@ static unsigned int ata_scsi_rw_xlat(st
        if (dev->flags & ATA_DFLAG_LBA) {
                tf->flags |= ATA_TFLAG_LBA;
  
 -              if (dev->flags & ATA_DFLAG_LBA48) {
 -                      /* The request -may- be too large for LBA48. */
 -                      if ((block >> 48) || (n_block > 65536))
 +              if (lba_28_ok(block, n_block)) {
 +                      /* use LBA28 */
 +                      tf->device |= (block >> 24) & 0xf;
 +              } else if (lba_48_ok(block, n_block)) {
 +                      if (!(dev->flags & ATA_DFLAG_LBA48))
                                goto out_of_range;
  
                        /* use LBA48 */
                        tf->hob_lbah = (block >> 40) & 0xff;
                        tf->hob_lbam = (block >> 32) & 0xff;
                        tf->hob_lbal = (block >> 24) & 0xff;
 -              } else { 
 -                      /* use LBA28 */
 -
 -                      /* The request -may- be too large for LBA28. */
 -                      if ((block >> 28) || (n_block > 256))
 -                              goto out_of_range;
 -
 -                      tf->device |= (block >> 24) & 0xf;
 -              }
 +              } else
 +                      /* request too large even for LBA48 */
 +                      goto out_of_range;
  
                ata_rwcmd_protocol(qc);
  
                u32 sect, head, cyl, track;
  
                /* The request -may- be too large for CHS addressing. */
 -              if ((block >> 28) || (n_block > 256))
 +              if (!lba_28_ok(block, n_block))
                        goto out_of_range;
  
                ata_rwcmd_protocol(qc);
@@@ -2225,7 -2232,7 +2226,7 @@@ ata_scsi_map_proto(u8 byte1
  /**
   *    ata_scsi_pass_thru - convert ATA pass-thru CDB to taskfile
   *    @qc: command structure to be initialized
-  *    @cmd: SCSI command to convert
+  *    @scsicmd: SCSI command to convert
   *
   *    Handles either 12 or 16-byte versions of the CDB.
   *