@@ -3795,7 +3795,8 @@ struct nvme_ns *nvme_find_get_ns(struct nvme_ctrl *ctrl, unsigned nsid)
3795
3795
int srcu_idx ;
3796
3796
3797
3797
srcu_idx = srcu_read_lock (& ctrl -> srcu );
3798
- list_for_each_entry_rcu (ns , & ctrl -> namespaces , list ) {
3798
+ list_for_each_entry_srcu (ns , & ctrl -> namespaces , list ,
3799
+ srcu_read_lock_held (& ctrl -> srcu )) {
3799
3800
if (ns -> head -> ns_id == nsid ) {
3800
3801
if (!nvme_get_ns (ns ))
3801
3802
continue ;
@@ -4879,7 +4880,8 @@ void nvme_mark_namespaces_dead(struct nvme_ctrl *ctrl)
4879
4880
int srcu_idx ;
4880
4881
4881
4882
srcu_idx = srcu_read_lock (& ctrl -> srcu );
4882
- list_for_each_entry_rcu (ns , & ctrl -> namespaces , list )
4883
+ list_for_each_entry_srcu (ns , & ctrl -> namespaces , list ,
4884
+ srcu_read_lock_held (& ctrl -> srcu ))
4883
4885
blk_mark_disk_dead (ns -> disk );
4884
4886
srcu_read_unlock (& ctrl -> srcu , srcu_idx );
4885
4887
}
@@ -4891,7 +4893,8 @@ void nvme_unfreeze(struct nvme_ctrl *ctrl)
4891
4893
int srcu_idx ;
4892
4894
4893
4895
srcu_idx = srcu_read_lock (& ctrl -> srcu );
4894
- list_for_each_entry_rcu (ns , & ctrl -> namespaces , list )
4896
+ list_for_each_entry_srcu (ns , & ctrl -> namespaces , list ,
4897
+ srcu_read_lock_held (& ctrl -> srcu ))
4895
4898
blk_mq_unfreeze_queue (ns -> queue );
4896
4899
srcu_read_unlock (& ctrl -> srcu , srcu_idx );
4897
4900
clear_bit (NVME_CTRL_FROZEN , & ctrl -> flags );
@@ -4904,7 +4907,8 @@ int nvme_wait_freeze_timeout(struct nvme_ctrl *ctrl, long timeout)
4904
4907
int srcu_idx ;
4905
4908
4906
4909
srcu_idx = srcu_read_lock (& ctrl -> srcu );
4907
- list_for_each_entry_rcu (ns , & ctrl -> namespaces , list ) {
4910
+ list_for_each_entry_srcu (ns , & ctrl -> namespaces , list ,
4911
+ srcu_read_lock_held (& ctrl -> srcu )) {
4908
4912
timeout = blk_mq_freeze_queue_wait_timeout (ns -> queue , timeout );
4909
4913
if (timeout <= 0 )
4910
4914
break ;
@@ -4920,7 +4924,8 @@ void nvme_wait_freeze(struct nvme_ctrl *ctrl)
4920
4924
int srcu_idx ;
4921
4925
4922
4926
srcu_idx = srcu_read_lock (& ctrl -> srcu );
4923
- list_for_each_entry_rcu (ns , & ctrl -> namespaces , list )
4927
+ list_for_each_entry_srcu (ns , & ctrl -> namespaces , list ,
4928
+ srcu_read_lock_held (& ctrl -> srcu ))
4924
4929
blk_mq_freeze_queue_wait (ns -> queue );
4925
4930
srcu_read_unlock (& ctrl -> srcu , srcu_idx );
4926
4931
}
@@ -4933,7 +4938,8 @@ void nvme_start_freeze(struct nvme_ctrl *ctrl)
4933
4938
4934
4939
set_bit (NVME_CTRL_FROZEN , & ctrl -> flags );
4935
4940
srcu_idx = srcu_read_lock (& ctrl -> srcu );
4936
- list_for_each_entry_rcu (ns , & ctrl -> namespaces , list )
4941
+ list_for_each_entry_srcu (ns , & ctrl -> namespaces , list ,
4942
+ srcu_read_lock_held (& ctrl -> srcu ))
4937
4943
blk_freeze_queue_start (ns -> queue );
4938
4944
srcu_read_unlock (& ctrl -> srcu , srcu_idx );
4939
4945
}
@@ -4981,7 +4987,8 @@ void nvme_sync_io_queues(struct nvme_ctrl *ctrl)
4981
4987
int srcu_idx ;
4982
4988
4983
4989
srcu_idx = srcu_read_lock (& ctrl -> srcu );
4984
- list_for_each_entry_rcu (ns , & ctrl -> namespaces , list )
4990
+ list_for_each_entry_srcu (ns , & ctrl -> namespaces , list ,
4991
+ srcu_read_lock_held (& ctrl -> srcu ))
4985
4992
blk_sync_queue (ns -> queue );
4986
4993
srcu_read_unlock (& ctrl -> srcu , srcu_idx );
4987
4994
}
0 commit comments