From: Tejun Heo <htejun@gmail.com>
To: jgarzik@pobox.com, alan@lxorguk.ukuu.org.uk, axboe@suse.de,
albertcc@tw.ibm.com, lkosewsk@gmail.com,
linux-ide@vger.kernel.org
Cc: Tejun Heo <htejun@gmail.com>
Subject: [PATCH 04/15] libata-hp: connect ATA hotplug events to SCSI hotplug
Date: Tue, 11 Apr 2006 23:14:07 +0900 [thread overview]
Message-ID: <11447648471621-git-send-email-htejun@gmail.com> (raw)
In-Reply-To: <1144764846705-git-send-email-htejun@gmail.com>
Schedule SCSI plug/unplug operations from EH with appropriate hotplug
flags and run scsi hotplug from ata_hotplug_wq on EH completion. On
host initialization, SCSI hotplug starts disabled until
ATA_HOTPLUG_RUNNING flag is set on boot probing completion. This is
to avoid running multiple SCSI plug/unplug operations simultaneously.
Signed-off-by: Tejun Heo <htejun@gmail.com>
---
drivers/scsi/libata-core.c | 3 +++
drivers/scsi/libata-eh.c | 12 ++++++++++++
include/linux/libata.h | 1 +
3 files changed, 16 insertions(+), 0 deletions(-)
dce4c2009a3abc3fa370b639feda83e09c96dc9c
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 85f0600..91a01ca 100644
--- a/drivers/scsi/libata-core.c
+++ b/drivers/scsi/libata-core.c
@@ -4896,6 +4896,7 @@ static void ata_host_init(struct ata_por
ap->last_ctl = 0xFF;
INIT_WORK(&ap->port_task, NULL, NULL);
+ INIT_WORK(&ap->hotplug_task, ata_eh_scsi_hotplug, ap);
INIT_LIST_HEAD(&ap->eh_done_q);
for (i = 0; i < ATA_MAX_DEVICES; i++)
@@ -5088,6 +5089,8 @@ int ata_device_add(const struct ata_prob
struct ata_port *ap = host_set->ports[i];
ata_scsi_scan_host(ap);
+ /* boot probe done, allow hotplugging */
+ ata_set_hotplug_flags(ap, ATA_HOTPLUG_RUNNING);
}
dev_set_drvdata(dev, host_set);
diff --git a/drivers/scsi/libata-eh.c b/drivers/scsi/libata-eh.c
index ee46221..64edf48 100644
--- a/drivers/scsi/libata-eh.c
+++ b/drivers/scsi/libata-eh.c
@@ -240,6 +240,12 @@ int ata_scsi_error(struct Scsi_Host *hos
/* bookkeeping for hotplug */
ata_clr_hotplug_flags(ap, ATA_HOTPLUG_PROBE | ATA_HOTPLUG_DID_PROBE);
+ /* schedule SCSI hotplug if requested */
+ if (ap->hotplug_flags & ATA_HOTPLUG_RUNNING &&
+ ap->hotplug_flags & (ATA_HOTPLUG_SCSI_PLUG |
+ ATA_HOTPLUG_SCSI_UNPLUG))
+ queue_work(ata_hotplug_wq, &ap->hotplug_task);
+
DPRINTK("EXIT\n");
return 0;
}
@@ -1434,6 +1440,9 @@ void ata_eh_hotplug(struct ata_port *ap)
dev->flags &= ~ATA_DFLAG_DETACH_ATA;
ata_scsi_offline_dev(ap, dev);
spin_unlock_irqrestore(&ap->host_set->lock, flags);
+
+ /* schedule SCSI unplug */
+ ata_set_hotplug_flags(ap, ATA_HOTPLUG_SCSI_UNPLUG);
}
/* probe requested? */
@@ -1530,4 +1539,7 @@ void ata_eh_scsi_hotplug(void *data)
ata_clr_hotplug_flags(ap, ATA_HOTPLUG_SCSI_PLUG);
ata_scsi_scan_host(ap);
}
+
+ /* schedule SCSI plug */
+ ata_set_hotplug_flags(ap, ATA_HOTPLUG_SCSI_PLUG);
}
diff --git a/include/linux/libata.h b/include/linux/libata.h
index b9dd793..f145f0e 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -482,6 +482,7 @@ struct ata_port {
struct list_head eh_done_q;
unsigned long hotplug_flags;
+ struct work_struct hotplug_task;
void *private_data;
};
--
1.2.4
next prev parent reply other threads:[~2006-04-11 14:14 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-11 14:14 [PATCHSET 9/9] add hotplug support Tejun Heo
2006-04-11 14:14 ` [PATCH 05/15] libata-hp: implement ata_scsi_slave_destroy() Tejun Heo
2006-04-12 5:27 ` Tejun Heo
2006-04-12 22:32 ` Jeff Garzik
2006-04-13 3:46 ` Tejun Heo
2006-04-11 14:14 ` [PATCH 02/15] libata-hp: implement ata_eh_hotplug() Tejun Heo
2006-04-11 14:14 ` [PATCH 09/15] libata-hp: activate hotplug by adding a call to ata_eh_hotplug() from EH Tejun Heo
2006-04-13 8:18 ` zhao, forrest
2006-04-13 8:45 ` Tejun Heo
2006-04-13 9:00 ` zhao, forrest
2006-04-13 9:30 ` Tejun Heo
2006-04-11 14:14 ` [PATCH 01/15] libata-hp: implement ata_eh_detach_dev() Tejun Heo
2006-04-11 14:14 ` [PATCH 07/15] libata-hp: implement transportt->user_scan Tejun Heo
2006-04-11 14:14 ` [PATCH 03/15] libata-hp: implement ata_eh_scsi_hotplug() Tejun Heo
2006-04-11 14:14 ` [PATCH 08/15] libata-hp: add hotplug hooks into regular EH Tejun Heo
2006-04-11 14:14 ` Tejun Heo [this message]
2006-04-11 14:14 ` [PATCH 06/15] libata-hp: use ata_scsi_slave_destroy() in low level drivers Tejun Heo
2006-04-11 14:14 ` [PATCH 11/15] sata_sil: add new constants in preparation for new interrupt handler Tejun Heo
2006-04-11 14:14 ` [PATCH 14/15] ahci: add hotplug support Tejun Heo
2006-04-11 14:14 ` [PATCH 12/15] sata_sil: new interrupt handler Tejun Heo
2006-04-11 14:14 ` [PATCH 13/15] sata_sil: add hotplug support Tejun Heo
2006-04-11 14:14 ` [PATCH 15/15] sata_sil24: " Tejun Heo
2006-04-11 14:14 ` [PATCH 10/15] libata-hp: skip EH reset if no device to recover and hotplug pending Tejun Heo
2006-04-12 1:49 ` [PATCHSET 9/9] add hotplug support Tejun Heo
2006-04-13 7:53 ` zhao, forrest
2006-04-13 8:49 ` Tejun Heo
2006-04-13 16:07 ` Jeff Garzik
2006-04-13 16:50 ` Tejun Heo
2006-04-27 9:29 ` Jeff Garzik
2006-04-27 10:53 ` Tejun Heo
2006-04-27 11:29 ` Jeff Garzik
2006-04-27 12:38 ` Tejun Heo
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=11447648471621-git-send-email-htejun@gmail.com \
--to=htejun@gmail.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=albertcc@tw.ibm.com \
--cc=axboe@suse.de \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.org \
--cc=lkosewsk@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.