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: Roland Dreier <roland@purestorage.com> Cc: <stable@vger.kernel.org> # v3.1+ Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
Родитель
9547308bda
Коммит
9c395170a5
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче