Skip to content

Commit c1fad41

Browse files
Christof SchmittJames Bottomley
authored andcommitted
[SCSI] zfcp: Implement module unloading
With the reference counting for zfcp data structures, it is now possible to implement module unloading again. Module unloading requires to free all data structures in the module exit function. This is done by unregistering zfcp from s390 cio and the SCSI midlayer first in the module exit function. 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>
1 parent d9742b4 commit c1fad41

File tree

3 files changed

+14
-13
lines changed

3 files changed

+14
-13
lines changed

drivers/s390/scsi/zfcp_aux.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ static int __init zfcp_module_init(void)
189189
goto out_misc;
190190
}
191191

192-
retval = zfcp_ccw_register();
192+
retval = ccw_driver_register(&zfcp_ccw_driver);
193193
if (retval) {
194194
pr_err("The zfcp device driver could not register with "
195195
"the common I/O layer\n");
@@ -218,6 +218,19 @@ static int __init zfcp_module_init(void)
218218

219219
module_init(zfcp_module_init);
220220

221+
static void __exit zfcp_module_exit(void)
222+
{
223+
ccw_driver_unregister(&zfcp_ccw_driver);
224+
misc_deregister(&zfcp_cfdc_misc);
225+
fc_release_transport(zfcp_data.scsi_transport_template);
226+
kmem_cache_destroy(zfcp_data.gid_pn_cache);
227+
kmem_cache_destroy(zfcp_data.sr_buffer_cache);
228+
kmem_cache_destroy(zfcp_data.qtcb_cache);
229+
kmem_cache_destroy(zfcp_data.gpn_ft_cache);
230+
}
231+
232+
module_exit(zfcp_module_exit);
233+
221234
/**
222235
* zfcp_get_unit_by_lun - find unit in unit list of port by FCP LUN
223236
* @port: pointer to port to search for unit

drivers/s390/scsi/zfcp_ccw.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -279,14 +279,3 @@ struct ccw_driver zfcp_ccw_driver = {
279279
.thaw = zfcp_ccw_activate,
280280
.restore = zfcp_ccw_activate,
281281
};
282-
283-
/**
284-
* zfcp_ccw_register - ccw register function
285-
*
286-
* Registers the driver at the common i/o layer. This function will be called
287-
* at module load time/system start.
288-
*/
289-
int __init zfcp_ccw_register(void)
290-
{
291-
return ccw_driver_register(&zfcp_ccw_driver);
292-
}

drivers/s390/scsi/zfcp_ext.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ extern void zfcp_adapter_release(struct kref *);
2727
extern void zfcp_adapter_unregister(struct zfcp_adapter *);
2828

2929
/* zfcp_ccw.c */
30-
extern int zfcp_ccw_register(void);
3130
extern int zfcp_ccw_priv_sch(struct zfcp_adapter *);
3231
extern struct ccw_driver zfcp_ccw_driver;
3332
extern struct zfcp_adapter *zfcp_ccw_adapter_by_cdev(struct ccw_device *);

0 commit comments

Comments
 (0)