libata: fix n_sectors failure handling during revalidation
authorTejun Heo <htejun@gmail.com>
Wed, 15 Aug 2007 18:02:22 +0000 (03:02 +0900)
committerJeff Garzik <jeff@garzik.org>
Thu, 23 Aug 2007 09:23:14 +0000 (05:23 -0400)
If revalidation fails because device has different n_sectors after
configuration the original n_sectors should be restored before failing
revalidation.  Without this fix, n_sectors difference will incorrectly
and silently pass revalidation when revalidation is retried.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Acked-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/libata-core.c

index 99d4fbffb0dfd574acd2f280c960895548254791..9bfe329fb579a3e4ffd20072c23ae5bba7b5e0d9 100644 (file)
@@ -3705,6 +3705,10 @@ int ata_dev_revalidate(struct ata_device *dev, unsigned int readid_flags)
                               "%llu != %llu\n",
                               (unsigned long long)n_sectors,
                               (unsigned long long)dev->n_sectors);
+
+               /* restore original n_sectors */
+               dev->n_sectors = n_sectors;
+
                rc = -ENODEV;
                goto fail;
        }