summaryrefslogtreecommitdiffstats
path: root/kernel/drivers/ata/libata-eh.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/drivers/ata/libata-eh.c')
-rw-r--r--kernel/drivers/ata/libata-eh.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/drivers/ata/libata-eh.c b/kernel/drivers/ata/libata-eh.c
index cb0508af1..961acc788 100644
--- a/kernel/drivers/ata/libata-eh.c
+++ b/kernel/drivers/ata/libata-eh.c
@@ -1505,12 +1505,20 @@ static const char *ata_err_string(unsigned int err_mask)
unsigned int ata_read_log_page(struct ata_device *dev, u8 log,
u8 page, void *buf, unsigned int sectors)
{
+ unsigned long ap_flags = dev->link->ap->flags;
struct ata_taskfile tf;
unsigned int err_mask;
bool dma = false;
DPRINTK("read log page - log 0x%x, page 0x%x\n", log, page);
+ /*
+ * Return error without actually issuing the command on controllers
+ * which e.g. lockup on a read log page.
+ */
+ if (ap_flags & ATA_FLAG_NO_LOG_PAGE)
+ return AC_ERR_DEV;
+
retry:
ata_tf_init(dev, &tf);
if (dev->dma_mode && ata_id_has_read_log_dma_ext(dev->id) &&