From: Greg Kroah-Hartman Date: Tue, 1 Jun 2010 22:59:22 +0000 (-0700) Subject: .27 patch X-Git-Tag: v2.6.31.14~52 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1659ce871d51162149e9e60c80a5e7172877abb0;p=thirdparty%2Fkernel%2Fstable-queue.git .27 patch --- 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 index 00000000000..b3794ec5ea2 --- /dev/null +++ b/queue-2.6.27/libata-disable-atapi-an-by-default.patch @@ -0,0 +1,59 @@ +From e7ecd435692ca9bde9d124be30b3a26e672ea6c2 Mon Sep 17 00:00:00 2001 +From: Tejun Heo +Date: Wed, 19 May 2010 15:38:58 +0200 +Subject: libata: disable ATAPI AN by default + +From: Tejun Heo + +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 +Cc: Kay Sievers +Cc: Nick Bowler +Cc: David Zeuthen +Signed-off-by: Jeff Garzik +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..01c71a2a624 --- /dev/null +++ b/queue-2.6.27/series @@ -0,0 +1 @@ +libata-disable-atapi-an-by-default.patch