|
@@ -709,7 +709,13 @@ u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev)
|
|
|
head = tf->device & 0xf;
|
|
|
sect = tf->lbal;
|
|
|
|
|
|
- block = (cyl * dev->heads + head) * dev->sectors + sect;
|
|
|
+ if (!sect) {
|
|
|
+ ata_dev_printk(dev, KERN_WARNING, "device reported "
|
|
|
+ "invalid CHS sector 0\n");
|
|
|
+ sect = 1; /* oh well */
|
|
|
+ }
|
|
|
+
|
|
|
+ block = (cyl * dev->heads + head) * dev->sectors + sect - 1;
|
|
|
}
|
|
|
|
|
|
return block;
|