@@ -3024,17 +3024,32 @@ iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost,
30243024}
30253025EXPORT_SYMBOL_GPL (iscsi_session_setup );
30263026
3027- /**
3028- * iscsi_session_teardown - destroy session, host, and cls_session
3029- * @cls_session: iscsi session
3027+ /*
3028+ * issi_session_remove - Remove session from iSCSI class.
30303029 */
3031- void iscsi_session_teardown (struct iscsi_cls_session * cls_session )
3030+ void iscsi_session_remove (struct iscsi_cls_session * cls_session )
30323031{
30333032 struct iscsi_session * session = cls_session -> dd_data ;
3034- struct module * owner = cls_session -> transport -> owner ;
30353033 struct Scsi_Host * shost = session -> host ;
30363034
30373035 iscsi_remove_session (cls_session );
3036+ /*
3037+ * host removal only has to wait for its children to be removed from
3038+ * sysfs, and iscsi_tcp needs to do iscsi_host_remove before freeing
3039+ * the session, so drop the session count here.
3040+ */
3041+ iscsi_host_dec_session_cnt (shost );
3042+ }
3043+ EXPORT_SYMBOL_GPL (iscsi_session_remove );
3044+
3045+ /**
3046+ * iscsi_session_free - Free iscsi session and it's resources
3047+ * @cls_session: iscsi session
3048+ */
3049+ void iscsi_session_free (struct iscsi_cls_session * cls_session )
3050+ {
3051+ struct iscsi_session * session = cls_session -> dd_data ;
3052+ struct module * owner = cls_session -> transport -> owner ;
30383053
30393054 iscsi_pool_free (& session -> cmdpool );
30403055 kfree (session -> password );
@@ -3052,10 +3067,19 @@ void iscsi_session_teardown(struct iscsi_cls_session *cls_session)
30523067 kfree (session -> discovery_parent_type );
30533068
30543069 iscsi_free_session (cls_session );
3055-
3056- iscsi_host_dec_session_cnt (shost );
30573070 module_put (owner );
30583071}
3072+ EXPORT_SYMBOL_GPL (iscsi_session_free );
3073+
3074+ /**
3075+ * iscsi_session_teardown - destroy session and cls_session
3076+ * @cls_session: iscsi session
3077+ */
3078+ void iscsi_session_teardown (struct iscsi_cls_session * cls_session )
3079+ {
3080+ iscsi_session_remove (cls_session );
3081+ iscsi_session_free (cls_session );
3082+ }
30593083EXPORT_SYMBOL_GPL (iscsi_session_teardown );
30603084
30613085/**
0 commit comments