]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/ata/libata-core.c
libata-core: Allow translation setting to fail
[mirror_ubuntu-artful-kernel.git] / drivers / ata / libata-core.c
index 9bfe329fb579a3e4ffd20072c23ae5bba7b5e0d9..9cf46bf8c8d2c4e3c1511fe2a2c66efd5eb3642e 100644 (file)
@@ -3700,7 +3700,8 @@ int ata_dev_revalidate(struct ata_device *dev, unsigned int readid_flags)
                goto fail;
 
        /* verify n_sectors hasn't changed */
-       if (dev->class == ATA_DEV_ATA && dev->n_sectors != n_sectors) {
+       if (dev->class == ATA_DEV_ATA && n_sectors &&
+           dev->n_sectors != n_sectors) {
                ata_dev_printk(dev, KERN_INFO, "n_sectors mismatch "
                               "%llu != %llu\n",
                               (unsigned long long)n_sectors,
@@ -3984,6 +3985,11 @@ static unsigned int ata_dev_init_params(struct ata_device *dev,
        tf.device |= (heads - 1) & 0x0f; /* max head = num. of heads - 1 */
 
        err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0);
+       /* A clean abort indicates an original or just out of spec drive
+          and we should continue as we issue the setup based on the
+          drive reported working geometry */
+       if (err_mask == AC_ERR_DEV && (tf.feature & ATA_ABORTED))
+               err_mask = 0;
 
        DPRINTK("EXIT, err_mask=%x\n", err_mask);
        return err_mask;