diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-07 15:42:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-07 15:42:58 -0400 |
commit | 3b7433b8a8a83c87972065b1852b7dcae691e464 (patch) | |
tree | 93fa2c003f8baef5ab0733b53bac77961ed5240c /drivers/ata | |
parent | 4a386c3e177ca2fbc70c9283d0b46537844763a0 (diff) | |
parent | 6ee0578b4daaea01c96b172c6aacca43fd9807a6 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (55 commits)
workqueue: mark init_workqueues() as early_initcall()
workqueue: explain for_each_*cwq_cpu() iterators
fscache: fix build on !CONFIG_SYSCTL
slow-work: kill it
gfs2: use workqueue instead of slow-work
drm: use workqueue instead of slow-work
cifs: use workqueue instead of slow-work
fscache: drop references to slow-work
fscache: convert operation to use workqueue instead of slow-work
fscache: convert object to use workqueue instead of slow-work
workqueue: fix how cpu number is stored in work->data
workqueue: fix mayday_mask handling on UP
workqueue: fix build problem on !CONFIG_SMP
workqueue: fix locking in retry path of maybe_create_worker()
async: use workqueue for worker pool
workqueue: remove WQ_SINGLE_CPU and use WQ_UNBOUND instead
workqueue: implement unbound workqueue
workqueue: prepare for WQ_UNBOUND implementation
libata: take advantage of cmwq and remove concurrency limitations
workqueue: fix worker management invocation without pending works
...
Fixed up conflicts in fs/cifs/* as per Tejun. Other trivial conflicts in
include/linux/workqueue.h, kernel/trace/Kconfig and kernel/workqueue.c
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/libata-core.c | 20 | ||||
-rw-r--r-- | drivers/ata/libata-eh.c | 4 | ||||
-rw-r--r-- | drivers/ata/libata-scsi.c | 10 | ||||
-rw-r--r-- | drivers/ata/libata-sff.c | 9 | ||||
-rw-r--r-- | drivers/ata/libata.h | 1 |
5 files changed, 14 insertions, 30 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index a0a4d6968400..4972fdf4bd31 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -98,8 +98,6 @@ static unsigned long ata_dev_blacklisted(const struct ata_device *dev); | |||
98 | 98 | ||
99 | unsigned int ata_print_id = 1; | 99 | unsigned int ata_print_id = 1; |
100 | 100 | ||
101 | struct workqueue_struct *ata_aux_wq; | ||
102 | |||
103 | struct ata_force_param { | 101 | struct ata_force_param { |
104 | const char *name; | 102 | const char *name; |
105 | unsigned int cbl; | 103 | unsigned int cbl; |
@@ -5594,6 +5592,7 @@ struct ata_port *ata_port_alloc(struct ata_host *host) | |||
5594 | ap->msg_enable = ATA_MSG_DRV | ATA_MSG_ERR | ATA_MSG_WARN; | 5592 | ap->msg_enable = ATA_MSG_DRV | ATA_MSG_ERR | ATA_MSG_WARN; |
5595 | #endif | 5593 | #endif |
5596 | 5594 | ||
5595 | mutex_init(&ap->scsi_scan_mutex); | ||
5597 | INIT_DELAYED_WORK(&ap->hotplug_task, ata_scsi_hotplug); | 5596 | INIT_DELAYED_WORK(&ap->hotplug_task, ata_scsi_hotplug); |
5598 | INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan); | 5597 | INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan); |
5599 | INIT_LIST_HEAD(&ap->eh_done_q); | 5598 | INIT_LIST_HEAD(&ap->eh_done_q); |
@@ -6532,29 +6531,20 @@ static int __init ata_init(void) | |||
6532 | 6531 | ||
6533 | ata_parse_force_param(); | 6532 | ata_parse_force_param(); |
6534 | 6533 | ||
6535 | ata_aux_wq = create_singlethread_workqueue("ata_aux"); | ||
6536 | if (!ata_aux_wq) | ||
6537 | goto fail; | ||
6538 | |||
6539 | rc = ata_sff_init(); | 6534 | rc = ata_sff_init(); |
6540 | if (rc) | 6535 | if (rc) { |
6541 | goto fail; | 6536 | kfree(ata_force_tbl); |
6537 | return rc; | ||
6538 | } | ||
6542 | 6539 | ||
6543 | printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n"); | 6540 | printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n"); |
6544 | return 0; | 6541 | return 0; |
6545 | |||
6546 | fail: | ||
6547 | kfree(ata_force_tbl); | ||
6548 | if (ata_aux_wq) | ||
6549 | destroy_workqueue(ata_aux_wq); | ||
6550 | return rc; | ||
6551 | } | 6542 | } |
6552 | 6543 | ||
6553 | static void __exit ata_exit(void) | 6544 | static void __exit ata_exit(void) |
6554 | { | 6545 | { |
6555 | ata_sff_exit(); | 6546 | ata_sff_exit(); |
6556 | kfree(ata_force_tbl); | 6547 | kfree(ata_force_tbl); |
6557 | destroy_workqueue(ata_aux_wq); | ||
6558 | } | 6548 | } |
6559 | 6549 | ||
6560 | subsys_initcall(ata_init); | 6550 | subsys_initcall(ata_init); |
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 697474b625b7..c9ae299b8342 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -727,7 +727,7 @@ void ata_scsi_error(struct Scsi_Host *host) | |||
727 | if (ap->pflags & ATA_PFLAG_LOADING) | 727 | if (ap->pflags & ATA_PFLAG_LOADING) |
728 | ap->pflags &= ~ATA_PFLAG_LOADING; | 728 | ap->pflags &= ~ATA_PFLAG_LOADING; |
729 | else if (ap->pflags & ATA_PFLAG_SCSI_HOTPLUG) | 729 | else if (ap->pflags & ATA_PFLAG_SCSI_HOTPLUG) |
730 | queue_delayed_work(ata_aux_wq, &ap->hotplug_task, 0); | 730 | schedule_delayed_work(&ap->hotplug_task, 0); |
731 | 731 | ||
732 | if (ap->pflags & ATA_PFLAG_RECOVERED) | 732 | if (ap->pflags & ATA_PFLAG_RECOVERED) |
733 | ata_port_printk(ap, KERN_INFO, "EH complete\n"); | 733 | ata_port_printk(ap, KERN_INFO, "EH complete\n"); |
@@ -2945,7 +2945,7 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link, | |||
2945 | ehc->i.flags |= ATA_EHI_SETMODE; | 2945 | ehc->i.flags |= ATA_EHI_SETMODE; |
2946 | 2946 | ||
2947 | /* schedule the scsi_rescan_device() here */ | 2947 | /* schedule the scsi_rescan_device() here */ |
2948 | queue_work(ata_aux_wq, &(ap->scsi_rescan_task)); | 2948 | schedule_work(&(ap->scsi_rescan_task)); |
2949 | } else if (dev->class == ATA_DEV_UNKNOWN && | 2949 | } else if (dev->class == ATA_DEV_UNKNOWN && |
2950 | ehc->tries[dev->devno] && | 2950 | ehc->tries[dev->devno] && |
2951 | ata_class_enabled(ehc->classes[dev->devno])) { | 2951 | ata_class_enabled(ehc->classes[dev->devno])) { |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index a54273d2c3c6..d75c9c479d1a 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -3435,7 +3435,7 @@ void ata_scsi_scan_host(struct ata_port *ap, int sync) | |||
3435 | " switching to async\n"); | 3435 | " switching to async\n"); |
3436 | } | 3436 | } |
3437 | 3437 | ||
3438 | queue_delayed_work(ata_aux_wq, &ap->hotplug_task, | 3438 | queue_delayed_work(system_long_wq, &ap->hotplug_task, |
3439 | round_jiffies_relative(HZ)); | 3439 | round_jiffies_relative(HZ)); |
3440 | } | 3440 | } |
3441 | 3441 | ||
@@ -3582,6 +3582,7 @@ void ata_scsi_hotplug(struct work_struct *work) | |||
3582 | } | 3582 | } |
3583 | 3583 | ||
3584 | DPRINTK("ENTER\n"); | 3584 | DPRINTK("ENTER\n"); |
3585 | mutex_lock(&ap->scsi_scan_mutex); | ||
3585 | 3586 | ||
3586 | /* Unplug detached devices. We cannot use link iterator here | 3587 | /* Unplug detached devices. We cannot use link iterator here |
3587 | * because PMP links have to be scanned even if PMP is | 3588 | * because PMP links have to be scanned even if PMP is |
@@ -3595,6 +3596,7 @@ void ata_scsi_hotplug(struct work_struct *work) | |||
3595 | /* scan for new ones */ | 3596 | /* scan for new ones */ |
3596 | ata_scsi_scan_host(ap, 0); | 3597 | ata_scsi_scan_host(ap, 0); |
3597 | 3598 | ||
3599 | mutex_unlock(&ap->scsi_scan_mutex); | ||
3598 | DPRINTK("EXIT\n"); | 3600 | DPRINTK("EXIT\n"); |
3599 | } | 3601 | } |
3600 | 3602 | ||
@@ -3673,9 +3675,7 @@ static int ata_scsi_user_scan(struct Scsi_Host *shost, unsigned int channel, | |||
3673 | * @work: Pointer to ATA port to perform scsi_rescan_device() | 3675 | * @work: Pointer to ATA port to perform scsi_rescan_device() |
3674 | * | 3676 | * |
3675 | * After ATA pass thru (SAT) commands are executed successfully, | 3677 | * After ATA pass thru (SAT) commands are executed successfully, |
3676 | * libata need to propagate the changes to SCSI layer. This | 3678 | * libata need to propagate the changes to SCSI layer. |
3677 | * function must be executed from ata_aux_wq such that sdev | ||
3678 | * attach/detach don't race with rescan. | ||
3679 | * | 3679 | * |
3680 | * LOCKING: | 3680 | * LOCKING: |
3681 | * Kernel thread context (may sleep). | 3681 | * Kernel thread context (may sleep). |
@@ -3688,6 +3688,7 @@ void ata_scsi_dev_rescan(struct work_struct *work) | |||
3688 | struct ata_device *dev; | 3688 | struct ata_device *dev; |
3689 | unsigned long flags; | 3689 | unsigned long flags; |
3690 | 3690 | ||
3691 | mutex_lock(&ap->scsi_scan_mutex); | ||
3691 | spin_lock_irqsave(ap->lock, flags); | 3692 | spin_lock_irqsave(ap->lock, flags); |
3692 | 3693 | ||
3693 | ata_for_each_link(link, ap, EDGE) { | 3694 | ata_for_each_link(link, ap, EDGE) { |
@@ -3707,6 +3708,7 @@ void ata_scsi_dev_rescan(struct work_struct *work) | |||
3707 | } | 3708 | } |
3708 | 3709 | ||
3709 | spin_unlock_irqrestore(ap->lock, flags); | 3710 | spin_unlock_irqrestore(ap->lock, flags); |
3711 | mutex_unlock(&ap->scsi_scan_mutex); | ||
3710 | } | 3712 | } |
3711 | 3713 | ||
3712 | /** | 3714 | /** |
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index efa4a18cfb9d..674c1436491f 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
@@ -3318,14 +3318,7 @@ void ata_sff_port_init(struct ata_port *ap) | |||
3318 | 3318 | ||
3319 | int __init ata_sff_init(void) | 3319 | int __init ata_sff_init(void) |
3320 | { | 3320 | { |
3321 | /* | 3321 | ata_sff_wq = alloc_workqueue("ata_sff", WQ_RESCUER, WQ_MAX_ACTIVE); |
3322 | * FIXME: In UP case, there is only one workqueue thread and if you | ||
3323 | * have more than one PIO device, latency is bloody awful, with | ||
3324 | * occasional multi-second "hiccups" as one PIO device waits for | ||
3325 | * another. It's an ugly wart that users DO occasionally complain | ||
3326 | * about; luckily most users have at most one PIO polled device. | ||
3327 | */ | ||
3328 | ata_sff_wq = create_workqueue("ata_sff"); | ||
3329 | if (!ata_sff_wq) | 3322 | if (!ata_sff_wq) |
3330 | return -ENOMEM; | 3323 | return -ENOMEM; |
3331 | 3324 | ||
diff --git a/drivers/ata/libata.h b/drivers/ata/libata.h index 4b84ed60324a..9ce1ecc63e39 100644 --- a/drivers/ata/libata.h +++ b/drivers/ata/libata.h | |||
@@ -54,7 +54,6 @@ enum { | |||
54 | }; | 54 | }; |
55 | 55 | ||
56 | extern unsigned int ata_print_id; | 56 | extern unsigned int ata_print_id; |
57 | extern struct workqueue_struct *ata_aux_wq; | ||
58 | extern int atapi_passthru16; | 57 | extern int atapi_passthru16; |
59 | extern int libata_fua; | 58 | extern int libata_fua; |
60 | extern int libata_noacpi; | 59 | extern int libata_noacpi; |