From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Aaron Lu <aaron.lu@intel.com>
Cc: Jeff Garzik <jgarzik@pobox.com>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
Alan Stern <stern@rowland.harvard.edu>, Tejun Heo <tj@kernel.org>,
Oliver Neukum <oliver@neukum.org>, Jeff Wu <jeff.wu@amd.com>,
Aaron Lu <aaron.lwe@gmail.com>, Shane Huang <shane.huang@amd.com>,
linux-ide@vger.kernel.org, linux-pm@vger.kernel.org,
linux-scsi@vger.kernel.org, linux-acpi@vger.kernel.org
Subject: Re: [PATCH v8 10/11] scsi: sr: support (un)block events
Date: Mon, 29 Oct 2012 22:11:35 +0400 [thread overview]
Message-ID: <1351534295.3051.9.camel@dabdike> (raw)
In-Reply-To: <1351501298-3716-11-git-send-email-aaron.lu@intel.com>
On Mon, 2012-10-29 at 17:01 +0800, Aaron Lu wrote:
> 2 interfaces are added to block/unblock events for the disk sr manages.
> This is used by SATA ZPODD, when ODD is runtime powered off, the events
> poll is no longer needed so better be blocked. And once powered on,
> events poll will be unblocked.
>
> These 2 interfaces are needed here because SATA layer does not have
> access to the gendisk structure sr manages.
I'm afraid this is a nasty layering violation. You can't have a low
level driver have knowledge of a call back in an upper layer one (in
this case sr_block_events).
This is all done it looks like because of the problem of getting access
to the scsi_cd structure from libata, but it's not the right way to
solve it.
I also don't really think you need to do any blocking or unblocking. As
I said in the previous thread, just fake the events the standard tells
you to, so userspace can probe to its heart's content and you can keep
the device powered off.
James
> Signed-off-by: Aaron Lu <aaron.lu@intel.com>
> ---
> drivers/scsi/Makefile | 1 +
> drivers/scsi/sr_zpodd.c | 21 +++++++++++++++++++++
> drivers/scsi/sr_zpodd.h | 9 +++++++++
> 3 files changed, 31 insertions(+)
> create mode 100644 drivers/scsi/sr_zpodd.c
> create mode 100644 drivers/scsi/sr_zpodd.h
>
> diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile
> index 888f73a..474efe2 100644
> --- a/drivers/scsi/Makefile
> +++ b/drivers/scsi/Makefile
> @@ -177,6 +177,7 @@ sd_mod-objs := sd.o
> sd_mod-$(CONFIG_BLK_DEV_INTEGRITY) += sd_dif.o
>
> sr_mod-objs := sr.o sr_ioctl.o sr_vendor.o
> +sr_mod-$(CONFIG_SATA_ZPODD) += sr_zpodd.o
> ncr53c8xx-flags-$(CONFIG_SCSI_ZALON) \
> := -DCONFIG_NCR53C8XX_PREFETCH -DSCSI_NCR_BIG_ENDIAN \
> -DCONFIG_SCSI_NCR53C8XX_NO_WORD_TRANSFERS
> diff --git a/drivers/scsi/sr_zpodd.c b/drivers/scsi/sr_zpodd.c
> new file mode 100644
> index 0000000..0686e8c
> --- /dev/null
> +++ b/drivers/scsi/sr_zpodd.c
> @@ -0,0 +1,21 @@
> +#include <linux/module.h>
> +#include <linux/genhd.h>
> +#include <linux/cdrom.h>
> +#include "sr.h"
> +
> +bool sr_block_events(struct device *dev)
> +{
> + struct scsi_cd *cd = dev_get_drvdata(dev);
> + if (cd)
> + return disk_try_block_events(cd->disk);
> + return false;
> +}
> +EXPORT_SYMBOL(sr_block_events);
> +
> +void sr_unblock_events(struct device *dev)
> +{
> + struct scsi_cd *cd = dev_get_drvdata(dev);
> + if (cd)
> + disk_unblock_events(cd->disk);
> +}
> +EXPORT_SYMBOL(sr_unblock_events);
> diff --git a/drivers/scsi/sr_zpodd.h b/drivers/scsi/sr_zpodd.h
> new file mode 100644
> index 0000000..49c6a55
> --- /dev/null
> +++ b/drivers/scsi/sr_zpodd.h
> @@ -0,0 +1,9 @@
> +#ifndef __SR_ZPODD_H__
> +#define __SR_ZPODD_H__
> +
> +#include <linux/device.h>
> +
> +extern bool sr_block_events(struct device *dev);
> +extern void sr_unblock_events(struct device *dev);
> +
> +#endif
next prev parent reply other threads:[~2012-10-29 18:11 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-29 9:01 [PATCH v8 00/11] ZPODD Patches Aaron Lu
2012-10-29 9:01 ` [PATCH v8 01/11] scsi: sr: support runtime pm Aaron Lu
2012-10-29 9:01 ` [PATCH v8 02/11] ata: zpodd: Add CONFIG_SATA_ZPODD Aaron Lu
2012-10-29 18:11 ` James Bottomley
2012-10-30 3:19 ` Aaron Lu
2012-10-29 9:01 ` [PATCH v8 03/11] ata: zpodd: identify and init ZPODD devices Aaron Lu
2012-10-29 9:01 ` [PATCH v8 04/11] libata: acpi: move acpi notification code to sata_zpodd Aaron Lu
2012-10-29 9:01 ` [PATCH v8 05/11] libata-eh: allow defer in ata_exec_internal Aaron Lu
2012-10-29 15:20 ` Tejun Heo
2012-10-30 3:00 ` Aaron Lu
2012-10-30 3:01 ` Tejun Heo
2012-10-30 3:09 ` Aaron Lu
2012-10-31 21:52 ` Tejun Heo
2012-11-01 2:35 ` Aaron Lu
2012-11-01 16:03 ` Tejun Heo
2012-11-02 0:43 ` Aaron Lu
2012-10-29 9:01 ` [PATCH v8 06/11] ata: zpodd: check loading mechanism for ODD Aaron Lu
2012-10-29 9:01 ` [PATCH v8 07/11] libata: separate ATAPI code Aaron Lu
2012-10-29 9:01 ` [PATCH v8 08/11] ata: zpodd: check zero power ready status Aaron Lu
2012-10-29 9:01 ` [PATCH v8 09/11] block: add a new interface to block events Aaron Lu
2012-10-29 15:35 ` Tejun Heo
2012-10-30 7:04 ` Aaron Lu
2012-10-31 21:51 ` Tejun Heo
2012-11-01 6:30 ` Aaron Lu
2012-10-29 9:01 ` [PATCH v8 10/11] scsi: sr: support (un)block events Aaron Lu
2012-10-29 18:11 ` James Bottomley [this message]
2012-10-29 22:22 ` Alan Stern
2012-10-30 4:34 ` James Bottomley
2012-10-30 5:02 ` Aaron Lu
2012-10-29 9:01 ` [PATCH v8 11/11] ata: zpodd: handle power transition of ODD Aaron Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1351534295.3051.9.camel@dabdike \
--to=james.bottomley@hansenpartnership.com \
--cc=aaron.lu@intel.com \
--cc=aaron.lwe@gmail.com \
--cc=jeff.wu@amd.com \
--cc=jgarzik@pobox.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=oliver@neukum.org \
--cc=rjw@sisk.pl \
--cc=shane.huang@amd.com \
--cc=stern@rowland.harvard.edu \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).