Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c395170 authored by Roland Dreier's avatar Roland Dreier Committed by Nicholas Bellinger
Browse files

target: REPORT LUNS should return LUN 0 even for dynamic ACLs



If an initiator doesn't have any real LUNs assigned, we should report
LUN 0 and a LUN list length of 1.  Some versions of Solaris at least
go beserk if we report a LUN list length of 0.

Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
Cc: <stable@vger.kernel.org> # v3.1+
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 9547308b
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -1221,11 +1221,9 @@ sense_reason_t spc_emulate_report_luns(struct se_cmd *cmd)
	 * coming via a target_core_mod PASSTHROUGH op, and not through
	 * a $FABRIC_MOD.  In that case, report LUN=0 only.
	 */
	if (!sess) {
		int_to_scsilun(0, (struct scsi_lun *)&buf[offset]);
		lun_count = 1;
	if (!sess)
		goto done;
	}

	nacl = sess->se_node_acl;

	rcu_read_lock();
@@ -1248,6 +1246,14 @@ sense_reason_t spc_emulate_report_luns(struct se_cmd *cmd)
	 * See SPC3 r07, page 159.
	 */
done:
	/*
	 * If no LUNs are accessible, report virtual LUN 0.
	 */
	if (lun_count == 0) {
		int_to_scsilun(0, (struct scsi_lun *)&buf[offset]);
		lun_count = 1;
	}

	lun_count *= 8;
	buf[0] = ((lun_count >> 24) & 0xff);
	buf[1] = ((lun_count >> 16) & 0xff);