From f72ce3d8772fc244f7ed60b3d332542d57be8a30 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Mon, 12 Jun 2006 23:05:38 +0900 Subject: [PATCH] --- yaml --- r: 29521 b: refs/heads/master c: f0eb62b81dd16bfc4034916418c3406ba20011e1 h: refs/heads/master i: 29519: 3fe4e198b7e9d10953a9d43a3cd820cc571b55ed v: v3 --- [refs] | 2 +- trunk/drivers/scsi/libata-bmdma.c | 15 +++++++++++++-- trunk/drivers/scsi/libata-core.c | 4 ++++ trunk/include/linux/libata.h | 3 ++- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index d50af94b7db9..ab33166183e3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d01712698c7c52bc71f41192e864dccc90a1217d +refs/heads/master: f0eb62b81dd16bfc4034916418c3406ba20011e1 diff --git a/trunk/drivers/scsi/libata-bmdma.c b/trunk/drivers/scsi/libata-bmdma.c index 4bc05371737c..13fab97c840e 100644 --- a/trunk/drivers/scsi/libata-bmdma.c +++ b/trunk/drivers/scsi/libata-bmdma.c @@ -1076,10 +1076,21 @@ int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info, /* FIXME: check ata_device_add return */ if (legacy_mode) { - if (legacy_mode & (1 << 0)) + struct device *dev = &pdev->dev; + struct ata_host_set *host_set = NULL; + + if (legacy_mode & (1 << 0)) { ata_device_add(probe_ent); - if (legacy_mode & (1 << 1)) + host_set = dev_get_drvdata(dev); + } + + if (legacy_mode & (1 << 1)) { ata_device_add(probe_ent2); + if (host_set) { + host_set->next = dev_get_drvdata(dev); + dev_set_drvdata(dev, host_set); + } + } } else ata_device_add(probe_ent); diff --git a/trunk/drivers/scsi/libata-core.c b/trunk/drivers/scsi/libata-core.c index 014855e5a43a..d73cb3672d6a 100644 --- a/trunk/drivers/scsi/libata-core.c +++ b/trunk/drivers/scsi/libata-core.c @@ -5621,8 +5621,12 @@ void ata_pci_remove_one (struct pci_dev *pdev) { struct device *dev = pci_dev_to_dev(pdev); struct ata_host_set *host_set = dev_get_drvdata(dev); + struct ata_host_set *host_set2 = host_set->next; ata_host_set_remove(host_set); + if (host_set2) + ata_host_set_remove(host_set2); + pci_release_regions(pdev); pci_disable_device(pdev); dev_set_drvdata(dev, NULL); diff --git a/trunk/include/linux/libata.h b/trunk/include/linux/libata.h index 61eea5795d5a..f03b8664af11 100644 --- a/trunk/include/linux/libata.h +++ b/trunk/include/linux/libata.h @@ -356,7 +356,8 @@ struct ata_host_set { unsigned long flags; int simplex_claimed; /* Keep seperate in case we ever need to do this locked */ - struct ata_port * ports[0]; + struct ata_host_set *next; /* for legacy mode */ + struct ata_port *ports[0]; }; struct ata_queued_cmd {