public inbox for linux-ide@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ata: libata-core: relax checks in ata_read_log_directory()
@ 2025-10-09 10:46 Damien Le Moal
  2025-10-09 12:16 ` Niklas Cassel
  2025-10-13  7:31 ` Niklas Cassel
  0 siblings, 2 replies; 3+ messages in thread
From: Damien Le Moal @ 2025-10-09 10:46 UTC (permalink / raw)
  To: linux-ide, Niklas Cassel

Commit 6d4405b16d37 ("ata: libata-core: Cache the general purpose log
directory") introduced caching of a device general purpose log directory
to avoid repeated access to this log page during device scan. This
change also added a check on this log page to verify that the log page
version is 0x0001 as mandated by the ACS specifications.

And it turns out that some devices do not bother reporting this version,
instead reporting a version 0, resulting in error messages such as:

ata6.00: Invalid log directory version 0x0000

and to the device being marked as not supporting the general purpose log
directory log page.

Since before commit 6d4405b16d37 the log page version check did not
exist and things were still working correctly for these devices, relax
ata_read_log_directory() version check and only warn about the invalid
log page version number without disabling access to the log directory
page.

Fixes: 6d4405b16d37 ("ata: libata-core: Cache the general purpose log directory")
Cc: stable@vger.kernel.org
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220635
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
---
 drivers/ata/libata-core.c | 11 ++++-------
 include/linux/libata.h    |  6 ++++++
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index ff53f5f029b4..2a210719c4ce 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -2174,13 +2174,10 @@ static int ata_read_log_directory(struct ata_device *dev)
 	}
 
 	version = get_unaligned_le16(&dev->gp_log_dir[0]);
-	if (version != 0x0001) {
-		ata_dev_err(dev, "Invalid log directory version 0x%04x\n",
-			    version);
-		ata_clear_log_directory(dev);
-		dev->quirks |= ATA_QUIRK_NO_LOG_DIR;
-		return -EINVAL;
-	}
+	if (version != 0x0001)
+		ata_dev_warn_once(dev,
+				  "Invalid log directory version 0x%04x\n",
+				  version);
 
 	return 0;
 }
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 21de0935775d..7a98de1cc995 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1594,6 +1594,12 @@ do {								\
 #define ata_dev_dbg(dev, fmt, ...)				\
 	ata_dev_printk(debug, dev, fmt, ##__VA_ARGS__)
 
+#define ata_dev_warn_once(dev, fmt, ...)			\
+	pr_warn_once("ata%u.%02u: " fmt,			\
+		     (dev)->link->ap->print_id,			\
+		     (dev)->link->pmp + (dev)->devno,		\
+		     ##__VA_ARGS__)
+
 static inline void ata_print_version_once(const struct device *dev,
 					  const char *version)
 {
-- 
2.51.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] ata: libata-core: relax checks in ata_read_log_directory()
  2025-10-09 10:46 [PATCH] ata: libata-core: relax checks in ata_read_log_directory() Damien Le Moal
@ 2025-10-09 12:16 ` Niklas Cassel
  2025-10-13  7:31 ` Niklas Cassel
  1 sibling, 0 replies; 3+ messages in thread
From: Niklas Cassel @ 2025-10-09 12:16 UTC (permalink / raw)
  To: Damien Le Moal; +Cc: linux-ide

On Thu, Oct 09, 2025 at 07:46:00PM +0900, Damien Le Moal wrote:
> Commit 6d4405b16d37 ("ata: libata-core: Cache the general purpose log
> directory") introduced caching of a device general purpose log directory
> to avoid repeated access to this log page during device scan. This
> change also added a check on this log page to verify that the log page
> version is 0x0001 as mandated by the ACS specifications.
> 
> And it turns out that some devices do not bother reporting this version,
> instead reporting a version 0, resulting in error messages such as:
> 
> ata6.00: Invalid log directory version 0x0000
> 
> and to the device being marked as not supporting the general purpose log
> directory log page.
> 
> Since before commit 6d4405b16d37 the log page version check did not
> exist and things were still working correctly for these devices, relax
> ata_read_log_directory() version check and only warn about the invalid
> log page version number without disabling access to the log directory
> page.
> 
> Fixes: 6d4405b16d37 ("ata: libata-core: Cache the general purpose log directory")
> Cc: stable@vger.kernel.org
> Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220635
> Signed-off-by: Damien Le Moal <dlemoal@kernel.org>

Looks good, will queue up after -rc1.


Kind regards,
Niklas

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] ata: libata-core: relax checks in ata_read_log_directory()
  2025-10-09 10:46 [PATCH] ata: libata-core: relax checks in ata_read_log_directory() Damien Le Moal
  2025-10-09 12:16 ` Niklas Cassel
@ 2025-10-13  7:31 ` Niklas Cassel
  1 sibling, 0 replies; 3+ messages in thread
From: Niklas Cassel @ 2025-10-13  7:31 UTC (permalink / raw)
  To: linux-ide, Damien Le Moal

On Thu, 09 Oct 2025 19:46:00 +0900, Damien Le Moal wrote:
> Commit 6d4405b16d37 ("ata: libata-core: Cache the general purpose log
> directory") introduced caching of a device general purpose log directory
> to avoid repeated access to this log page during device scan. This
> change also added a check on this log page to verify that the log page
> version is 0x0001 as mandated by the ACS specifications.
> 
> And it turns out that some devices do not bother reporting this version,
> instead reporting a version 0, resulting in error messages such as:
> 
> [...]

Applied to libata/linux.git (for-6.18-fixes), thanks!

[1/1] ata: libata-core: relax checks in ata_read_log_directory()
      https://git.kernel.org/libata/linux/c/12d724f2

Kind regards,
Niklas


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-10-13  7:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-10-09 10:46 [PATCH] ata: libata-core: relax checks in ata_read_log_directory() Damien Le Moal
2025-10-09 12:16 ` Niklas Cassel
2025-10-13  7:31 ` Niklas Cassel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox