target/pr: Use atomic bitop for se_dev_entry->deve_flags reservation check
authorNicholas Bellinger <nab@linux-iscsi.org>
Wed, 25 Mar 2015 08:02:57 +0000 (01:02 -0700)
committerNicholas Bellinger <nab@linux-iscsi.org>
Mon, 1 Jun 2015 07:24:00 +0000 (00:24 -0700)
commit80bfdfa92481d431b199eff72788588d13a3988f
treed3549786f0be21fb1f1f6abbdf1190e9cc4aaece
parent29a05deebf6c2e3010934fb78ee65cab3d329470
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 <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Cc: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_device.c
drivers/target/target_core_pr.c
include/target/target_core_base.h