* [PATCH 01/12] libata: allocate ap separately from shost
2007-03-09 11:15 [PATCHSET] libata: implement new initialization model, take #3 Tejun Heo
@ 2007-03-09 11:15 ` Tejun Heo
2007-03-09 15:00 ` Jeff Garzik
0 siblings, 1 reply; 4+ messages in thread
From: Tejun Heo @ 2007-03-09 11:15 UTC (permalink / raw)
To: jeff, alan, linux-ide; +Cc: Tejun Heo
Don't embed ap inside shost. Allocate it separately and point it back
from shosts's hostdata. This makes port allocation more flexible and
allows regular ATA and SAS share host alloc/init paths.
Signed-off-by: Tejun Heo <htejun@gmail.com>
---
drivers/ata/libata-core.c | 15 +++++++++++----
include/linux/libata.h | 2 +-
2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 6e124bd..fab488c 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5646,14 +5646,17 @@ static struct ata_port * ata_port_add(const struct ata_probe_ent *ent,
return NULL;
}
- shost = scsi_host_alloc(ent->sht, sizeof(struct ata_port));
+ ap = kzalloc(sizeof(struct ata_port), GFP_KERNEL);
+ if (!ap)
+ return NULL;
+
+ shost = scsi_host_alloc(ent->sht, sizeof(struct ata_port *));
if (!shost)
return NULL;
+ *(struct ata_port **)&shost->hostdata[0] = ap;
shost->transportt = &ata_scsi_transport_template;
- ap = ata_shost_to_port(shost);
-
ata_port_init(ap, host, ent, port_no);
ata_port_init_shost(ap, shost);
@@ -5678,9 +5681,13 @@ static void ata_host_release(struct device *gendev, void *res)
for (i = 0; i < host->n_ports; i++) {
struct ata_port *ap = host->ports[i];
- if (ap)
+ if (!ap)
+ continue;
+
+ if (ap->scsi_host)
scsi_host_put(ap->scsi_host);
+ kfree(ap);
host->ports[i] = NULL;
}
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 911ac4e..cfdc617 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1221,7 +1221,7 @@ static inline void ata_pad_free(struct ata_port *ap, struct device *dev)
static inline struct ata_port *ata_shost_to_port(struct Scsi_Host *host)
{
- return (struct ata_port *) &host->hostdata[0];
+ return *(struct ata_port **)&host->hostdata[0];
}
#endif /* __LINUX_LIBATA_H__ */
--
1.5.0.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 01/12] libata: allocate ap separately from shost
2007-03-09 11:15 ` [PATCH 01/12] libata: allocate ap separately from shost Tejun Heo
@ 2007-03-09 15:00 ` Jeff Garzik
0 siblings, 0 replies; 4+ messages in thread
From: Jeff Garzik @ 2007-03-09 15:00 UTC (permalink / raw)
To: Tejun Heo; +Cc: alan, linux-ide
Tejun Heo wrote:
> Don't embed ap inside shost. Allocate it separately and point it back
> from shosts's hostdata. This makes port allocation more flexible and
> allows regular ATA and SAS share host alloc/init paths.
>
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> ---
> drivers/ata/libata-core.c | 15 +++++++++++----
> include/linux/libata.h | 2 +-
> 2 files changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
> index 6e124bd..fab488c 100644
> --- a/drivers/ata/libata-core.c
> +++ b/drivers/ata/libata-core.c
> @@ -5646,14 +5646,17 @@ static struct ata_port * ata_port_add(const struct ata_probe_ent *ent,
> return NULL;
> }
>
> - shost = scsi_host_alloc(ent->sht, sizeof(struct ata_port));
> + ap = kzalloc(sizeof(struct ata_port), GFP_KERNEL);
> + if (!ap)
> + return NULL;
> +
> + shost = scsi_host_alloc(ent->sht, sizeof(struct ata_port *));
> if (!shost)
> return NULL;
memory leak on error
otherwise OK
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 01/12] libata: allocate ap separately from shost
2007-04-11 6:42 [PATCHSET] libata: implement new initialization model, take #4 Tejun Heo
@ 2007-04-11 6:42 ` Tejun Heo
0 siblings, 0 replies; 4+ messages in thread
From: Tejun Heo @ 2007-04-11 6:42 UTC (permalink / raw)
To: jeff, alan, linux-ide, brking; +Cc: Tejun Heo
Don't embed ap inside shost. Allocate it separately and point it back
from shosts's hostdata. This makes port allocation more flexible and
allows regular ATA and SAS share host alloc/init paths.
Signed-off-by: Tejun Heo <htejun@gmail.com>
---
drivers/ata/libata-core.c | 19 ++++++++++++++-----
include/linux/libata.h | 2 +-
2 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 735f0b0..542e9ea 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -5782,13 +5782,18 @@ static struct ata_port * ata_port_add(const struct ata_probe_ent *ent,
return NULL;
}
- shost = scsi_host_alloc(ent->sht, sizeof(struct ata_port));
- if (!shost)
+ ap = kzalloc(sizeof(struct ata_port), GFP_KERNEL);
+ if (!ap)
return NULL;
- shost->transportt = &ata_scsi_transport_template;
+ shost = scsi_host_alloc(ent->sht, sizeof(struct ata_port *));
+ if (!shost) {
+ kfree(ap);
+ return NULL;
+ }
- ap = ata_shost_to_port(shost);
+ *(struct ata_port **)&shost->hostdata[0] = ap;
+ shost->transportt = &ata_scsi_transport_template;
ata_port_init(ap, host, ent, port_no);
ata_port_init_shost(ap, shost);
@@ -5814,9 +5819,13 @@ static void ata_host_release(struct device *gendev, void *res)
for (i = 0; i < host->n_ports; i++) {
struct ata_port *ap = host->ports[i];
- if (ap)
+ if (!ap)
+ continue;
+
+ if (ap->scsi_host)
scsi_host_put(ap->scsi_host);
+ kfree(ap);
host->ports[i] = NULL;
}
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 12237d4..ced9dd5 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1231,7 +1231,7 @@ static inline void ata_pad_free(struct ata_port *ap, struct device *dev)
static inline struct ata_port *ata_shost_to_port(struct Scsi_Host *host)
{
- return (struct ata_port *) &host->hostdata[0];
+ return *(struct ata_port **)&host->hostdata[0];
}
#endif /* __LINUX_LIBATA_H__ */
--
1.5.0.3
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 01/12] libata: allocate ap separately from shost
[not found] <1176821046841-git-send-email-htejun@gmail.com>
@ 2007-04-17 15:04 ` Jeff Garzik
0 siblings, 0 replies; 4+ messages in thread
From: Jeff Garzik @ 2007-04-17 15:04 UTC (permalink / raw)
To: Tejun Heo; +Cc: IDE/ATA development list, Linux Kernel Mailing List
Tejun Heo wrote:
> Don't embed ap inside shost. Allocate it separately and point it back
> from shosts's hostdata. This makes port allocation more flexible and
> allows regular ATA and SAS share host alloc/init paths.
>
> Signed-off-by: Tejun Heo <htejun@gmail.com>
> ---
> drivers/ata/libata-core.c | 19 ++++++++++++++-----
> include/linux/libata.h | 2 +-
> 2 files changed, 15 insertions(+), 6 deletions(-)
applied patches 1-12 to #upstream.
Yay, libata init model is finally clean!
Thanks,
Jeff
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-04-17 15:04 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1176821046841-git-send-email-htejun@gmail.com>
2007-04-17 15:04 ` [PATCH 01/12] libata: allocate ap separately from shost Jeff Garzik
2007-04-11 6:42 [PATCHSET] libata: implement new initialization model, take #4 Tejun Heo
2007-04-11 6:42 ` [PATCH 01/12] libata: allocate ap separately from shost Tejun Heo
-- strict thread matches above, loose matches on Subject: below --
2007-03-09 11:15 [PATCHSET] libata: implement new initialization model, take #3 Tejun Heo
2007-03-09 11:15 ` [PATCH 01/12] libata: allocate ap separately from shost Tejun Heo
2007-03-09 15:00 ` Jeff Garzik
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).