Revision 3ccd6e83df8a0d4a664edeecc453c4fa046395fb authored by Nicholas Bellinger on 13 September 2015, 09:30:46 UTC, committed by Nicholas Bellinger on 25 September 2015, 06:17:07 UTC
This patch fixes a v4.2+ regression introduced by commit 79dc9c9e86
where lookup of t10_pr_registration->pr_reg_deve and associated
->pr_kref get was missing from __core_scsi3_do_alloc_registration(),
which is responsible for setting DEF_PR_REG_ACTIVE.

This would result in REGISTER operations completing successfully,
but subsequent core_scsi3_pr_seq_non_holder() checking would fail
with !DEF_PR_REG_ACTIVE -> RESERVATION CONFLICT status.

Update __core_scsi3_add_registration() to drop ->pr_kref reference
after registration and any optional ALL_TG_PT=1 processing has
completed.  Update core_scsi3_decode_spec_i_port() to release
the new parent local_pr_reg->pr_kref as well.

Also, update __core_scsi3_check_aptpl_registration() to perform
the same target_nacl_find_deve() lookup + ->pr_kref get, now that
__core_scsi3_add_registration() expects to drop the reference.

Finally, since there are cases when se_dev_entry->se_lun_acl can
still be dereferenced in core_scsi3_lunacl_undepend_item() while
holding ->pr_kref, go ahead and move explicit rcu_assign_pointer()
NULL assignments within core_disable_device_list_for_node() until
after orig->pr_comp finishes.

Reported-by: Scott L. Lykens <scott@lykens.org>
Tested-by: Scott L. Lykens <scott@lykens.org>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Lee Duncan <lduncan@suse.com>
Cc: <stable@vger.kernel.org> # v4.2+
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
1 parent 9fd6008
History
File Mode Size
Kconfig -rw-r--r-- 10.6 KB
Makefile -rw-r--r-- 440 bytes
autosleep.c -rw-r--r-- 2.6 KB
console.c -rw-r--r-- 3.5 KB
hibernate.c -rw-r--r-- 26.9 KB
main.c -rw-r--r-- 15.2 KB
power.h -rw-r--r-- 8.0 KB
poweroff.c -rw-r--r-- 990 bytes
process.c -rw-r--r-- 5.3 KB
qos.c -rw-r--r-- 19.1 KB
snapshot.c -rw-r--r-- 67.1 KB
suspend.c -rw-r--r-- 13.2 KB
suspend_test.c -rw-r--r-- 5.7 KB
swap.c -rw-r--r-- 37.3 KB
user.c -rw-r--r-- 10.0 KB
wakelock.c -rw-r--r-- 5.7 KB

back to top