diff options
author | Christof Schmitt <christof.schmitt@de.ibm.com> | 2009-11-24 10:54:14 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-12-04 13:02:16 -0500 |
commit | ee744622c65cd66824e8dd1b9509e515c800de14 (patch) | |
tree | 4925603f5170400b07cde7cc18d2519cfcf788e2 /drivers/s390/scsi/zfcp_aux.c | |
parent | 7c7dc196814b9e1d5cc254dc579a5fa78ae524f7 (diff) |
[SCSI] zfcp: Improve ELS ADISC handling
Introduce kmem_cache for ELS ADISC data to guarantee the required
hardware alignment and free the allocated memory in case the send
failes.
Reviewed-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/s390/scsi/zfcp_aux.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 58bb17732f56..9d0c941b7d33 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
@@ -179,6 +179,11 @@ static int __init zfcp_module_init(void) | |||
179 | if (!zfcp_data.gid_pn_cache) | 179 | if (!zfcp_data.gid_pn_cache) |
180 | goto out_gid_cache; | 180 | goto out_gid_cache; |
181 | 181 | ||
182 | zfcp_data.adisc_cache = zfcp_cache_hw_align("zfcp_adisc", | ||
183 | sizeof(struct zfcp_fc_els_adisc)); | ||
184 | if (!zfcp_data.adisc_cache) | ||
185 | goto out_adisc_cache; | ||
186 | |||
182 | zfcp_data.scsi_transport_template = | 187 | zfcp_data.scsi_transport_template = |
183 | fc_attach_transport(&zfcp_transport_functions); | 188 | fc_attach_transport(&zfcp_transport_functions); |
184 | if (!zfcp_data.scsi_transport_template) | 189 | if (!zfcp_data.scsi_transport_template) |
@@ -206,6 +211,8 @@ out_ccw_register: | |||
206 | out_misc: | 211 | out_misc: |
207 | fc_release_transport(zfcp_data.scsi_transport_template); | 212 | fc_release_transport(zfcp_data.scsi_transport_template); |
208 | out_transport: | 213 | out_transport: |
214 | kmem_cache_destroy(zfcp_data.adisc_cache); | ||
215 | out_adisc_cache: | ||
209 | kmem_cache_destroy(zfcp_data.gid_pn_cache); | 216 | kmem_cache_destroy(zfcp_data.gid_pn_cache); |
210 | out_gid_cache: | 217 | out_gid_cache: |
211 | kmem_cache_destroy(zfcp_data.sr_buffer_cache); | 218 | kmem_cache_destroy(zfcp_data.sr_buffer_cache); |
@@ -224,6 +231,7 @@ static void __exit zfcp_module_exit(void) | |||
224 | ccw_driver_unregister(&zfcp_ccw_driver); | 231 | ccw_driver_unregister(&zfcp_ccw_driver); |
225 | misc_deregister(&zfcp_cfdc_misc); | 232 | misc_deregister(&zfcp_cfdc_misc); |
226 | fc_release_transport(zfcp_data.scsi_transport_template); | 233 | fc_release_transport(zfcp_data.scsi_transport_template); |
234 | kmem_cache_destroy(zfcp_data.adisc_cache); | ||
227 | kmem_cache_destroy(zfcp_data.gid_pn_cache); | 235 | kmem_cache_destroy(zfcp_data.gid_pn_cache); |
228 | kmem_cache_destroy(zfcp_data.sr_buffer_cache); | 236 | kmem_cache_destroy(zfcp_data.sr_buffer_cache); |
229 | kmem_cache_destroy(zfcp_data.qtcb_cache); | 237 | kmem_cache_destroy(zfcp_data.qtcb_cache); |