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
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 |
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...