@@ -2997,17 +2997,32 @@ iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost,
29972997}
29982998EXPORT_SYMBOL_GPL (iscsi_session_setup );
29992999
3000- /**
3001- * iscsi_session_teardown - destroy session, host, and cls_session
3002- * @cls_session: iscsi session
3000+ /*
3001+ * issi_session_remove - Remove session from iSCSI class.
30033002 */
3004- void iscsi_session_teardown (struct iscsi_cls_session * cls_session )
3003+ void iscsi_session_remove (struct iscsi_cls_session * cls_session )
30053004{
30063005 struct iscsi_session * session = cls_session -> dd_data ;
3007- struct module * owner = cls_session -> transport -> owner ;
30083006 struct Scsi_Host * shost = session -> host ;
30093007
30103008 iscsi_remove_session (cls_session );
3009+ /*
3010+ * host removal only has to wait for its children to be removed from
3011+ * sysfs, and iscsi_tcp needs to do iscsi_host_remove before freeing
3012+ * the session, so drop the session count here.
3013+ */
3014+ iscsi_host_dec_session_cnt (shost );
3015+ }
3016+ EXPORT_SYMBOL_GPL (iscsi_session_remove );
3017+
3018+ /**
3019+ * iscsi_session_free - Free iscsi session and it's resources
3020+ * @cls_session: iscsi session
3021+ */
3022+ void iscsi_session_free (struct iscsi_cls_session * cls_session )
3023+ {
3024+ struct iscsi_session * session = cls_session -> dd_data ;
3025+ struct module * owner = cls_session -> transport -> owner ;
30113026
30123027 iscsi_pool_free (& session -> cmdpool );
30133028 kfree (session -> password );
@@ -3025,10 +3040,19 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
30253040 kfree (session -> discovery_parent_type );
30263041
30273042 iscsi_free_session (cls_session );
3028-
3029- iscsi_host_dec_session_cnt (shost );
30303043 module_put (owner );
30313044}
3045+ EXPORT_SYMBOL_GPL (iscsi_session_free );
3046+
3047+ /**
3048+ * iscsi_session_teardown - destroy session and cls_session
3049+ * @cls_session: iscsi session
3050+ */
3051+ void iscsi_session_teardown (struct iscsi_cls_session * cls_session )
3052+ {
3053+ iscsi_session_remove (cls_session );
3054+ iscsi_session_free (cls_session );
3055+ }
30323056EXPORT_SYMBOL_GPL (iscsi_session_teardown );
30333057
30343058/**
0 commit comments