mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
target/pr: Use atomic bitop for se_dev_entry->deve_flags reservation check
This patch converts the core_scsi3_pr_seq_non_holder() check for non reservation holding registrations to use an atomic bitop in ->deve_flags to determine if a registration is currently active. It also includes associated a set_bit() in __core_scsi3_add_registration() and clear_bit() in __core_scsi3_free_registration(), if se_dev_entry still exists, and has not already been released via se_dev_entry shutdown path in core_disable_device_list_for_node(). Also, clear_bit in core_disable_device_list_for_node as well to ensure the read-critical path in core_scsi3_pr_seq_non_holder() picks up the new state, preceeding the final kfree_rcu() call. Reported-by: Christoph Hellwig <[email protected]> Reviewed-by: Hannes Reinecke <[email protected]> Cc: Sagi Grimberg <[email protected]> Signed-off-by: Nicholas Bellinger <[email protected]>
This commit is contained in:
parent
29a05deebf
commit
80bfdfa924
3 changed files with 42 additions and 20 deletions
|
|
@ -638,7 +638,6 @@ struct se_lun_acl {
|
|||
};
|
||||
|
||||
struct se_dev_entry {
|
||||
bool def_pr_registered;
|
||||
/* See transport_lunflags_table */
|
||||
u32 lun_flags;
|
||||
u32 mapped_lun;
|
||||
|
|
@ -655,6 +654,8 @@ struct se_dev_entry {
|
|||
struct se_lun_acl __rcu *se_lun_acl;
|
||||
spinlock_t ua_lock;
|
||||
struct se_lun __rcu *se_lun;
|
||||
#define DEF_PR_REG_ACTIVE 1
|
||||
unsigned long deve_flags;
|
||||
struct list_head alua_port_list;
|
||||
struct list_head ua_list;
|
||||
struct hlist_node link;
|
||||
|
|
|
|||
Loading…
Reference in a new issue