]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
.27 patch
authorGreg Kroah-Hartman <gregkh@suse.de>
Tue, 1 Jun 2010 22:59:22 +0000 (15:59 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 1 Jun 2010 22:59:22 +0000 (15:59 -0700)
queue-2.6.27/libata-disable-atapi-an-by-default.patch [new file with mode: 0644]
queue-2.6.27/series [new file with mode: 0644]

diff --git a/queue-2.6.27/libata-disable-atapi-an-by-default.patch b/queue-2.6.27/libata-disable-atapi-an-by-default.patch
new file mode 100644 (file)
index 0000000..b3794ec
--- /dev/null
@@ -0,0 +1,59 @@
+From e7ecd435692ca9bde9d124be30b3a26e672ea6c2 Mon Sep 17 00:00:00 2001
+From: Tejun Heo <tj@kernel.org>
+Date: Wed, 19 May 2010 15:38:58 +0200
+Subject: libata: disable ATAPI AN by default
+
+From: Tejun Heo <tj@kernel.org>
+
+commit e7ecd435692ca9bde9d124be30b3a26e672ea6c2 upstream.
+
+There are ATAPI devices which raise AN when hit by commands issued by
+open().  This leads to infinite loop of AN -> MEDIA_CHANGE uevent ->
+udev open() to check media -> AN.
+
+Both ACS and SerialATA standards don't define in which case ATAPI
+devices are supposed to raise or not raise AN.  They both list media
+insertion event as a possible use case for ATAPI ANs but there is no
+clear description of what constitutes such events.  As such, it seems
+a bit too naive to export ANs directly to userland as MEDIA_CHANGE
+events without further verification (which should behave similarly to
+windows as it apparently is the only thing that some hardware vendors
+are testing against).
+
+This patch adds libata.atapi_an module parameter and disables ATAPI AN
+by default for now.
+
+Signed-off-by: Tejun Heo <tj@kernel.org>
+Cc: Kay Sievers <kay.sievers@vrfy.org>
+Cc: Nick Bowler <nbowler@elliptictech.com>
+Cc: David Zeuthen <david@fubar.dk>
+Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/ata/libata-core.c |    7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/drivers/ata/libata-core.c
++++ b/drivers/ata/libata-core.c
+@@ -157,6 +157,10 @@ int libata_allow_tpm = 0;
+ module_param_named(allow_tpm, libata_allow_tpm, int, 0444);
+ MODULE_PARM_DESC(allow_tpm, "Permit the use of TPM commands");
++static int atapi_an;
++module_param(atapi_an, int, 0444);
++MODULE_PARM_DESC(atapi_an, "Enable ATAPI AN media presence notification (0=0ff [default], 1=on)");
++
+ MODULE_AUTHOR("Jeff Garzik");
+ MODULE_DESCRIPTION("Library module for ATA devices");
+ MODULE_LICENSE("GPL");
+@@ -2341,7 +2345,8 @@ int ata_dev_configure(struct ata_device
+                * to enable ATAPI AN to discern between PHY status
+                * changed notifications and ATAPI ANs.
+                */
+-              if ((ap->flags & ATA_FLAG_AN) && ata_id_has_atapi_AN(id) &&
++              if (atapi_an &&
++                  (ap->flags & ATA_FLAG_AN) && ata_id_has_atapi_AN(id) &&
+                   (!sata_pmp_attached(ap) ||
+                    sata_scr_read(&ap->link, SCR_NOTIFICATION, &sntf) == 0)) {
+                       unsigned int err_mask;
diff --git a/queue-2.6.27/series b/queue-2.6.27/series
new file mode 100644 (file)
index 0000000..01c71a2
--- /dev/null
@@ -0,0 +1 @@
+libata-disable-atapi-an-by-default.patch