@@ -75,6 +75,8 @@ spc_emulate_inquiry_std(struct se_cmd *cmd, unsigned char *buf)
struct se_portal_group *tpg = lun->lun_tpg;
struct se_device *dev = cmd->se_dev;
struct se_session *sess = cmd->se_sess;
+ struct se_lun *tmp_lun;
+ size_t dev_ports = 0;
/* Set RMB (removable media) for tape devices */
if (dev->transport->get_device_type(dev) == TYPE_TAPE)
@@ -115,6 +117,20 @@ spc_emulate_inquiry_std(struct se_cmd *cmd, unsigned char *buf)
buf[5] |= 0x1;
}
+ spin_lock(&dev->se_port_lock);
+ list_for_each_entry(tmp_lun, &dev->dev_sep_list, lun_dev_link) {
+ dev_ports++;
+ /* Exact number of ports does not matter for MULTIP bit */
+ if (dev_ports > 1)
+ break;
+ }
+ spin_unlock(&dev->se_port_lock);
+ /*
+ * Set MULTIP bit to indicate presence of multiple SCSI target ports
+ */
+ if (dev_ports > 1)
+ buf[6] |= 0x10;
+
buf[7] = 0x2; /* CmdQue=1 */
/*