File tree Expand file tree Collapse file tree 1 file changed +15
-0
lines changed Expand file tree Collapse file tree 1 file changed +15
-0
lines changed Original file line number Diff line number Diff line change @@ -584,6 +584,15 @@ void transport_free_session(struct se_session *se_sess)
584
584
}
585
585
EXPORT_SYMBOL (transport_free_session );
586
586
587
+ static int target_release_res (struct se_device * dev , void * data )
588
+ {
589
+ struct se_session * sess = data ;
590
+
591
+ if (dev -> reservation_holder == sess )
592
+ target_release_reservation (dev );
593
+ return 0 ;
594
+ }
595
+
587
596
void transport_deregister_session (struct se_session * se_sess )
588
597
{
589
598
struct se_portal_group * se_tpg = se_sess -> se_tpg ;
@@ -600,6 +609,12 @@ void transport_deregister_session(struct se_session *se_sess)
600
609
se_sess -> fabric_sess_ptr = NULL ;
601
610
spin_unlock_irqrestore (& se_tpg -> session_lock , flags );
602
611
612
+ /*
613
+ * Since the session is being removed, release SPC-2
614
+ * reservations held by the session that is disappearing.
615
+ */
616
+ target_for_each_device (target_release_res , se_sess );
617
+
603
618
pr_debug ("TARGET_CORE[%s]: Deregistered fabric_sess\n" ,
604
619
se_tpg -> se_tpg_tfo -> fabric_name );
605
620
/*
You can’t perform that action at this time.
0 commit comments