[libata] scsi: no poll when ODD is powered off
authorAaron Lu <aaron.lu@intel.com>
Wed, 23 Jan 2013 07:09:32 +0000 (15:09 +0800)
committerJeff Garzik <jgarzik@redhat.com>
Fri, 25 Jan 2013 20:36:43 +0000 (15:36 -0500)
commit6f4c827e68a78731c6c75df69bf7b75b029ec70c
tree5113f12fc6fd5c7e2769aa19c2a1bb59ea647652
parent6c7f1e2f12f6f37ddda01180c9e5c407eccce616
[libata] scsi: no poll when ODD is powered off

When the ODD is powered off, any action the user did to the ODD that
would generate a media event will trigger an ACPI interrupt, so the
poll for media event is no longer necessary. And the poll will also
cause a runtime status change, which will stop the ODD from staying in
powered off state, so the poll should better be stopped.

But since we don't have access to the gendisk structure in LLDs, here
comes the disk_events_disable_depth for scsi device. This field is a
hint set by LLDs to convey information to upper layer drivers. A value
of 0 means media poll is necessary for the device, while values above 0
means media poll is not needed and should better be skipped. So we can
increase its value when we are to power off the ODD in ATA layer and
decrease its value when the ODD is powered on, effectively silence the
media events poll.

Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/libata-zpodd.c
drivers/scsi/scsi_lib.c
drivers/scsi/sr.c
include/scsi/scsi_device.h