File tree Expand file tree Collapse file tree 3 files changed +17
-3
lines changed Expand file tree Collapse file tree 3 files changed +17
-3
lines changed Original file line number Diff line number Diff line change @@ -179,6 +179,11 @@ static int __init zfcp_module_init(void)
179
179
if (!zfcp_data .gid_pn_cache )
180
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
187
zfcp_data .scsi_transport_template =
183
188
fc_attach_transport (& zfcp_transport_functions );
184
189
if (!zfcp_data .scsi_transport_template )
@@ -206,6 +211,8 @@ static int __init zfcp_module_init(void)
206
211
out_misc :
207
212
fc_release_transport (zfcp_data .scsi_transport_template );
208
213
out_transport :
214
+ kmem_cache_destroy (zfcp_data .adisc_cache );
215
+ out_adisc_cache :
209
216
kmem_cache_destroy (zfcp_data .gid_pn_cache );
210
217
out_gid_cache :
211
218
kmem_cache_destroy (zfcp_data .sr_buffer_cache );
@@ -224,6 +231,7 @@ static void __exit zfcp_module_exit(void)
224
231
ccw_driver_unregister (& zfcp_ccw_driver );
225
232
misc_deregister (& zfcp_cfdc_misc );
226
233
fc_release_transport (zfcp_data .scsi_transport_template );
234
+ kmem_cache_destroy (zfcp_data .adisc_cache );
227
235
kmem_cache_destroy (zfcp_data .gid_pn_cache );
228
236
kmem_cache_destroy (zfcp_data .sr_buffer_cache );
229
237
kmem_cache_destroy (zfcp_data .qtcb_cache );
Original file line number Diff line number Diff line change @@ -347,6 +347,7 @@ struct zfcp_data {
347
347
struct kmem_cache * qtcb_cache ;
348
348
struct kmem_cache * sr_buffer_cache ;
349
349
struct kmem_cache * gid_pn_cache ;
350
+ struct kmem_cache * adisc_cache ;
350
351
};
351
352
352
353
/********************** ZFCP SPECIFIC DEFINES ********************************/
Original file line number Diff line number Diff line change @@ -389,15 +389,16 @@ static void zfcp_fc_adisc_handler(void *data)
389
389
out :
390
390
atomic_clear_mask (ZFCP_STATUS_PORT_LINK_TEST , & port -> status );
391
391
put_device (& port -> sysfs_device );
392
- kfree ( adisc );
392
+ kmem_cache_free ( zfcp_data . adisc_cache , adisc );
393
393
}
394
394
395
395
static int zfcp_fc_adisc (struct zfcp_port * port )
396
396
{
397
397
struct zfcp_fc_els_adisc * adisc ;
398
398
struct zfcp_adapter * adapter = port -> adapter ;
399
+ int ret ;
399
400
400
- adisc = kzalloc ( sizeof ( struct zfcp_fc_els_adisc ) , GFP_ATOMIC );
401
+ adisc = kmem_cache_alloc ( zfcp_data . adisc_cache , GFP_ATOMIC );
401
402
if (!adisc )
402
403
return - ENOMEM ;
403
404
@@ -420,7 +421,11 @@ static int zfcp_fc_adisc(struct zfcp_port *port)
420
421
hton24 (adisc -> adisc_req .adisc_port_id ,
421
422
fc_host_port_id (adapter -> scsi_host ));
422
423
423
- return zfcp_fsf_send_els (adapter , port -> d_id , & adisc -> els );
424
+ ret = zfcp_fsf_send_els (adapter , port -> d_id , & adisc -> els );
425
+ if (ret )
426
+ kmem_cache_free (zfcp_data .adisc_cache , adisc );
427
+
428
+ return ret ;
424
429
}
425
430
426
431
void zfcp_fc_link_test_work (struct work_struct * work )
You can’t perform that action at this time.
0 commit comments