Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

target: move code for CDB emulation

Move the existing code in target_core_cdb.c into the files for the command
sets that the emulations implement.

(roland + nab: Squash patch: Fix range calculation in WRITE SAME emulation
when num blocks == 0s)

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>

authored by

Christoph Hellwig and committed by
Nicholas Bellinger
1fd032ee d6e0175c

+1167 -1673
-1
drivers/target/Makefile
··· 9 9 target_core_tmr.o \ 10 10 target_core_tpg.o \ 11 11 target_core_transport.o \ 12 - target_core_cdb.o \ 13 12 target_core_sbc.o \ 14 13 target_core_spc.o \ 15 14 target_core_ua.o \
-1130
drivers/target/target_core_cdb.c
··· 1 - /* 2 - * CDB emulation for non-READ/WRITE commands. 3 - * 4 - * Copyright (c) 2002, 2003, 2004, 2005 PyX Technologies, Inc. 5 - * Copyright (c) 2005, 2006, 2007 SBE, Inc. 6 - * Copyright (c) 2007-2010 Rising Tide Systems 7 - * Copyright (c) 2008-2010 Linux-iSCSI.org 8 - * 9 - * Nicholas A. Bellinger <nab@kernel.org> 10 - * 11 - * This program is free software; you can redistribute it and/or modify 12 - * it under the terms of the GNU General Public License as published by 13 - * the Free Software Foundation; either version 2 of the License, or 14 - * (at your option) any later version. 15 - * 16 - * This program is distributed in the hope that it will be useful, 17 - * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 - * GNU General Public License for more details. 20 - * 21 - * You should have received a copy of the GNU General Public License 22 - * along with this program; if not, write to the Free Software 23 - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 24 - */ 25 - 26 - #include <linux/kernel.h> 27 - #include <linux/module.h> 28 - #include <asm/unaligned.h> 29 - #include <scsi/scsi.h> 30 - 31 - #include <target/target_core_base.h> 32 - #include <target/target_core_backend.h> 33 - #include <target/target_core_fabric.h> 34 - 35 - #include "target_core_internal.h" 36 - #include "target_core_ua.h" 37 - 38 - static void 39 - target_fill_alua_data(struct se_port *port, unsigned char *buf) 40 - { 41 - struct t10_alua_tg_pt_gp *tg_pt_gp; 42 - struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem; 43 - 44 - /* 45 - * Set SCCS for MAINTENANCE_IN + REPORT_TARGET_PORT_GROUPS. 46 - */ 47 - buf[5] = 0x80; 48 - 49 - /* 50 - * Set TPGS field for explict and/or implict ALUA access type 51 - * and opteration. 52 - * 53 - * See spc4r17 section 6.4.2 Table 135 54 - */ 55 - if (!port) 56 - return; 57 - tg_pt_gp_mem = port->sep_alua_tg_pt_gp_mem; 58 - if (!tg_pt_gp_mem) 59 - return; 60 - 61 - spin_lock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 62 - tg_pt_gp = tg_pt_gp_mem->tg_pt_gp; 63 - if (tg_pt_gp) 64 - buf[5] |= tg_pt_gp->tg_pt_gp_alua_access_type; 65 - spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 66 - } 67 - 68 - static int 69 - target_emulate_inquiry_std(struct se_cmd *cmd, char *buf) 70 - { 71 - struct se_lun *lun = cmd->se_lun; 72 - struct se_device *dev = cmd->se_dev; 73 - 74 - /* Set RMB (removable media) for tape devices */ 75 - if (dev->transport->get_device_type(dev) == TYPE_TAPE) 76 - buf[1] = 0x80; 77 - 78 - buf[2] = dev->transport->get_device_rev(dev); 79 - 80 - /* 81 - * NORMACA and HISUP = 0, RESPONSE DATA FORMAT = 2 82 - * 83 - * SPC4 says: 84 - * A RESPONSE DATA FORMAT field set to 2h indicates that the 85 - * standard INQUIRY data is in the format defined in this 86 - * standard. Response data format values less than 2h are 87 - * obsolete. Response data format values greater than 2h are 88 - * reserved. 89 - */ 90 - buf[3] = 2; 91 - 92 - /* 93 - * Enable SCCS and TPGS fields for Emulated ALUA 94 - */ 95 - if (dev->se_sub_dev->t10_alua.alua_type == SPC3_ALUA_EMULATED) 96 - target_fill_alua_data(lun->lun_sep, buf); 97 - 98 - buf[7] = 0x2; /* CmdQue=1 */ 99 - 100 - snprintf(&buf[8], 8, "LIO-ORG"); 101 - snprintf(&buf[16], 16, "%s", dev->se_sub_dev->t10_wwn.model); 102 - snprintf(&buf[32], 4, "%s", dev->se_sub_dev->t10_wwn.revision); 103 - buf[4] = 31; /* Set additional length to 31 */ 104 - 105 - return 0; 106 - } 107 - 108 - /* unit serial number */ 109 - static int 110 - target_emulate_evpd_80(struct se_cmd *cmd, unsigned char *buf) 111 - { 112 - struct se_device *dev = cmd->se_dev; 113 - u16 len = 0; 114 - 115 - if (dev->se_sub_dev->su_dev_flags & 116 - SDF_EMULATED_VPD_UNIT_SERIAL) { 117 - u32 unit_serial_len; 118 - 119 - unit_serial_len = strlen(dev->se_sub_dev->t10_wwn.unit_serial); 120 - unit_serial_len++; /* For NULL Terminator */ 121 - 122 - len += sprintf(&buf[4], "%s", 123 - dev->se_sub_dev->t10_wwn.unit_serial); 124 - len++; /* Extra Byte for NULL Terminator */ 125 - buf[3] = len; 126 - } 127 - return 0; 128 - } 129 - 130 - static void 131 - target_parse_naa_6h_vendor_specific(struct se_device *dev, unsigned char *buf) 132 - { 133 - unsigned char *p = &dev->se_sub_dev->t10_wwn.unit_serial[0]; 134 - int cnt; 135 - bool next = true; 136 - 137 - /* 138 - * Generate up to 36 bits of VENDOR SPECIFIC IDENTIFIER starting on 139 - * byte 3 bit 3-0 for NAA IEEE Registered Extended DESIGNATOR field 140 - * format, followed by 64 bits of VENDOR SPECIFIC IDENTIFIER EXTENSION 141 - * to complete the payload. These are based from VPD=0x80 PRODUCT SERIAL 142 - * NUMBER set via vpd_unit_serial in target_core_configfs.c to ensure 143 - * per device uniqeness. 144 - */ 145 - for (cnt = 0; *p && cnt < 13; p++) { 146 - int val = hex_to_bin(*p); 147 - 148 - if (val < 0) 149 - continue; 150 - 151 - if (next) { 152 - next = false; 153 - buf[cnt++] |= val; 154 - } else { 155 - next = true; 156 - buf[cnt] = val << 4; 157 - } 158 - } 159 - } 160 - 161 - /* 162 - * Device identification VPD, for a complete list of 163 - * DESIGNATOR TYPEs see spc4r17 Table 459. 164 - */ 165 - static int 166 - target_emulate_evpd_83(struct se_cmd *cmd, unsigned char *buf) 167 - { 168 - struct se_device *dev = cmd->se_dev; 169 - struct se_lun *lun = cmd->se_lun; 170 - struct se_port *port = NULL; 171 - struct se_portal_group *tpg = NULL; 172 - struct t10_alua_lu_gp_member *lu_gp_mem; 173 - struct t10_alua_tg_pt_gp *tg_pt_gp; 174 - struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem; 175 - unsigned char *prod = &dev->se_sub_dev->t10_wwn.model[0]; 176 - u32 prod_len; 177 - u32 unit_serial_len, off = 0; 178 - u16 len = 0, id_len; 179 - 180 - off = 4; 181 - 182 - /* 183 - * NAA IEEE Registered Extended Assigned designator format, see 184 - * spc4r17 section 7.7.3.6.5 185 - * 186 - * We depend upon a target_core_mod/ConfigFS provided 187 - * /sys/kernel/config/target/core/$HBA/$DEV/wwn/vpd_unit_serial 188 - * value in order to return the NAA id. 189 - */ 190 - if (!(dev->se_sub_dev->su_dev_flags & SDF_EMULATED_VPD_UNIT_SERIAL)) 191 - goto check_t10_vend_desc; 192 - 193 - /* CODE SET == Binary */ 194 - buf[off++] = 0x1; 195 - 196 - /* Set ASSOCIATION == addressed logical unit: 0)b */ 197 - buf[off] = 0x00; 198 - 199 - /* Identifier/Designator type == NAA identifier */ 200 - buf[off++] |= 0x3; 201 - off++; 202 - 203 - /* Identifier/Designator length */ 204 - buf[off++] = 0x10; 205 - 206 - /* 207 - * Start NAA IEEE Registered Extended Identifier/Designator 208 - */ 209 - buf[off++] = (0x6 << 4); 210 - 211 - /* 212 - * Use OpenFabrics IEEE Company ID: 00 14 05 213 - */ 214 - buf[off++] = 0x01; 215 - buf[off++] = 0x40; 216 - buf[off] = (0x5 << 4); 217 - 218 - /* 219 - * Return ConfigFS Unit Serial Number information for 220 - * VENDOR_SPECIFIC_IDENTIFIER and 221 - * VENDOR_SPECIFIC_IDENTIFIER_EXTENTION 222 - */ 223 - target_parse_naa_6h_vendor_specific(dev, &buf[off]); 224 - 225 - len = 20; 226 - off = (len + 4); 227 - 228 - check_t10_vend_desc: 229 - /* 230 - * T10 Vendor Identifier Page, see spc4r17 section 7.7.3.4 231 - */ 232 - id_len = 8; /* For Vendor field */ 233 - prod_len = 4; /* For VPD Header */ 234 - prod_len += 8; /* For Vendor field */ 235 - prod_len += strlen(prod); 236 - prod_len++; /* For : */ 237 - 238 - if (dev->se_sub_dev->su_dev_flags & 239 - SDF_EMULATED_VPD_UNIT_SERIAL) { 240 - unit_serial_len = 241 - strlen(&dev->se_sub_dev->t10_wwn.unit_serial[0]); 242 - unit_serial_len++; /* For NULL Terminator */ 243 - 244 - id_len += sprintf(&buf[off+12], "%s:%s", prod, 245 - &dev->se_sub_dev->t10_wwn.unit_serial[0]); 246 - } 247 - buf[off] = 0x2; /* ASCII */ 248 - buf[off+1] = 0x1; /* T10 Vendor ID */ 249 - buf[off+2] = 0x0; 250 - memcpy(&buf[off+4], "LIO-ORG", 8); 251 - /* Extra Byte for NULL Terminator */ 252 - id_len++; 253 - /* Identifier Length */ 254 - buf[off+3] = id_len; 255 - /* Header size for Designation descriptor */ 256 - len += (id_len + 4); 257 - off += (id_len + 4); 258 - /* 259 - * struct se_port is only set for INQUIRY VPD=1 through $FABRIC_MOD 260 - */ 261 - port = lun->lun_sep; 262 - if (port) { 263 - struct t10_alua_lu_gp *lu_gp; 264 - u32 padding, scsi_name_len; 265 - u16 lu_gp_id = 0; 266 - u16 tg_pt_gp_id = 0; 267 - u16 tpgt; 268 - 269 - tpg = port->sep_tpg; 270 - /* 271 - * Relative target port identifer, see spc4r17 272 - * section 7.7.3.7 273 - * 274 - * Get the PROTOCOL IDENTIFIER as defined by spc4r17 275 - * section 7.5.1 Table 362 276 - */ 277 - buf[off] = 278 - (tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4); 279 - buf[off++] |= 0x1; /* CODE SET == Binary */ 280 - buf[off] = 0x80; /* Set PIV=1 */ 281 - /* Set ASSOCIATION == target port: 01b */ 282 - buf[off] |= 0x10; 283 - /* DESIGNATOR TYPE == Relative target port identifer */ 284 - buf[off++] |= 0x4; 285 - off++; /* Skip over Reserved */ 286 - buf[off++] = 4; /* DESIGNATOR LENGTH */ 287 - /* Skip over Obsolete field in RTPI payload 288 - * in Table 472 */ 289 - off += 2; 290 - buf[off++] = ((port->sep_rtpi >> 8) & 0xff); 291 - buf[off++] = (port->sep_rtpi & 0xff); 292 - len += 8; /* Header size + Designation descriptor */ 293 - /* 294 - * Target port group identifier, see spc4r17 295 - * section 7.7.3.8 296 - * 297 - * Get the PROTOCOL IDENTIFIER as defined by spc4r17 298 - * section 7.5.1 Table 362 299 - */ 300 - if (dev->se_sub_dev->t10_alua.alua_type != 301 - SPC3_ALUA_EMULATED) 302 - goto check_scsi_name; 303 - 304 - tg_pt_gp_mem = port->sep_alua_tg_pt_gp_mem; 305 - if (!tg_pt_gp_mem) 306 - goto check_lu_gp; 307 - 308 - spin_lock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 309 - tg_pt_gp = tg_pt_gp_mem->tg_pt_gp; 310 - if (!tg_pt_gp) { 311 - spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 312 - goto check_lu_gp; 313 - } 314 - tg_pt_gp_id = tg_pt_gp->tg_pt_gp_id; 315 - spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 316 - 317 - buf[off] = 318 - (tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4); 319 - buf[off++] |= 0x1; /* CODE SET == Binary */ 320 - buf[off] = 0x80; /* Set PIV=1 */ 321 - /* Set ASSOCIATION == target port: 01b */ 322 - buf[off] |= 0x10; 323 - /* DESIGNATOR TYPE == Target port group identifier */ 324 - buf[off++] |= 0x5; 325 - off++; /* Skip over Reserved */ 326 - buf[off++] = 4; /* DESIGNATOR LENGTH */ 327 - off += 2; /* Skip over Reserved Field */ 328 - buf[off++] = ((tg_pt_gp_id >> 8) & 0xff); 329 - buf[off++] = (tg_pt_gp_id & 0xff); 330 - len += 8; /* Header size + Designation descriptor */ 331 - /* 332 - * Logical Unit Group identifier, see spc4r17 333 - * section 7.7.3.8 334 - */ 335 - check_lu_gp: 336 - lu_gp_mem = dev->dev_alua_lu_gp_mem; 337 - if (!lu_gp_mem) 338 - goto check_scsi_name; 339 - 340 - spin_lock(&lu_gp_mem->lu_gp_mem_lock); 341 - lu_gp = lu_gp_mem->lu_gp; 342 - if (!lu_gp) { 343 - spin_unlock(&lu_gp_mem->lu_gp_mem_lock); 344 - goto check_scsi_name; 345 - } 346 - lu_gp_id = lu_gp->lu_gp_id; 347 - spin_unlock(&lu_gp_mem->lu_gp_mem_lock); 348 - 349 - buf[off++] |= 0x1; /* CODE SET == Binary */ 350 - /* DESIGNATOR TYPE == Logical Unit Group identifier */ 351 - buf[off++] |= 0x6; 352 - off++; /* Skip over Reserved */ 353 - buf[off++] = 4; /* DESIGNATOR LENGTH */ 354 - off += 2; /* Skip over Reserved Field */ 355 - buf[off++] = ((lu_gp_id >> 8) & 0xff); 356 - buf[off++] = (lu_gp_id & 0xff); 357 - len += 8; /* Header size + Designation descriptor */ 358 - /* 359 - * SCSI name string designator, see spc4r17 360 - * section 7.7.3.11 361 - * 362 - * Get the PROTOCOL IDENTIFIER as defined by spc4r17 363 - * section 7.5.1 Table 362 364 - */ 365 - check_scsi_name: 366 - scsi_name_len = strlen(tpg->se_tpg_tfo->tpg_get_wwn(tpg)); 367 - /* UTF-8 ",t,0x<16-bit TPGT>" + NULL Terminator */ 368 - scsi_name_len += 10; 369 - /* Check for 4-byte padding */ 370 - padding = ((-scsi_name_len) & 3); 371 - if (padding != 0) 372 - scsi_name_len += padding; 373 - /* Header size + Designation descriptor */ 374 - scsi_name_len += 4; 375 - 376 - buf[off] = 377 - (tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4); 378 - buf[off++] |= 0x3; /* CODE SET == UTF-8 */ 379 - buf[off] = 0x80; /* Set PIV=1 */ 380 - /* Set ASSOCIATION == target port: 01b */ 381 - buf[off] |= 0x10; 382 - /* DESIGNATOR TYPE == SCSI name string */ 383 - buf[off++] |= 0x8; 384 - off += 2; /* Skip over Reserved and length */ 385 - /* 386 - * SCSI name string identifer containing, $FABRIC_MOD 387 - * dependent information. For LIO-Target and iSCSI 388 - * Target Port, this means "<iSCSI name>,t,0x<TPGT> in 389 - * UTF-8 encoding. 390 - */ 391 - tpgt = tpg->se_tpg_tfo->tpg_get_tag(tpg); 392 - scsi_name_len = sprintf(&buf[off], "%s,t,0x%04x", 393 - tpg->se_tpg_tfo->tpg_get_wwn(tpg), tpgt); 394 - scsi_name_len += 1 /* Include NULL terminator */; 395 - /* 396 - * The null-terminated, null-padded (see 4.4.2) SCSI 397 - * NAME STRING field contains a UTF-8 format string. 398 - * The number of bytes in the SCSI NAME STRING field 399 - * (i.e., the value in the DESIGNATOR LENGTH field) 400 - * shall be no larger than 256 and shall be a multiple 401 - * of four. 402 - */ 403 - if (padding) 404 - scsi_name_len += padding; 405 - 406 - buf[off-1] = scsi_name_len; 407 - off += scsi_name_len; 408 - /* Header size + Designation descriptor */ 409 - len += (scsi_name_len + 4); 410 - } 411 - buf[2] = ((len >> 8) & 0xff); 412 - buf[3] = (len & 0xff); /* Page Length for VPD 0x83 */ 413 - return 0; 414 - } 415 - 416 - /* Extended INQUIRY Data VPD Page */ 417 - static int 418 - target_emulate_evpd_86(struct se_cmd *cmd, unsigned char *buf) 419 - { 420 - buf[3] = 0x3c; 421 - /* Set HEADSUP, ORDSUP, SIMPSUP */ 422 - buf[5] = 0x07; 423 - 424 - /* If WriteCache emulation is enabled, set V_SUP */ 425 - if (cmd->se_dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) 426 - buf[6] = 0x01; 427 - return 0; 428 - } 429 - 430 - /* Block Limits VPD page */ 431 - static int 432 - target_emulate_evpd_b0(struct se_cmd *cmd, unsigned char *buf) 433 - { 434 - struct se_device *dev = cmd->se_dev; 435 - u32 max_sectors; 436 - int have_tp = 0; 437 - 438 - /* 439 - * Following sbc3r22 section 6.5.3 Block Limits VPD page, when 440 - * emulate_tpu=1 or emulate_tpws=1 we will be expect a 441 - * different page length for Thin Provisioning. 442 - */ 443 - if (dev->se_sub_dev->se_dev_attrib.emulate_tpu || dev->se_sub_dev->se_dev_attrib.emulate_tpws) 444 - have_tp = 1; 445 - 446 - buf[0] = dev->transport->get_device_type(dev); 447 - buf[3] = have_tp ? 0x3c : 0x10; 448 - 449 - /* Set WSNZ to 1 */ 450 - buf[4] = 0x01; 451 - 452 - /* 453 - * Set OPTIMAL TRANSFER LENGTH GRANULARITY 454 - */ 455 - put_unaligned_be16(1, &buf[6]); 456 - 457 - /* 458 - * Set MAXIMUM TRANSFER LENGTH 459 - */ 460 - max_sectors = min(dev->se_sub_dev->se_dev_attrib.fabric_max_sectors, 461 - dev->se_sub_dev->se_dev_attrib.hw_max_sectors); 462 - put_unaligned_be32(max_sectors, &buf[8]); 463 - 464 - /* 465 - * Set OPTIMAL TRANSFER LENGTH 466 - */ 467 - put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.optimal_sectors, &buf[12]); 468 - 469 - /* 470 - * Exit now if we don't support TP. 471 - */ 472 - if (!have_tp) 473 - return 0; 474 - 475 - /* 476 - * Set MAXIMUM UNMAP LBA COUNT 477 - */ 478 - put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.max_unmap_lba_count, &buf[20]); 479 - 480 - /* 481 - * Set MAXIMUM UNMAP BLOCK DESCRIPTOR COUNT 482 - */ 483 - put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.max_unmap_block_desc_count, 484 - &buf[24]); 485 - 486 - /* 487 - * Set OPTIMAL UNMAP GRANULARITY 488 - */ 489 - put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.unmap_granularity, &buf[28]); 490 - 491 - /* 492 - * UNMAP GRANULARITY ALIGNMENT 493 - */ 494 - put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.unmap_granularity_alignment, 495 - &buf[32]); 496 - if (dev->se_sub_dev->se_dev_attrib.unmap_granularity_alignment != 0) 497 - buf[32] |= 0x80; /* Set the UGAVALID bit */ 498 - 499 - return 0; 500 - } 501 - 502 - /* Block Device Characteristics VPD page */ 503 - static int 504 - target_emulate_evpd_b1(struct se_cmd *cmd, unsigned char *buf) 505 - { 506 - struct se_device *dev = cmd->se_dev; 507 - 508 - buf[0] = dev->transport->get_device_type(dev); 509 - buf[3] = 0x3c; 510 - buf[5] = dev->se_sub_dev->se_dev_attrib.is_nonrot ? 1 : 0; 511 - 512 - return 0; 513 - } 514 - 515 - /* Thin Provisioning VPD */ 516 - static int 517 - target_emulate_evpd_b2(struct se_cmd *cmd, unsigned char *buf) 518 - { 519 - struct se_device *dev = cmd->se_dev; 520 - 521 - /* 522 - * From sbc3r22 section 6.5.4 Thin Provisioning VPD page: 523 - * 524 - * The PAGE LENGTH field is defined in SPC-4. If the DP bit is set to 525 - * zero, then the page length shall be set to 0004h. If the DP bit 526 - * is set to one, then the page length shall be set to the value 527 - * defined in table 162. 528 - */ 529 - buf[0] = dev->transport->get_device_type(dev); 530 - 531 - /* 532 - * Set Hardcoded length mentioned above for DP=0 533 - */ 534 - put_unaligned_be16(0x0004, &buf[2]); 535 - 536 - /* 537 - * The THRESHOLD EXPONENT field indicates the threshold set size in 538 - * LBAs as a power of 2 (i.e., the threshold set size is equal to 539 - * 2(threshold exponent)). 540 - * 541 - * Note that this is currently set to 0x00 as mkp says it will be 542 - * changing again. We can enable this once it has settled in T10 543 - * and is actually used by Linux/SCSI ML code. 544 - */ 545 - buf[4] = 0x00; 546 - 547 - /* 548 - * A TPU bit set to one indicates that the device server supports 549 - * the UNMAP command (see 5.25). A TPU bit set to zero indicates 550 - * that the device server does not support the UNMAP command. 551 - */ 552 - if (dev->se_sub_dev->se_dev_attrib.emulate_tpu != 0) 553 - buf[5] = 0x80; 554 - 555 - /* 556 - * A TPWS bit set to one indicates that the device server supports 557 - * the use of the WRITE SAME (16) command (see 5.42) to unmap LBAs. 558 - * A TPWS bit set to zero indicates that the device server does not 559 - * support the use of the WRITE SAME (16) command to unmap LBAs. 560 - */ 561 - if (dev->se_sub_dev->se_dev_attrib.emulate_tpws != 0) 562 - buf[5] |= 0x40; 563 - 564 - return 0; 565 - } 566 - 567 - static int 568 - target_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf); 569 - 570 - static struct { 571 - uint8_t page; 572 - int (*emulate)(struct se_cmd *, unsigned char *); 573 - } evpd_handlers[] = { 574 - { .page = 0x00, .emulate = target_emulate_evpd_00 }, 575 - { .page = 0x80, .emulate = target_emulate_evpd_80 }, 576 - { .page = 0x83, .emulate = target_emulate_evpd_83 }, 577 - { .page = 0x86, .emulate = target_emulate_evpd_86 }, 578 - { .page = 0xb0, .emulate = target_emulate_evpd_b0 }, 579 - { .page = 0xb1, .emulate = target_emulate_evpd_b1 }, 580 - { .page = 0xb2, .emulate = target_emulate_evpd_b2 }, 581 - }; 582 - 583 - /* supported vital product data pages */ 584 - static int 585 - target_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf) 586 - { 587 - int p; 588 - 589 - /* 590 - * Only report the INQUIRY EVPD=1 pages after a valid NAA 591 - * Registered Extended LUN WWN has been set via ConfigFS 592 - * during device creation/restart. 593 - */ 594 - if (cmd->se_dev->se_sub_dev->su_dev_flags & 595 - SDF_EMULATED_VPD_UNIT_SERIAL) { 596 - buf[3] = ARRAY_SIZE(evpd_handlers); 597 - for (p = 0; p < ARRAY_SIZE(evpd_handlers); ++p) 598 - buf[p + 4] = evpd_handlers[p].page; 599 - } 600 - 601 - return 0; 602 - } 603 - 604 - int target_emulate_inquiry(struct se_cmd *cmd) 605 - { 606 - struct se_device *dev = cmd->se_dev; 607 - struct se_portal_group *tpg = cmd->se_lun->lun_sep->sep_tpg; 608 - unsigned char *buf, *map_buf; 609 - unsigned char *cdb = cmd->t_task_cdb; 610 - int p, ret; 611 - 612 - map_buf = transport_kmap_data_sg(cmd); 613 - /* 614 - * If SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC is not set, then we 615 - * know we actually allocated a full page. Otherwise, if the 616 - * data buffer is too small, allocate a temporary buffer so we 617 - * don't have to worry about overruns in all our INQUIRY 618 - * emulation handling. 619 - */ 620 - if (cmd->data_length < SE_INQUIRY_BUF && 621 - (cmd->se_cmd_flags & SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC)) { 622 - buf = kzalloc(SE_INQUIRY_BUF, GFP_KERNEL); 623 - if (!buf) { 624 - transport_kunmap_data_sg(cmd); 625 - cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; 626 - return -ENOMEM; 627 - } 628 - } else { 629 - buf = map_buf; 630 - } 631 - 632 - if (dev == tpg->tpg_virt_lun0.lun_se_dev) 633 - buf[0] = 0x3f; /* Not connected */ 634 - else 635 - buf[0] = dev->transport->get_device_type(dev); 636 - 637 - if (!(cdb[1] & 0x1)) { 638 - if (cdb[2]) { 639 - pr_err("INQUIRY with EVPD==0 but PAGE CODE=%02x\n", 640 - cdb[2]); 641 - cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; 642 - ret = -EINVAL; 643 - goto out; 644 - } 645 - 646 - ret = target_emulate_inquiry_std(cmd, buf); 647 - goto out; 648 - } 649 - 650 - for (p = 0; p < ARRAY_SIZE(evpd_handlers); ++p) { 651 - if (cdb[2] == evpd_handlers[p].page) { 652 - buf[1] = cdb[2]; 653 - ret = evpd_handlers[p].emulate(cmd, buf); 654 - goto out; 655 - } 656 - } 657 - 658 - pr_err("Unknown VPD Code: 0x%02x\n", cdb[2]); 659 - cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; 660 - ret = -EINVAL; 661 - 662 - out: 663 - if (buf != map_buf) { 664 - memcpy(map_buf, buf, cmd->data_length); 665 - kfree(buf); 666 - } 667 - transport_kunmap_data_sg(cmd); 668 - 669 - if (!ret) 670 - target_complete_cmd(cmd, GOOD); 671 - return ret; 672 - } 673 - 674 - int target_emulate_readcapacity(struct se_cmd *cmd) 675 - { 676 - struct se_device *dev = cmd->se_dev; 677 - unsigned char *buf; 678 - unsigned long long blocks_long = dev->transport->get_blocks(dev); 679 - u32 blocks; 680 - 681 - if (blocks_long >= 0x00000000ffffffff) 682 - blocks = 0xffffffff; 683 - else 684 - blocks = (u32)blocks_long; 685 - 686 - buf = transport_kmap_data_sg(cmd); 687 - 688 - buf[0] = (blocks >> 24) & 0xff; 689 - buf[1] = (blocks >> 16) & 0xff; 690 - buf[2] = (blocks >> 8) & 0xff; 691 - buf[3] = blocks & 0xff; 692 - buf[4] = (dev->se_sub_dev->se_dev_attrib.block_size >> 24) & 0xff; 693 - buf[5] = (dev->se_sub_dev->se_dev_attrib.block_size >> 16) & 0xff; 694 - buf[6] = (dev->se_sub_dev->se_dev_attrib.block_size >> 8) & 0xff; 695 - buf[7] = dev->se_sub_dev->se_dev_attrib.block_size & 0xff; 696 - 697 - transport_kunmap_data_sg(cmd); 698 - 699 - target_complete_cmd(cmd, GOOD); 700 - return 0; 701 - } 702 - 703 - int target_emulate_readcapacity_16(struct se_cmd *cmd) 704 - { 705 - struct se_device *dev = cmd->se_dev; 706 - unsigned char *buf; 707 - unsigned long long blocks = dev->transport->get_blocks(dev); 708 - 709 - buf = transport_kmap_data_sg(cmd); 710 - 711 - buf[0] = (blocks >> 56) & 0xff; 712 - buf[1] = (blocks >> 48) & 0xff; 713 - buf[2] = (blocks >> 40) & 0xff; 714 - buf[3] = (blocks >> 32) & 0xff; 715 - buf[4] = (blocks >> 24) & 0xff; 716 - buf[5] = (blocks >> 16) & 0xff; 717 - buf[6] = (blocks >> 8) & 0xff; 718 - buf[7] = blocks & 0xff; 719 - buf[8] = (dev->se_sub_dev->se_dev_attrib.block_size >> 24) & 0xff; 720 - buf[9] = (dev->se_sub_dev->se_dev_attrib.block_size >> 16) & 0xff; 721 - buf[10] = (dev->se_sub_dev->se_dev_attrib.block_size >> 8) & 0xff; 722 - buf[11] = dev->se_sub_dev->se_dev_attrib.block_size & 0xff; 723 - /* 724 - * Set Thin Provisioning Enable bit following sbc3r22 in section 725 - * READ CAPACITY (16) byte 14 if emulate_tpu or emulate_tpws is enabled. 726 - */ 727 - if (dev->se_sub_dev->se_dev_attrib.emulate_tpu || dev->se_sub_dev->se_dev_attrib.emulate_tpws) 728 - buf[14] = 0x80; 729 - 730 - transport_kunmap_data_sg(cmd); 731 - 732 - target_complete_cmd(cmd, GOOD); 733 - return 0; 734 - } 735 - 736 - static int 737 - target_modesense_rwrecovery(unsigned char *p) 738 - { 739 - p[0] = 0x01; 740 - p[1] = 0x0a; 741 - 742 - return 12; 743 - } 744 - 745 - static int 746 - target_modesense_control(struct se_device *dev, unsigned char *p) 747 - { 748 - p[0] = 0x0a; 749 - p[1] = 0x0a; 750 - p[2] = 2; 751 - /* 752 - * From spc4r23, 7.4.7 Control mode page 753 - * 754 - * The QUEUE ALGORITHM MODIFIER field (see table 368) specifies 755 - * restrictions on the algorithm used for reordering commands 756 - * having the SIMPLE task attribute (see SAM-4). 757 - * 758 - * Table 368 -- QUEUE ALGORITHM MODIFIER field 759 - * Code Description 760 - * 0h Restricted reordering 761 - * 1h Unrestricted reordering allowed 762 - * 2h to 7h Reserved 763 - * 8h to Fh Vendor specific 764 - * 765 - * A value of zero in the QUEUE ALGORITHM MODIFIER field specifies that 766 - * the device server shall order the processing sequence of commands 767 - * having the SIMPLE task attribute such that data integrity is maintained 768 - * for that I_T nexus (i.e., if the transmission of new SCSI transport protocol 769 - * requests is halted at any time, the final value of all data observable 770 - * on the medium shall be the same as if all the commands had been processed 771 - * with the ORDERED task attribute). 772 - * 773 - * A value of one in the QUEUE ALGORITHM MODIFIER field specifies that the 774 - * device server may reorder the processing sequence of commands having the 775 - * SIMPLE task attribute in any manner. Any data integrity exposures related to 776 - * command sequence order shall be explicitly handled by the application client 777 - * through the selection of appropriate ommands and task attributes. 778 - */ 779 - p[3] = (dev->se_sub_dev->se_dev_attrib.emulate_rest_reord == 1) ? 0x00 : 0x10; 780 - /* 781 - * From spc4r17, section 7.4.6 Control mode Page 782 - * 783 - * Unit Attention interlocks control (UN_INTLCK_CTRL) to code 00b 784 - * 785 - * 00b: The logical unit shall clear any unit attention condition 786 - * reported in the same I_T_L_Q nexus transaction as a CHECK CONDITION 787 - * status and shall not establish a unit attention condition when a com- 788 - * mand is completed with BUSY, TASK SET FULL, or RESERVATION CONFLICT 789 - * status. 790 - * 791 - * 10b: The logical unit shall not clear any unit attention condition 792 - * reported in the same I_T_L_Q nexus transaction as a CHECK CONDITION 793 - * status and shall not establish a unit attention condition when 794 - * a command is completed with BUSY, TASK SET FULL, or RESERVATION 795 - * CONFLICT status. 796 - * 797 - * 11b a The logical unit shall not clear any unit attention condition 798 - * reported in the same I_T_L_Q nexus transaction as a CHECK CONDITION 799 - * status and shall establish a unit attention condition for the 800 - * initiator port associated with the I_T nexus on which the BUSY, 801 - * TASK SET FULL, or RESERVATION CONFLICT status is being returned. 802 - * Depending on the status, the additional sense code shall be set to 803 - * PREVIOUS BUSY STATUS, PREVIOUS TASK SET FULL STATUS, or PREVIOUS 804 - * RESERVATION CONFLICT STATUS. Until it is cleared by a REQUEST SENSE 805 - * command, a unit attention condition shall be established only once 806 - * for a BUSY, TASK SET FULL, or RESERVATION CONFLICT status regardless 807 - * to the number of commands completed with one of those status codes. 808 - */ 809 - p[4] = (dev->se_sub_dev->se_dev_attrib.emulate_ua_intlck_ctrl == 2) ? 0x30 : 810 - (dev->se_sub_dev->se_dev_attrib.emulate_ua_intlck_ctrl == 1) ? 0x20 : 0x00; 811 - /* 812 - * From spc4r17, section 7.4.6 Control mode Page 813 - * 814 - * Task Aborted Status (TAS) bit set to zero. 815 - * 816 - * A task aborted status (TAS) bit set to zero specifies that aborted 817 - * tasks shall be terminated by the device server without any response 818 - * to the application client. A TAS bit set to one specifies that tasks 819 - * aborted by the actions of an I_T nexus other than the I_T nexus on 820 - * which the command was received shall be completed with TASK ABORTED 821 - * status (see SAM-4). 822 - */ 823 - p[5] = (dev->se_sub_dev->se_dev_attrib.emulate_tas) ? 0x40 : 0x00; 824 - p[8] = 0xff; 825 - p[9] = 0xff; 826 - p[11] = 30; 827 - 828 - return 12; 829 - } 830 - 831 - static int 832 - target_modesense_caching(struct se_device *dev, unsigned char *p) 833 - { 834 - p[0] = 0x08; 835 - p[1] = 0x12; 836 - if (dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) 837 - p[2] = 0x04; /* Write Cache Enable */ 838 - p[12] = 0x20; /* Disabled Read Ahead */ 839 - 840 - return 20; 841 - } 842 - 843 - static void 844 - target_modesense_write_protect(unsigned char *buf, int type) 845 - { 846 - /* 847 - * I believe that the WP bit (bit 7) in the mode header is the same for 848 - * all device types.. 849 - */ 850 - switch (type) { 851 - case TYPE_DISK: 852 - case TYPE_TAPE: 853 - default: 854 - buf[0] |= 0x80; /* WP bit */ 855 - break; 856 - } 857 - } 858 - 859 - static void 860 - target_modesense_dpofua(unsigned char *buf, int type) 861 - { 862 - switch (type) { 863 - case TYPE_DISK: 864 - buf[0] |= 0x10; /* DPOFUA bit */ 865 - break; 866 - default: 867 - break; 868 - } 869 - } 870 - 871 - int target_emulate_modesense(struct se_cmd *cmd) 872 - { 873 - struct se_device *dev = cmd->se_dev; 874 - char *cdb = cmd->t_task_cdb; 875 - unsigned char *rbuf; 876 - int type = dev->transport->get_device_type(dev); 877 - int ten = (cmd->t_task_cdb[0] == MODE_SENSE_10); 878 - int offset = ten ? 8 : 4; 879 - int length = 0; 880 - unsigned char buf[SE_MODE_PAGE_BUF]; 881 - 882 - memset(buf, 0, SE_MODE_PAGE_BUF); 883 - 884 - switch (cdb[2] & 0x3f) { 885 - case 0x01: 886 - length = target_modesense_rwrecovery(&buf[offset]); 887 - break; 888 - case 0x08: 889 - length = target_modesense_caching(dev, &buf[offset]); 890 - break; 891 - case 0x0a: 892 - length = target_modesense_control(dev, &buf[offset]); 893 - break; 894 - case 0x3f: 895 - length = target_modesense_rwrecovery(&buf[offset]); 896 - length += target_modesense_caching(dev, &buf[offset+length]); 897 - length += target_modesense_control(dev, &buf[offset+length]); 898 - break; 899 - default: 900 - pr_err("MODE SENSE: unimplemented page/subpage: 0x%02x/0x%02x\n", 901 - cdb[2] & 0x3f, cdb[3]); 902 - cmd->scsi_sense_reason = TCM_UNKNOWN_MODE_PAGE; 903 - return -EINVAL; 904 - } 905 - offset += length; 906 - 907 - if (ten) { 908 - offset -= 2; 909 - buf[0] = (offset >> 8) & 0xff; 910 - buf[1] = offset & 0xff; 911 - 912 - if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) || 913 - (cmd->se_deve && 914 - (cmd->se_deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY))) 915 - target_modesense_write_protect(&buf[3], type); 916 - 917 - if ((dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) && 918 - (dev->se_sub_dev->se_dev_attrib.emulate_fua_write > 0)) 919 - target_modesense_dpofua(&buf[3], type); 920 - 921 - if ((offset + 2) > cmd->data_length) 922 - offset = cmd->data_length; 923 - 924 - } else { 925 - offset -= 1; 926 - buf[0] = offset & 0xff; 927 - 928 - if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) || 929 - (cmd->se_deve && 930 - (cmd->se_deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY))) 931 - target_modesense_write_protect(&buf[2], type); 932 - 933 - if ((dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) && 934 - (dev->se_sub_dev->se_dev_attrib.emulate_fua_write > 0)) 935 - target_modesense_dpofua(&buf[2], type); 936 - 937 - if ((offset + 1) > cmd->data_length) 938 - offset = cmd->data_length; 939 - } 940 - 941 - rbuf = transport_kmap_data_sg(cmd); 942 - memcpy(rbuf, buf, offset); 943 - transport_kunmap_data_sg(cmd); 944 - 945 - target_complete_cmd(cmd, GOOD); 946 - return 0; 947 - } 948 - 949 - int target_emulate_request_sense(struct se_cmd *cmd) 950 - { 951 - unsigned char *cdb = cmd->t_task_cdb; 952 - unsigned char *buf; 953 - u8 ua_asc = 0, ua_ascq = 0; 954 - int err = 0; 955 - 956 - if (cdb[1] & 0x01) { 957 - pr_err("REQUEST_SENSE description emulation not" 958 - " supported\n"); 959 - cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; 960 - return -ENOSYS; 961 - } 962 - 963 - buf = transport_kmap_data_sg(cmd); 964 - 965 - if (!core_scsi3_ua_clear_for_request_sense(cmd, &ua_asc, &ua_ascq)) { 966 - /* 967 - * CURRENT ERROR, UNIT ATTENTION 968 - */ 969 - buf[0] = 0x70; 970 - buf[SPC_SENSE_KEY_OFFSET] = UNIT_ATTENTION; 971 - 972 - if (cmd->data_length < 18) { 973 - buf[7] = 0x00; 974 - err = -EINVAL; 975 - goto end; 976 - } 977 - /* 978 - * The Additional Sense Code (ASC) from the UNIT ATTENTION 979 - */ 980 - buf[SPC_ASC_KEY_OFFSET] = ua_asc; 981 - buf[SPC_ASCQ_KEY_OFFSET] = ua_ascq; 982 - buf[7] = 0x0A; 983 - } else { 984 - /* 985 - * CURRENT ERROR, NO SENSE 986 - */ 987 - buf[0] = 0x70; 988 - buf[SPC_SENSE_KEY_OFFSET] = NO_SENSE; 989 - 990 - if (cmd->data_length < 18) { 991 - buf[7] = 0x00; 992 - err = -EINVAL; 993 - goto end; 994 - } 995 - /* 996 - * NO ADDITIONAL SENSE INFORMATION 997 - */ 998 - buf[SPC_ASC_KEY_OFFSET] = 0x00; 999 - buf[7] = 0x0A; 1000 - } 1001 - 1002 - end: 1003 - transport_kunmap_data_sg(cmd); 1004 - target_complete_cmd(cmd, GOOD); 1005 - return 0; 1006 - } 1007 - 1008 - /* 1009 - * Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support. 1010 - * Note this is not used for TCM/pSCSI passthrough 1011 - */ 1012 - int target_emulate_unmap(struct se_cmd *cmd) 1013 - { 1014 - struct se_device *dev = cmd->se_dev; 1015 - unsigned char *buf, *ptr = NULL; 1016 - unsigned char *cdb = &cmd->t_task_cdb[0]; 1017 - sector_t lba; 1018 - unsigned int size = cmd->data_length, range; 1019 - int ret = 0, offset; 1020 - unsigned short dl, bd_dl; 1021 - 1022 - if (!dev->transport->do_discard) { 1023 - pr_err("UNMAP emulation not supported for: %s\n", 1024 - dev->transport->name); 1025 - cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 1026 - return -ENOSYS; 1027 - } 1028 - 1029 - /* First UNMAP block descriptor starts at 8 byte offset */ 1030 - offset = 8; 1031 - size -= 8; 1032 - dl = get_unaligned_be16(&cdb[0]); 1033 - bd_dl = get_unaligned_be16(&cdb[2]); 1034 - 1035 - buf = transport_kmap_data_sg(cmd); 1036 - 1037 - ptr = &buf[offset]; 1038 - pr_debug("UNMAP: Sub: %s Using dl: %hu bd_dl: %hu size: %hu" 1039 - " ptr: %p\n", dev->transport->name, dl, bd_dl, size, ptr); 1040 - 1041 - while (size) { 1042 - lba = get_unaligned_be64(&ptr[0]); 1043 - range = get_unaligned_be32(&ptr[8]); 1044 - pr_debug("UNMAP: Using lba: %llu and range: %u\n", 1045 - (unsigned long long)lba, range); 1046 - 1047 - ret = dev->transport->do_discard(dev, lba, range); 1048 - if (ret < 0) { 1049 - pr_err("blkdev_issue_discard() failed: %d\n", 1050 - ret); 1051 - goto err; 1052 - } 1053 - 1054 - ptr += 16; 1055 - size -= 16; 1056 - } 1057 - 1058 - err: 1059 - transport_kunmap_data_sg(cmd); 1060 - if (!ret) 1061 - target_complete_cmd(cmd, GOOD); 1062 - return ret; 1063 - } 1064 - 1065 - /* 1066 - * Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support. 1067 - * Note this is not used for TCM/pSCSI passthrough 1068 - */ 1069 - int target_emulate_write_same(struct se_cmd *cmd) 1070 - { 1071 - struct se_device *dev = cmd->se_dev; 1072 - sector_t range; 1073 - sector_t lba = cmd->t_task_lba; 1074 - u32 num_blocks; 1075 - int ret; 1076 - 1077 - if (!dev->transport->do_discard) { 1078 - pr_err("WRITE_SAME emulation not supported" 1079 - " for: %s\n", dev->transport->name); 1080 - cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 1081 - return -ENOSYS; 1082 - } 1083 - 1084 - if (cmd->t_task_cdb[0] == WRITE_SAME) 1085 - num_blocks = get_unaligned_be16(&cmd->t_task_cdb[7]); 1086 - else if (cmd->t_task_cdb[0] == WRITE_SAME_16) 1087 - num_blocks = get_unaligned_be32(&cmd->t_task_cdb[10]); 1088 - else /* WRITE_SAME_32 via VARIABLE_LENGTH_CMD */ 1089 - num_blocks = get_unaligned_be32(&cmd->t_task_cdb[28]); 1090 - 1091 - /* 1092 - * Use the explicit range when non zero is supplied, otherwise calculate 1093 - * the remaining range based on ->get_blocks() - starting LBA. 1094 - */ 1095 - if (num_blocks != 0) 1096 - range = num_blocks; 1097 - else 1098 - range = (dev->transport->get_blocks(dev) - lba) + 1; 1099 - 1100 - pr_debug("WRITE_SAME UNMAP: LBA: %llu Range: %llu\n", 1101 - (unsigned long long)lba, (unsigned long long)range); 1102 - 1103 - ret = dev->transport->do_discard(dev, lba, range); 1104 - if (ret < 0) { 1105 - pr_debug("blkdev_issue_discard() failed for WRITE_SAME\n"); 1106 - return ret; 1107 - } 1108 - 1109 - target_complete_cmd(cmd, GOOD); 1110 - return 0; 1111 - } 1112 - 1113 - int target_emulate_synchronize_cache(struct se_cmd *cmd) 1114 - { 1115 - if (!cmd->se_dev->transport->do_sync_cache) { 1116 - pr_err("SYNCHRONIZE_CACHE emulation not supported" 1117 - " for: %s\n", cmd->se_dev->transport->name); 1118 - cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 1119 - return -ENOSYS; 1120 - } 1121 - 1122 - cmd->se_dev->transport->do_sync_cache(cmd); 1123 - return 0; 1124 - } 1125 - 1126 - int target_emulate_noop(struct se_cmd *cmd) 1127 - { 1128 - target_complete_cmd(cmd, GOOD); 1129 - return 0; 1130 - }
+1 -11
drivers/target/target_core_internal.h
··· 4 4 /* target_core_alua.c */ 5 5 extern struct t10_alua_lu_gp *default_lu_gp; 6 6 7 - /* target_core_cdb.c */ 8 - int target_emulate_inquiry(struct se_cmd *cmd); 9 - int target_emulate_readcapacity(struct se_cmd *cmd); 10 - int target_emulate_readcapacity_16(struct se_cmd *cmd); 11 - int target_emulate_modesense(struct se_cmd *cmd); 12 - int target_emulate_request_sense(struct se_cmd *cmd); 13 - int target_emulate_unmap(struct se_cmd *cmd); 14 - int target_emulate_write_same(struct se_cmd *cmd); 15 - int target_emulate_synchronize_cache(struct se_cmd *cmd); 16 - int target_emulate_noop(struct se_cmd *cmd); 17 - 18 7 /* target_core_device.c */ 19 8 struct se_dev_entry *core_get_se_deve_from_rtpi(struct se_node_acl *, u16); 20 9 int core_free_device_list_for_node(struct se_node_acl *, ··· 105 116 bool target_stop_cmd(struct se_cmd *cmd, unsigned long *flags); 106 117 int transport_clear_lun_from_sessions(struct se_lun *); 107 118 void transport_send_task_abort(struct se_cmd *); 119 + int target_cmd_size_check(struct se_cmd *cmd, unsigned int size); 108 120 109 121 /* target_core_stat.c */ 110 122 void target_stat_setup_dev_default_groups(struct se_subsystem_dev *);
+36 -453
drivers/target/target_core_pscsi.c
··· 1022 1022 return -ENOMEM; 1023 1023 } 1024 1024 1025 - static inline u32 pscsi_get_sectors_6( 1026 - unsigned char *cdb, 1027 - struct se_cmd *cmd, 1028 - int *ret) 1025 + static int pscsi_parse_cdb(struct se_cmd *cmd) 1029 1026 { 1030 - struct se_device *dev = cmd->se_dev; 1031 - 1032 - /* 1033 - * Assume TYPE_DISK for non struct se_device objects. 1034 - * Use 8-bit sector value. 1035 - */ 1036 - if (!dev) 1037 - goto type_disk; 1038 - 1039 - /* 1040 - * Use 24-bit allocation length for TYPE_TAPE. 1041 - */ 1042 - if (dev->transport->get_device_type(dev) == TYPE_TAPE) 1043 - return (u32)(cdb[2] << 16) + (cdb[3] << 8) + cdb[4]; 1044 - 1045 - /* 1046 - * Everything else assume TYPE_DISK Sector CDB location. 1047 - * Use 8-bit sector value. SBC-3 says: 1048 - * 1049 - * A TRANSFER LENGTH field set to zero specifies that 256 1050 - * logical blocks shall be written. Any other value 1051 - * specifies the number of logical blocks that shall be 1052 - * written. 1053 - */ 1054 - type_disk: 1055 - return cdb[4] ? : 256; 1056 - } 1057 - 1058 - static inline u32 pscsi_get_sectors_10( 1059 - unsigned char *cdb, 1060 - struct se_cmd *cmd, 1061 - int *ret) 1062 - { 1063 - struct se_device *dev = cmd->se_dev; 1064 - 1065 - /* 1066 - * Assume TYPE_DISK for non struct se_device objects. 1067 - * Use 16-bit sector value. 1068 - */ 1069 - if (!dev) 1070 - goto type_disk; 1071 - 1072 - /* 1073 - * XXX_10 is not defined in SSC, throw an exception 1074 - */ 1075 - if (dev->transport->get_device_type(dev) == TYPE_TAPE) { 1076 - *ret = -EINVAL; 1077 - return 0; 1078 - } 1079 - 1080 - /* 1081 - * Everything else assume TYPE_DISK Sector CDB location. 1082 - * Use 16-bit sector value. 1083 - */ 1084 - type_disk: 1085 - return (u32)(cdb[7] << 8) + cdb[8]; 1086 - } 1087 - 1088 - static inline u32 pscsi_get_sectors_12( 1089 - unsigned char *cdb, 1090 - struct se_cmd *cmd, 1091 - int *ret) 1092 - { 1093 - struct se_device *dev = cmd->se_dev; 1094 - 1095 - /* 1096 - * Assume TYPE_DISK for non struct se_device objects. 1097 - * Use 32-bit sector value. 1098 - */ 1099 - if (!dev) 1100 - goto type_disk; 1101 - 1102 - /* 1103 - * XXX_12 is not defined in SSC, throw an exception 1104 - */ 1105 - if (dev->transport->get_device_type(dev) == TYPE_TAPE) { 1106 - *ret = -EINVAL; 1107 - return 0; 1108 - } 1109 - 1110 - /* 1111 - * Everything else assume TYPE_DISK Sector CDB location. 1112 - * Use 32-bit sector value. 1113 - */ 1114 - type_disk: 1115 - return (u32)(cdb[6] << 24) + (cdb[7] << 16) + (cdb[8] << 8) + cdb[9]; 1116 - } 1117 - 1118 - static inline u32 pscsi_get_sectors_16( 1119 - unsigned char *cdb, 1120 - struct se_cmd *cmd, 1121 - int *ret) 1122 - { 1123 - struct se_device *dev = cmd->se_dev; 1124 - 1125 - /* 1126 - * Assume TYPE_DISK for non struct se_device objects. 1127 - * Use 32-bit sector value. 1128 - */ 1129 - if (!dev) 1130 - goto type_disk; 1131 - 1132 - /* 1133 - * Use 24-bit allocation length for TYPE_TAPE. 1134 - */ 1135 - if (dev->transport->get_device_type(dev) == TYPE_TAPE) 1136 - return (u32)(cdb[12] << 16) + (cdb[13] << 8) + cdb[14]; 1137 - 1138 - type_disk: 1139 - return (u32)(cdb[10] << 24) + (cdb[11] << 16) + 1140 - (cdb[12] << 8) + cdb[13]; 1141 - } 1142 - 1143 - /* 1144 - * Used for VARIABLE_LENGTH_CDB WRITE_32 and READ_32 variants 1145 - */ 1146 - static inline u32 pscsi_get_sectors_32( 1147 - unsigned char *cdb, 1148 - struct se_cmd *cmd, 1149 - int *ret) 1150 - { 1151 - /* 1152 - * Assume TYPE_DISK for non struct se_device objects. 1153 - * Use 32-bit sector value. 1154 - */ 1155 - return (u32)(cdb[28] << 24) + (cdb[29] << 16) + 1156 - (cdb[30] << 8) + cdb[31]; 1157 - 1158 - } 1159 - 1160 - static inline u32 pscsi_get_lba_21(unsigned char *cdb) 1161 - { 1162 - return ((cdb[1] & 0x1f) << 16) | (cdb[2] << 8) | cdb[3]; 1163 - } 1164 - 1165 - static inline u32 pscsi_get_lba_32(unsigned char *cdb) 1166 - { 1167 - return (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; 1168 - } 1169 - 1170 - static inline unsigned long long pscsi_get_lba_64(unsigned char *cdb) 1171 - { 1172 - unsigned int __v1, __v2; 1173 - 1174 - __v1 = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; 1175 - __v2 = (cdb[6] << 24) | (cdb[7] << 16) | (cdb[8] << 8) | cdb[9]; 1176 - 1177 - return ((unsigned long long)__v2) | (unsigned long long)__v1 << 32; 1178 - } 1179 - 1180 - /* 1181 - * For VARIABLE_LENGTH_CDB w/ 32 byte extended CDBs 1182 - */ 1183 - static inline unsigned long long pscsi_get_lba_64_ext(unsigned char *cdb) 1184 - { 1185 - unsigned int __v1, __v2; 1186 - 1187 - __v1 = (cdb[12] << 24) | (cdb[13] << 16) | (cdb[14] << 8) | cdb[15]; 1188 - __v2 = (cdb[16] << 24) | (cdb[17] << 16) | (cdb[18] << 8) | cdb[19]; 1189 - 1190 - return ((unsigned long long)__v2) | (unsigned long long)__v1 << 32; 1191 - } 1192 - 1193 - 1194 - static inline u32 pscsi_get_size( 1195 - u32 sectors, 1196 - unsigned char *cdb, 1197 - struct se_cmd *cmd) 1198 - { 1199 - struct se_device *dev = cmd->se_dev; 1200 - 1201 - if (dev->transport->get_device_type(dev) == TYPE_TAPE) { 1202 - if (cdb[1] & 1) { /* sectors */ 1203 - return dev->se_sub_dev->se_dev_attrib.block_size * sectors; 1204 - } else /* bytes */ 1205 - return sectors; 1206 - } 1207 - 1208 - pr_debug("Returning block_size: %u, sectors: %u == %u for" 1209 - " %s object\n", dev->se_sub_dev->se_dev_attrib.block_size, 1210 - sectors, dev->se_sub_dev->se_dev_attrib.block_size * sectors, 1211 - dev->transport->name); 1212 - 1213 - return dev->se_sub_dev->se_dev_attrib.block_size * sectors; 1214 - } 1215 - 1216 - static int pscsi_parse_cdb(struct se_cmd *cmd, unsigned int *size) 1217 - { 1218 - struct se_device *dev = cmd->se_dev; 1219 - struct se_subsystem_dev *su_dev = dev->se_sub_dev; 1220 1027 unsigned char *cdb = cmd->t_task_cdb; 1221 - int sector_ret = 0; 1222 - u32 sectors = 0; 1223 - u16 service_action; 1028 + unsigned int dummy_size; 1224 1029 int ret; 1225 1030 1226 - if (cmd->se_cmd_flags & SCF_BIDI) 1227 - goto out_unsupported_cdb; 1228 - 1229 - switch (cdb[0]) { 1230 - case READ_6: 1231 - sectors = pscsi_get_sectors_6(cdb, cmd, &sector_ret); 1232 - if (sector_ret) 1233 - goto out_unsupported_cdb; 1234 - *size = pscsi_get_size(sectors, cdb, cmd); 1235 - cmd->t_task_lba = pscsi_get_lba_21(cdb); 1236 - cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 1237 - break; 1238 - case READ_10: 1239 - sectors = pscsi_get_sectors_10(cdb, cmd, &sector_ret); 1240 - if (sector_ret) 1241 - goto out_unsupported_cdb; 1242 - *size = pscsi_get_size(sectors, cdb, cmd); 1243 - cmd->t_task_lba = pscsi_get_lba_32(cdb); 1244 - cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 1245 - break; 1246 - case READ_12: 1247 - sectors = pscsi_get_sectors_12(cdb, cmd, &sector_ret); 1248 - if (sector_ret) 1249 - goto out_unsupported_cdb; 1250 - *size = pscsi_get_size(sectors, cdb, cmd); 1251 - cmd->t_task_lba = pscsi_get_lba_32(cdb); 1252 - cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 1253 - break; 1254 - case READ_16: 1255 - sectors = pscsi_get_sectors_16(cdb, cmd, &sector_ret); 1256 - if (sector_ret) 1257 - goto out_unsupported_cdb; 1258 - *size = pscsi_get_size(sectors, cdb, cmd); 1259 - cmd->t_task_lba = pscsi_get_lba_64(cdb); 1260 - cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 1261 - break; 1262 - case WRITE_6: 1263 - sectors = pscsi_get_sectors_6(cdb, cmd, &sector_ret); 1264 - if (sector_ret) 1265 - goto out_unsupported_cdb; 1266 - *size = pscsi_get_size(sectors, cdb, cmd); 1267 - cmd->t_task_lba = pscsi_get_lba_21(cdb); 1268 - cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 1269 - break; 1270 - case WRITE_10: 1271 - case WRITE_VERIFY: 1272 - sectors = pscsi_get_sectors_10(cdb, cmd, &sector_ret); 1273 - if (sector_ret) 1274 - goto out_unsupported_cdb; 1275 - *size = pscsi_get_size(sectors, cdb, cmd); 1276 - cmd->t_task_lba = pscsi_get_lba_32(cdb); 1277 - if (cdb[1] & 0x8) 1278 - cmd->se_cmd_flags |= SCF_FUA; 1279 - cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 1280 - break; 1281 - case WRITE_12: 1282 - sectors = pscsi_get_sectors_12(cdb, cmd, &sector_ret); 1283 - if (sector_ret) 1284 - goto out_unsupported_cdb; 1285 - *size = pscsi_get_size(sectors, cdb, cmd); 1286 - cmd->t_task_lba = pscsi_get_lba_32(cdb); 1287 - if (cdb[1] & 0x8) 1288 - cmd->se_cmd_flags |= SCF_FUA; 1289 - cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 1290 - break; 1291 - case WRITE_16: 1292 - sectors = pscsi_get_sectors_16(cdb, cmd, &sector_ret); 1293 - if (sector_ret) 1294 - goto out_unsupported_cdb; 1295 - *size = pscsi_get_size(sectors, cdb, cmd); 1296 - cmd->t_task_lba = pscsi_get_lba_64(cdb); 1297 - if (cdb[1] & 0x8) 1298 - cmd->se_cmd_flags |= SCF_FUA; 1299 - cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 1300 - break; 1301 - case VARIABLE_LENGTH_CMD: 1302 - service_action = get_unaligned_be16(&cdb[8]); 1303 - switch (service_action) { 1304 - case WRITE_SAME_32: 1305 - sectors = pscsi_get_sectors_32(cdb, cmd, &sector_ret); 1306 - if (sector_ret) 1307 - goto out_unsupported_cdb; 1308 - 1309 - if (!sectors) { 1310 - pr_err("WSNZ=1, WRITE_SAME w/sectors=0 not" 1311 - " supported\n"); 1312 - goto out_invalid_cdb_field; 1313 - } 1314 - 1315 - *size = pscsi_get_size(1, cdb, cmd); 1316 - cmd->t_task_lba = get_unaligned_be64(&cdb[12]); 1317 - break; 1318 - default: 1319 - pr_err("VARIABLE_LENGTH_CMD service action" 1320 - " 0x%04x not supported\n", service_action); 1321 - goto out_unsupported_cdb; 1322 - } 1323 - break; 1324 - case GPCMD_READ_BUFFER_CAPACITY: 1325 - case GPCMD_SEND_OPC: 1326 - *size = (cdb[7] << 8) + cdb[8]; 1327 - break; 1328 - case READ_BLOCK_LIMITS: 1329 - *size = READ_BLOCK_LEN; 1330 - break; 1331 - case GPCMD_GET_CONFIGURATION: 1332 - case GPCMD_READ_FORMAT_CAPACITIES: 1333 - case GPCMD_READ_DISC_INFO: 1334 - case GPCMD_READ_TRACK_RZONE_INFO: 1335 - *size = (cdb[7] << 8) + cdb[8]; 1336 - break; 1337 - case GPCMD_MECHANISM_STATUS: 1338 - case GPCMD_READ_DVD_STRUCTURE: 1339 - *size = (cdb[8] << 8) + cdb[9]; 1340 - break; 1341 - case READ_POSITION: 1342 - *size = READ_POSITION_LEN; 1343 - break; 1344 - case READ_BUFFER: 1345 - *size = (cdb[6] << 16) + (cdb[7] << 8) + cdb[8]; 1346 - break; 1347 - case READ_CAPACITY: 1348 - *size = READ_CAP_LEN; 1349 - break; 1350 - case READ_MEDIA_SERIAL_NUMBER: 1351 - case SERVICE_ACTION_IN: 1352 - case ACCESS_CONTROL_IN: 1353 - case ACCESS_CONTROL_OUT: 1354 - *size = (cdb[10] << 24) | (cdb[11] << 16) | 1355 - (cdb[12] << 8) | cdb[13]; 1356 - break; 1357 - case READ_TOC: 1358 - *size = cdb[8]; 1359 - break; 1360 - case READ_ELEMENT_STATUS: 1361 - *size = 65536 * cdb[7] + 256 * cdb[8] + cdb[9]; 1362 - break; 1363 - case SYNCHRONIZE_CACHE: 1364 - case SYNCHRONIZE_CACHE_16: 1365 - /* 1366 - * Extract LBA and range to be flushed for emulated SYNCHRONIZE_CACHE 1367 - */ 1368 - if (cdb[0] == SYNCHRONIZE_CACHE) { 1369 - sectors = pscsi_get_sectors_10(cdb, cmd, &sector_ret); 1370 - cmd->t_task_lba = pscsi_get_lba_32(cdb); 1371 - } else { 1372 - sectors = pscsi_get_sectors_16(cdb, cmd, &sector_ret); 1373 - cmd->t_task_lba = pscsi_get_lba_64(cdb); 1374 - } 1375 - if (sector_ret) 1376 - goto out_unsupported_cdb; 1377 - 1378 - *size = pscsi_get_size(sectors, cdb, cmd); 1379 - break; 1380 - case UNMAP: 1381 - *size = get_unaligned_be16(&cdb[7]); 1382 - break; 1383 - case WRITE_SAME_16: 1384 - sectors = pscsi_get_sectors_16(cdb, cmd, &sector_ret); 1385 - if (sector_ret) 1386 - goto out_unsupported_cdb; 1387 - 1388 - if (!sectors) { 1389 - pr_err("WSNZ=1, WRITE_SAME w/sectors=0 not supported\n"); 1390 - goto out_invalid_cdb_field; 1391 - } 1392 - 1393 - *size = pscsi_get_size(1, cdb, cmd); 1394 - cmd->t_task_lba = get_unaligned_be64(&cdb[2]); 1395 - break; 1396 - case WRITE_SAME: 1397 - sectors = pscsi_get_sectors_10(cdb, cmd, &sector_ret); 1398 - if (sector_ret) 1399 - goto out_unsupported_cdb; 1400 - 1401 - if (!sectors) { 1402 - pr_err("WSNZ=1, WRITE_SAME w/sectors=0 not supported\n"); 1403 - goto out_invalid_cdb_field; 1404 - } 1405 - 1406 - *size = pscsi_get_size(1, cdb, cmd); 1407 - cmd->t_task_lba = get_unaligned_be32(&cdb[2]); 1408 - break; 1409 - case ALLOW_MEDIUM_REMOVAL: 1410 - case ERASE: 1411 - case REZERO_UNIT: 1412 - case SEEK_10: 1413 - case SPACE: 1414 - case START_STOP: 1415 - case VERIFY: 1416 - case WRITE_FILEMARKS: 1417 - case GPCMD_CLOSE_TRACK: 1418 - case INITIALIZE_ELEMENT_STATUS: 1419 - case GPCMD_LOAD_UNLOAD: 1420 - case GPCMD_SET_SPEED: 1421 - case MOVE_MEDIUM: 1422 - *size = 0; 1423 - break; 1424 - case GET_EVENT_STATUS_NOTIFICATION: 1425 - *size = (cdb[7] << 8) | cdb[8]; 1426 - break; 1427 - case ATA_16: 1428 - switch (cdb[2] & 0x3) { /* T_LENGTH */ 1429 - case 0x0: 1430 - sectors = 0; 1431 - break; 1432 - case 0x1: 1433 - sectors = (((cdb[1] & 0x1) ? cdb[3] : 0) << 8) | cdb[4]; 1434 - break; 1435 - case 0x2: 1436 - sectors = (((cdb[1] & 0x1) ? cdb[5] : 0) << 8) | cdb[6]; 1437 - break; 1438 - case 0x3: 1439 - pr_err("T_LENGTH=0x3 not supported for ATA_16\n"); 1440 - goto out_invalid_cdb_field; 1441 - } 1442 - 1443 - /* BYTE_BLOCK */ 1444 - if (cdb[2] & 0x4) { 1445 - /* BLOCK T_TYPE: 512 or sector */ 1446 - *size = sectors * ((cdb[2] & 0x10) ? 1447 - dev->se_sub_dev->se_dev_attrib.block_size : 512); 1448 - } else { 1449 - /* BYTE */ 1450 - *size = sectors; 1451 - } 1452 - break; 1453 - default: 1454 - ret = spc_parse_cdb(cmd, size, true); 1455 - if (ret) 1456 - return ret; 1031 + if (cmd->se_cmd_flags & SCF_BIDI) { 1032 + cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION; 1033 + cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 1034 + return -EINVAL; 1457 1035 } 1458 1036 1459 - if (cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) { 1460 - if (sectors > su_dev->se_dev_attrib.fabric_max_sectors) { 1461 - printk_ratelimited(KERN_ERR "SCSI OP %02xh with too" 1462 - " big sectors %u exceeds fabric_max_sectors:" 1463 - " %u\n", cdb[0], sectors, 1464 - su_dev->se_dev_attrib.fabric_max_sectors); 1465 - goto out_invalid_cdb_field; 1466 - } 1467 - if (sectors > su_dev->se_dev_attrib.hw_max_sectors) { 1468 - printk_ratelimited(KERN_ERR "SCSI OP %02xh with too" 1469 - " big sectors %u exceeds backend hw_max_sectors:" 1470 - " %u\n", cdb[0], sectors, 1471 - su_dev->se_dev_attrib.hw_max_sectors); 1472 - goto out_invalid_cdb_field; 1473 - } 1037 + /* 1038 + * For REPORT LUNS we always need to emulate the respone, and for everything 1039 + * related to persistent reservations and ALUA we might optionally use our 1040 + * handlers before passing on the command to the physical hardware. 1041 + */ 1042 + switch (cdb[0]) { 1043 + case REPORT_LUNS: 1044 + case PERSISTENT_RESERVE_IN: 1045 + case PERSISTENT_RESERVE_OUT: 1046 + case RELEASE: 1047 + case RELEASE_10: 1048 + case RESERVE: 1049 + case RESERVE_10: 1050 + ret = spc_parse_cdb(cmd, &dummy_size); 1051 + if (ret) 1052 + return ret; 1053 + break; 1054 + case READ_6: 1055 + case READ_10: 1056 + case READ_12: 1057 + case READ_16: 1058 + case WRITE_6: 1059 + case WRITE_10: 1060 + case WRITE_12: 1061 + case WRITE_16: 1062 + case WRITE_VERIFY: 1063 + cmd->se_cmd_flags |= SCF_SCSI_DATA_CDB; 1064 + break; 1065 + default: 1066 + break; 1474 1067 } 1475 1068 1476 1069 return 0; 1477 - 1478 - out_unsupported_cdb: 1479 - cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION; 1480 - cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 1481 - return -EINVAL; 1482 - out_invalid_cdb_field: 1483 - cmd->se_cmd_flags |= SCF_SCSI_CDB_EXCEPTION; 1484 - cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; 1485 - return -EINVAL; 1486 1070 } 1487 - 1488 1071 1489 1072 static int pscsi_execute_cmd(struct se_cmd *cmd, struct scatterlist *sgl, 1490 1073 u32 sgl_nents, enum dma_data_direction data_direction)
+220 -19
drivers/target/target_core_sbc.c
··· 37 37 #include "target_core_ua.h" 38 38 39 39 40 + static int sbc_emulate_readcapacity(struct se_cmd *cmd) 41 + { 42 + struct se_device *dev = cmd->se_dev; 43 + unsigned char *buf; 44 + unsigned long long blocks_long = dev->transport->get_blocks(dev); 45 + u32 blocks; 46 + 47 + if (blocks_long >= 0x00000000ffffffff) 48 + blocks = 0xffffffff; 49 + else 50 + blocks = (u32)blocks_long; 51 + 52 + buf = transport_kmap_data_sg(cmd); 53 + 54 + buf[0] = (blocks >> 24) & 0xff; 55 + buf[1] = (blocks >> 16) & 0xff; 56 + buf[2] = (blocks >> 8) & 0xff; 57 + buf[3] = blocks & 0xff; 58 + buf[4] = (dev->se_sub_dev->se_dev_attrib.block_size >> 24) & 0xff; 59 + buf[5] = (dev->se_sub_dev->se_dev_attrib.block_size >> 16) & 0xff; 60 + buf[6] = (dev->se_sub_dev->se_dev_attrib.block_size >> 8) & 0xff; 61 + buf[7] = dev->se_sub_dev->se_dev_attrib.block_size & 0xff; 62 + 63 + transport_kunmap_data_sg(cmd); 64 + 65 + target_complete_cmd(cmd, GOOD); 66 + return 0; 67 + } 68 + 69 + static int sbc_emulate_readcapacity_16(struct se_cmd *cmd) 70 + { 71 + struct se_device *dev = cmd->se_dev; 72 + unsigned char *buf; 73 + unsigned long long blocks = dev->transport->get_blocks(dev); 74 + 75 + buf = transport_kmap_data_sg(cmd); 76 + 77 + buf[0] = (blocks >> 56) & 0xff; 78 + buf[1] = (blocks >> 48) & 0xff; 79 + buf[2] = (blocks >> 40) & 0xff; 80 + buf[3] = (blocks >> 32) & 0xff; 81 + buf[4] = (blocks >> 24) & 0xff; 82 + buf[5] = (blocks >> 16) & 0xff; 83 + buf[6] = (blocks >> 8) & 0xff; 84 + buf[7] = blocks & 0xff; 85 + buf[8] = (dev->se_sub_dev->se_dev_attrib.block_size >> 24) & 0xff; 86 + buf[9] = (dev->se_sub_dev->se_dev_attrib.block_size >> 16) & 0xff; 87 + buf[10] = (dev->se_sub_dev->se_dev_attrib.block_size >> 8) & 0xff; 88 + buf[11] = dev->se_sub_dev->se_dev_attrib.block_size & 0xff; 89 + /* 90 + * Set Thin Provisioning Enable bit following sbc3r22 in section 91 + * READ CAPACITY (16) byte 14 if emulate_tpu or emulate_tpws is enabled. 92 + */ 93 + if (dev->se_sub_dev->se_dev_attrib.emulate_tpu || dev->se_sub_dev->se_dev_attrib.emulate_tpws) 94 + buf[14] = 0x80; 95 + 96 + transport_kunmap_data_sg(cmd); 97 + 98 + target_complete_cmd(cmd, GOOD); 99 + return 0; 100 + } 101 + 102 + /* 103 + * Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support. 104 + * Note this is not used for TCM/pSCSI passthrough 105 + */ 106 + static int sbc_emulate_unmap(struct se_cmd *cmd) 107 + { 108 + struct se_device *dev = cmd->se_dev; 109 + unsigned char *buf, *ptr = NULL; 110 + unsigned char *cdb = &cmd->t_task_cdb[0]; 111 + sector_t lba; 112 + unsigned int size = cmd->data_length, range; 113 + int ret = 0, offset; 114 + unsigned short dl, bd_dl; 115 + 116 + if (!dev->transport->do_discard) { 117 + pr_err("UNMAP emulation not supported for: %s\n", 118 + dev->transport->name); 119 + cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 120 + return -ENOSYS; 121 + } 122 + 123 + /* First UNMAP block descriptor starts at 8 byte offset */ 124 + offset = 8; 125 + size -= 8; 126 + dl = get_unaligned_be16(&cdb[0]); 127 + bd_dl = get_unaligned_be16(&cdb[2]); 128 + 129 + buf = transport_kmap_data_sg(cmd); 130 + 131 + ptr = &buf[offset]; 132 + pr_debug("UNMAP: Sub: %s Using dl: %hu bd_dl: %hu size: %hu" 133 + " ptr: %p\n", dev->transport->name, dl, bd_dl, size, ptr); 134 + 135 + while (size) { 136 + lba = get_unaligned_be64(&ptr[0]); 137 + range = get_unaligned_be32(&ptr[8]); 138 + pr_debug("UNMAP: Using lba: %llu and range: %u\n", 139 + (unsigned long long)lba, range); 140 + 141 + ret = dev->transport->do_discard(dev, lba, range); 142 + if (ret < 0) { 143 + pr_err("blkdev_issue_discard() failed: %d\n", 144 + ret); 145 + goto err; 146 + } 147 + 148 + ptr += 16; 149 + size -= 16; 150 + } 151 + 152 + err: 153 + transport_kunmap_data_sg(cmd); 154 + if (!ret) 155 + target_complete_cmd(cmd, GOOD); 156 + return ret; 157 + } 158 + 159 + /* 160 + * Used for TCM/IBLOCK and TCM/FILEIO for block/blk-lib.c level discard support. 161 + * Note this is not used for TCM/pSCSI passthrough 162 + */ 163 + static int sbc_emulate_write_same(struct se_cmd *cmd) 164 + { 165 + struct se_device *dev = cmd->se_dev; 166 + sector_t range; 167 + sector_t lba = cmd->t_task_lba; 168 + u32 num_blocks; 169 + int ret; 170 + 171 + if (!dev->transport->do_discard) { 172 + pr_err("WRITE_SAME emulation not supported" 173 + " for: %s\n", dev->transport->name); 174 + cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 175 + return -ENOSYS; 176 + } 177 + 178 + if (cmd->t_task_cdb[0] == WRITE_SAME) 179 + num_blocks = get_unaligned_be16(&cmd->t_task_cdb[7]); 180 + else if (cmd->t_task_cdb[0] == WRITE_SAME_16) 181 + num_blocks = get_unaligned_be32(&cmd->t_task_cdb[10]); 182 + else /* WRITE_SAME_32 via VARIABLE_LENGTH_CMD */ 183 + num_blocks = get_unaligned_be32(&cmd->t_task_cdb[28]); 184 + 185 + /* 186 + * Use the explicit range when non zero is supplied, otherwise calculate 187 + * the remaining range based on ->get_blocks() - starting LBA. 188 + */ 189 + if (num_blocks != 0) 190 + range = num_blocks; 191 + else 192 + range = (dev->transport->get_blocks(dev) - lba) + 1; 193 + 194 + pr_debug("WRITE_SAME UNMAP: LBA: %llu Range: %llu\n", 195 + (unsigned long long)lba, (unsigned long long)range); 196 + 197 + ret = dev->transport->do_discard(dev, lba, range); 198 + if (ret < 0) { 199 + pr_debug("blkdev_issue_discard() failed for WRITE_SAME\n"); 200 + return ret; 201 + } 202 + 203 + target_complete_cmd(cmd, GOOD); 204 + return 0; 205 + } 206 + 207 + static int sbc_emulate_synchronize_cache(struct se_cmd *cmd) 208 + { 209 + if (!cmd->se_dev->transport->do_sync_cache) { 210 + pr_err("SYNCHRONIZE_CACHE emulation not supported" 211 + " for: %s\n", cmd->se_dev->transport->name); 212 + cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; 213 + return -ENOSYS; 214 + } 215 + 216 + cmd->se_dev->transport->do_sync_cache(cmd); 217 + return 0; 218 + } 219 + 220 + static int sbc_emulate_verify(struct se_cmd *cmd) 221 + { 222 + target_complete_cmd(cmd, GOOD); 223 + return 0; 224 + } 225 + 40 226 static inline u32 sbc_get_size(struct se_cmd *cmd, u32 sectors) 41 227 { 42 228 return cmd->se_dev->se_sub_dev->se_dev_attrib.block_size * sectors; ··· 395 209 kfree(buf); 396 210 } 397 211 398 - int sbc_parse_cdb(struct se_cmd *cmd, unsigned int *size) 212 + int sbc_parse_cdb(struct se_cmd *cmd) 399 213 { 400 214 struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev; 401 215 struct se_device *dev = cmd->se_dev; 402 216 unsigned char *cdb = cmd->t_task_cdb; 217 + unsigned int size; 403 218 u32 sectors = 0; 404 219 int ret; 405 220 ··· 498 311 goto out_invalid_cdb_field; 499 312 } 500 313 501 - *size = sbc_get_size(cmd, 1); 314 + size = sbc_get_size(cmd, 1); 502 315 cmd->t_task_lba = get_unaligned_be64(&cdb[12]); 503 316 504 317 if (sbc_write_same_supported(dev, &cdb[10]) < 0) 505 318 goto out_unsupported_cdb; 506 - cmd->execute_cmd = target_emulate_write_same; 319 + cmd->execute_cmd = sbc_emulate_write_same; 507 320 break; 508 321 default: 509 322 pr_err("VARIABLE_LENGTH_CMD service action" ··· 513 326 break; 514 327 } 515 328 case READ_CAPACITY: 516 - *size = READ_CAP_LEN; 517 - cmd->execute_cmd = target_emulate_readcapacity; 329 + size = READ_CAP_LEN; 330 + cmd->execute_cmd = sbc_emulate_readcapacity; 518 331 break; 519 332 case SERVICE_ACTION_IN: 520 333 switch (cmd->t_task_cdb[1] & 0x1f) { 521 334 case SAI_READ_CAPACITY_16: 522 - cmd->execute_cmd = target_emulate_readcapacity_16; 335 + cmd->execute_cmd = sbc_emulate_readcapacity_16; 523 336 break; 524 337 default: 525 338 pr_err("Unsupported SA: 0x%02x\n", 526 339 cmd->t_task_cdb[1] & 0x1f); 527 340 goto out_invalid_cdb_field; 528 341 } 529 - *size = (cdb[10] << 24) | (cdb[11] << 16) | 342 + size = (cdb[10] << 24) | (cdb[11] << 16) | 530 343 (cdb[12] << 8) | cdb[13]; 531 344 break; 532 345 case SYNCHRONIZE_CACHE: ··· 542 355 cmd->t_task_lba = transport_lba_64(cdb); 543 356 } 544 357 545 - *size = sbc_get_size(cmd, sectors); 358 + size = sbc_get_size(cmd, sectors); 546 359 547 360 /* 548 361 * Check to ensure that LBA + Range does not exceed past end of ··· 552 365 if (sbc_check_valid_sectors(cmd) < 0) 553 366 goto out_invalid_cdb_field; 554 367 } 555 - cmd->execute_cmd = target_emulate_synchronize_cache; 368 + cmd->execute_cmd = sbc_emulate_synchronize_cache; 556 369 break; 557 370 case UNMAP: 558 - *size = get_unaligned_be16(&cdb[7]); 559 - cmd->execute_cmd = target_emulate_unmap; 371 + size = get_unaligned_be16(&cdb[7]); 372 + cmd->execute_cmd = sbc_emulate_unmap; 560 373 break; 561 374 case WRITE_SAME_16: 562 375 sectors = transport_get_sectors_16(cdb); ··· 565 378 goto out_invalid_cdb_field; 566 379 } 567 380 568 - *size = sbc_get_size(cmd, 1); 381 + size = sbc_get_size(cmd, 1); 569 382 cmd->t_task_lba = get_unaligned_be64(&cdb[2]); 570 383 571 384 if (sbc_write_same_supported(dev, &cdb[1]) < 0) 572 385 goto out_unsupported_cdb; 573 - cmd->execute_cmd = target_emulate_write_same; 386 + cmd->execute_cmd = sbc_emulate_write_same; 574 387 break; 575 388 case WRITE_SAME: 576 389 sectors = transport_get_sectors_10(cdb); ··· 579 392 goto out_invalid_cdb_field; 580 393 } 581 394 582 - *size = sbc_get_size(cmd, 1); 395 + size = sbc_get_size(cmd, 1); 583 396 cmd->t_task_lba = get_unaligned_be32(&cdb[2]); 584 397 585 398 /* ··· 588 401 */ 589 402 if (sbc_write_same_supported(dev, &cdb[1]) < 0) 590 403 goto out_unsupported_cdb; 591 - cmd->execute_cmd = target_emulate_write_same; 404 + cmd->execute_cmd = sbc_emulate_write_same; 592 405 break; 593 406 case VERIFY: 594 - *size = 0; 595 - cmd->execute_cmd = target_emulate_noop; 407 + size = 0; 408 + cmd->execute_cmd = sbc_emulate_verify; 596 409 break; 597 410 default: 598 - ret = spc_parse_cdb(cmd, size, false); 411 + ret = spc_parse_cdb(cmd, &size); 599 412 if (ret) 600 413 return ret; 601 414 } ··· 605 418 goto out_unsupported_cdb; 606 419 607 420 if (cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) { 421 + unsigned long long end_lba; 422 + 608 423 if (sectors > su_dev->se_dev_attrib.fabric_max_sectors) { 609 424 printk_ratelimited(KERN_ERR "SCSI OP %02xh with too" 610 425 " big sectors %u exceeds fabric_max_sectors:" ··· 622 433 goto out_invalid_cdb_field; 623 434 } 624 435 625 - *size = sbc_get_size(cmd, sectors); 436 + end_lba = dev->transport->get_blocks(dev) + 1; 437 + if (cmd->t_task_lba + sectors > end_lba) { 438 + pr_err("cmd exceeds last lba %llu " 439 + "(lba %llu, sectors %u)\n", 440 + end_lba, cmd->t_task_lba, sectors); 441 + goto out_invalid_cdb_field; 442 + } 443 + 444 + size = sbc_get_size(cmd, sectors); 626 445 } 446 + 447 + ret = target_cmd_size_check(cmd, size); 448 + if (ret < 0) 449 + return ret; 627 450 628 451 return 0; 629 452
+905 -11
drivers/target/target_core_spc.c
··· 39 39 #include "target_core_ua.h" 40 40 41 41 42 - int spc_parse_cdb(struct se_cmd *cmd, unsigned int *size, bool passthrough) 42 + static void spc_fill_alua_data(struct se_port *port, unsigned char *buf) 43 + { 44 + struct t10_alua_tg_pt_gp *tg_pt_gp; 45 + struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem; 46 + 47 + /* 48 + * Set SCCS for MAINTENANCE_IN + REPORT_TARGET_PORT_GROUPS. 49 + */ 50 + buf[5] = 0x80; 51 + 52 + /* 53 + * Set TPGS field for explict and/or implict ALUA access type 54 + * and opteration. 55 + * 56 + * See spc4r17 section 6.4.2 Table 135 57 + */ 58 + if (!port) 59 + return; 60 + tg_pt_gp_mem = port->sep_alua_tg_pt_gp_mem; 61 + if (!tg_pt_gp_mem) 62 + return; 63 + 64 + spin_lock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 65 + tg_pt_gp = tg_pt_gp_mem->tg_pt_gp; 66 + if (tg_pt_gp) 67 + buf[5] |= tg_pt_gp->tg_pt_gp_alua_access_type; 68 + spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 69 + } 70 + 71 + static int spc_emulate_inquiry_std(struct se_cmd *cmd, char *buf) 72 + { 73 + struct se_lun *lun = cmd->se_lun; 74 + struct se_device *dev = cmd->se_dev; 75 + 76 + /* Set RMB (removable media) for tape devices */ 77 + if (dev->transport->get_device_type(dev) == TYPE_TAPE) 78 + buf[1] = 0x80; 79 + 80 + buf[2] = dev->transport->get_device_rev(dev); 81 + 82 + /* 83 + * NORMACA and HISUP = 0, RESPONSE DATA FORMAT = 2 84 + * 85 + * SPC4 says: 86 + * A RESPONSE DATA FORMAT field set to 2h indicates that the 87 + * standard INQUIRY data is in the format defined in this 88 + * standard. Response data format values less than 2h are 89 + * obsolete. Response data format values greater than 2h are 90 + * reserved. 91 + */ 92 + buf[3] = 2; 93 + 94 + /* 95 + * Enable SCCS and TPGS fields for Emulated ALUA 96 + */ 97 + if (dev->se_sub_dev->t10_alua.alua_type == SPC3_ALUA_EMULATED) 98 + spc_fill_alua_data(lun->lun_sep, buf); 99 + 100 + buf[7] = 0x2; /* CmdQue=1 */ 101 + 102 + snprintf(&buf[8], 8, "LIO-ORG"); 103 + snprintf(&buf[16], 16, "%s", dev->se_sub_dev->t10_wwn.model); 104 + snprintf(&buf[32], 4, "%s", dev->se_sub_dev->t10_wwn.revision); 105 + buf[4] = 31; /* Set additional length to 31 */ 106 + 107 + return 0; 108 + } 109 + 110 + /* unit serial number */ 111 + static int spc_emulate_evpd_80(struct se_cmd *cmd, unsigned char *buf) 112 + { 113 + struct se_device *dev = cmd->se_dev; 114 + u16 len = 0; 115 + 116 + if (dev->se_sub_dev->su_dev_flags & 117 + SDF_EMULATED_VPD_UNIT_SERIAL) { 118 + u32 unit_serial_len; 119 + 120 + unit_serial_len = strlen(dev->se_sub_dev->t10_wwn.unit_serial); 121 + unit_serial_len++; /* For NULL Terminator */ 122 + 123 + len += sprintf(&buf[4], "%s", 124 + dev->se_sub_dev->t10_wwn.unit_serial); 125 + len++; /* Extra Byte for NULL Terminator */ 126 + buf[3] = len; 127 + } 128 + return 0; 129 + } 130 + 131 + static void spc_parse_naa_6h_vendor_specific(struct se_device *dev, 132 + unsigned char *buf) 133 + { 134 + unsigned char *p = &dev->se_sub_dev->t10_wwn.unit_serial[0]; 135 + int cnt; 136 + bool next = true; 137 + 138 + /* 139 + * Generate up to 36 bits of VENDOR SPECIFIC IDENTIFIER starting on 140 + * byte 3 bit 3-0 for NAA IEEE Registered Extended DESIGNATOR field 141 + * format, followed by 64 bits of VENDOR SPECIFIC IDENTIFIER EXTENSION 142 + * to complete the payload. These are based from VPD=0x80 PRODUCT SERIAL 143 + * NUMBER set via vpd_unit_serial in target_core_configfs.c to ensure 144 + * per device uniqeness. 145 + */ 146 + for (cnt = 0; *p && cnt < 13; p++) { 147 + int val = hex_to_bin(*p); 148 + 149 + if (val < 0) 150 + continue; 151 + 152 + if (next) { 153 + next = false; 154 + buf[cnt++] |= val; 155 + } else { 156 + next = true; 157 + buf[cnt] = val << 4; 158 + } 159 + } 160 + } 161 + 162 + /* 163 + * Device identification VPD, for a complete list of 164 + * DESIGNATOR TYPEs see spc4r17 Table 459. 165 + */ 166 + static int spc_emulate_evpd_83(struct se_cmd *cmd, unsigned char *buf) 167 + { 168 + struct se_device *dev = cmd->se_dev; 169 + struct se_lun *lun = cmd->se_lun; 170 + struct se_port *port = NULL; 171 + struct se_portal_group *tpg = NULL; 172 + struct t10_alua_lu_gp_member *lu_gp_mem; 173 + struct t10_alua_tg_pt_gp *tg_pt_gp; 174 + struct t10_alua_tg_pt_gp_member *tg_pt_gp_mem; 175 + unsigned char *prod = &dev->se_sub_dev->t10_wwn.model[0]; 176 + u32 prod_len; 177 + u32 unit_serial_len, off = 0; 178 + u16 len = 0, id_len; 179 + 180 + off = 4; 181 + 182 + /* 183 + * NAA IEEE Registered Extended Assigned designator format, see 184 + * spc4r17 section 7.7.3.6.5 185 + * 186 + * We depend upon a target_core_mod/ConfigFS provided 187 + * /sys/kernel/config/target/core/$HBA/$DEV/wwn/vpd_unit_serial 188 + * value in order to return the NAA id. 189 + */ 190 + if (!(dev->se_sub_dev->su_dev_flags & SDF_EMULATED_VPD_UNIT_SERIAL)) 191 + goto check_t10_vend_desc; 192 + 193 + /* CODE SET == Binary */ 194 + buf[off++] = 0x1; 195 + 196 + /* Set ASSOCIATION == addressed logical unit: 0)b */ 197 + buf[off] = 0x00; 198 + 199 + /* Identifier/Designator type == NAA identifier */ 200 + buf[off++] |= 0x3; 201 + off++; 202 + 203 + /* Identifier/Designator length */ 204 + buf[off++] = 0x10; 205 + 206 + /* 207 + * Start NAA IEEE Registered Extended Identifier/Designator 208 + */ 209 + buf[off++] = (0x6 << 4); 210 + 211 + /* 212 + * Use OpenFabrics IEEE Company ID: 00 14 05 213 + */ 214 + buf[off++] = 0x01; 215 + buf[off++] = 0x40; 216 + buf[off] = (0x5 << 4); 217 + 218 + /* 219 + * Return ConfigFS Unit Serial Number information for 220 + * VENDOR_SPECIFIC_IDENTIFIER and 221 + * VENDOR_SPECIFIC_IDENTIFIER_EXTENTION 222 + */ 223 + spc_parse_naa_6h_vendor_specific(dev, &buf[off]); 224 + 225 + len = 20; 226 + off = (len + 4); 227 + 228 + check_t10_vend_desc: 229 + /* 230 + * T10 Vendor Identifier Page, see spc4r17 section 7.7.3.4 231 + */ 232 + id_len = 8; /* For Vendor field */ 233 + prod_len = 4; /* For VPD Header */ 234 + prod_len += 8; /* For Vendor field */ 235 + prod_len += strlen(prod); 236 + prod_len++; /* For : */ 237 + 238 + if (dev->se_sub_dev->su_dev_flags & 239 + SDF_EMULATED_VPD_UNIT_SERIAL) { 240 + unit_serial_len = 241 + strlen(&dev->se_sub_dev->t10_wwn.unit_serial[0]); 242 + unit_serial_len++; /* For NULL Terminator */ 243 + 244 + id_len += sprintf(&buf[off+12], "%s:%s", prod, 245 + &dev->se_sub_dev->t10_wwn.unit_serial[0]); 246 + } 247 + buf[off] = 0x2; /* ASCII */ 248 + buf[off+1] = 0x1; /* T10 Vendor ID */ 249 + buf[off+2] = 0x0; 250 + memcpy(&buf[off+4], "LIO-ORG", 8); 251 + /* Extra Byte for NULL Terminator */ 252 + id_len++; 253 + /* Identifier Length */ 254 + buf[off+3] = id_len; 255 + /* Header size for Designation descriptor */ 256 + len += (id_len + 4); 257 + off += (id_len + 4); 258 + /* 259 + * struct se_port is only set for INQUIRY VPD=1 through $FABRIC_MOD 260 + */ 261 + port = lun->lun_sep; 262 + if (port) { 263 + struct t10_alua_lu_gp *lu_gp; 264 + u32 padding, scsi_name_len; 265 + u16 lu_gp_id = 0; 266 + u16 tg_pt_gp_id = 0; 267 + u16 tpgt; 268 + 269 + tpg = port->sep_tpg; 270 + /* 271 + * Relative target port identifer, see spc4r17 272 + * section 7.7.3.7 273 + * 274 + * Get the PROTOCOL IDENTIFIER as defined by spc4r17 275 + * section 7.5.1 Table 362 276 + */ 277 + buf[off] = 278 + (tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4); 279 + buf[off++] |= 0x1; /* CODE SET == Binary */ 280 + buf[off] = 0x80; /* Set PIV=1 */ 281 + /* Set ASSOCIATION == target port: 01b */ 282 + buf[off] |= 0x10; 283 + /* DESIGNATOR TYPE == Relative target port identifer */ 284 + buf[off++] |= 0x4; 285 + off++; /* Skip over Reserved */ 286 + buf[off++] = 4; /* DESIGNATOR LENGTH */ 287 + /* Skip over Obsolete field in RTPI payload 288 + * in Table 472 */ 289 + off += 2; 290 + buf[off++] = ((port->sep_rtpi >> 8) & 0xff); 291 + buf[off++] = (port->sep_rtpi & 0xff); 292 + len += 8; /* Header size + Designation descriptor */ 293 + /* 294 + * Target port group identifier, see spc4r17 295 + * section 7.7.3.8 296 + * 297 + * Get the PROTOCOL IDENTIFIER as defined by spc4r17 298 + * section 7.5.1 Table 362 299 + */ 300 + if (dev->se_sub_dev->t10_alua.alua_type != 301 + SPC3_ALUA_EMULATED) 302 + goto check_scsi_name; 303 + 304 + tg_pt_gp_mem = port->sep_alua_tg_pt_gp_mem; 305 + if (!tg_pt_gp_mem) 306 + goto check_lu_gp; 307 + 308 + spin_lock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 309 + tg_pt_gp = tg_pt_gp_mem->tg_pt_gp; 310 + if (!tg_pt_gp) { 311 + spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 312 + goto check_lu_gp; 313 + } 314 + tg_pt_gp_id = tg_pt_gp->tg_pt_gp_id; 315 + spin_unlock(&tg_pt_gp_mem->tg_pt_gp_mem_lock); 316 + 317 + buf[off] = 318 + (tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4); 319 + buf[off++] |= 0x1; /* CODE SET == Binary */ 320 + buf[off] = 0x80; /* Set PIV=1 */ 321 + /* Set ASSOCIATION == target port: 01b */ 322 + buf[off] |= 0x10; 323 + /* DESIGNATOR TYPE == Target port group identifier */ 324 + buf[off++] |= 0x5; 325 + off++; /* Skip over Reserved */ 326 + buf[off++] = 4; /* DESIGNATOR LENGTH */ 327 + off += 2; /* Skip over Reserved Field */ 328 + buf[off++] = ((tg_pt_gp_id >> 8) & 0xff); 329 + buf[off++] = (tg_pt_gp_id & 0xff); 330 + len += 8; /* Header size + Designation descriptor */ 331 + /* 332 + * Logical Unit Group identifier, see spc4r17 333 + * section 7.7.3.8 334 + */ 335 + check_lu_gp: 336 + lu_gp_mem = dev->dev_alua_lu_gp_mem; 337 + if (!lu_gp_mem) 338 + goto check_scsi_name; 339 + 340 + spin_lock(&lu_gp_mem->lu_gp_mem_lock); 341 + lu_gp = lu_gp_mem->lu_gp; 342 + if (!lu_gp) { 343 + spin_unlock(&lu_gp_mem->lu_gp_mem_lock); 344 + goto check_scsi_name; 345 + } 346 + lu_gp_id = lu_gp->lu_gp_id; 347 + spin_unlock(&lu_gp_mem->lu_gp_mem_lock); 348 + 349 + buf[off++] |= 0x1; /* CODE SET == Binary */ 350 + /* DESIGNATOR TYPE == Logical Unit Group identifier */ 351 + buf[off++] |= 0x6; 352 + off++; /* Skip over Reserved */ 353 + buf[off++] = 4; /* DESIGNATOR LENGTH */ 354 + off += 2; /* Skip over Reserved Field */ 355 + buf[off++] = ((lu_gp_id >> 8) & 0xff); 356 + buf[off++] = (lu_gp_id & 0xff); 357 + len += 8; /* Header size + Designation descriptor */ 358 + /* 359 + * SCSI name string designator, see spc4r17 360 + * section 7.7.3.11 361 + * 362 + * Get the PROTOCOL IDENTIFIER as defined by spc4r17 363 + * section 7.5.1 Table 362 364 + */ 365 + check_scsi_name: 366 + scsi_name_len = strlen(tpg->se_tpg_tfo->tpg_get_wwn(tpg)); 367 + /* UTF-8 ",t,0x<16-bit TPGT>" + NULL Terminator */ 368 + scsi_name_len += 10; 369 + /* Check for 4-byte padding */ 370 + padding = ((-scsi_name_len) & 3); 371 + if (padding != 0) 372 + scsi_name_len += padding; 373 + /* Header size + Designation descriptor */ 374 + scsi_name_len += 4; 375 + 376 + buf[off] = 377 + (tpg->se_tpg_tfo->get_fabric_proto_ident(tpg) << 4); 378 + buf[off++] |= 0x3; /* CODE SET == UTF-8 */ 379 + buf[off] = 0x80; /* Set PIV=1 */ 380 + /* Set ASSOCIATION == target port: 01b */ 381 + buf[off] |= 0x10; 382 + /* DESIGNATOR TYPE == SCSI name string */ 383 + buf[off++] |= 0x8; 384 + off += 2; /* Skip over Reserved and length */ 385 + /* 386 + * SCSI name string identifer containing, $FABRIC_MOD 387 + * dependent information. For LIO-Target and iSCSI 388 + * Target Port, this means "<iSCSI name>,t,0x<TPGT> in 389 + * UTF-8 encoding. 390 + */ 391 + tpgt = tpg->se_tpg_tfo->tpg_get_tag(tpg); 392 + scsi_name_len = sprintf(&buf[off], "%s,t,0x%04x", 393 + tpg->se_tpg_tfo->tpg_get_wwn(tpg), tpgt); 394 + scsi_name_len += 1 /* Include NULL terminator */; 395 + /* 396 + * The null-terminated, null-padded (see 4.4.2) SCSI 397 + * NAME STRING field contains a UTF-8 format string. 398 + * The number of bytes in the SCSI NAME STRING field 399 + * (i.e., the value in the DESIGNATOR LENGTH field) 400 + * shall be no larger than 256 and shall be a multiple 401 + * of four. 402 + */ 403 + if (padding) 404 + scsi_name_len += padding; 405 + 406 + buf[off-1] = scsi_name_len; 407 + off += scsi_name_len; 408 + /* Header size + Designation descriptor */ 409 + len += (scsi_name_len + 4); 410 + } 411 + buf[2] = ((len >> 8) & 0xff); 412 + buf[3] = (len & 0xff); /* Page Length for VPD 0x83 */ 413 + return 0; 414 + } 415 + 416 + /* Extended INQUIRY Data VPD Page */ 417 + static int spc_emulate_evpd_86(struct se_cmd *cmd, unsigned char *buf) 418 + { 419 + buf[3] = 0x3c; 420 + /* Set HEADSUP, ORDSUP, SIMPSUP */ 421 + buf[5] = 0x07; 422 + 423 + /* If WriteCache emulation is enabled, set V_SUP */ 424 + if (cmd->se_dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) 425 + buf[6] = 0x01; 426 + return 0; 427 + } 428 + 429 + /* Block Limits VPD page */ 430 + static int spc_emulate_evpd_b0(struct se_cmd *cmd, unsigned char *buf) 431 + { 432 + struct se_device *dev = cmd->se_dev; 433 + u32 max_sectors; 434 + int have_tp = 0; 435 + 436 + /* 437 + * Following spc3r22 section 6.5.3 Block Limits VPD page, when 438 + * emulate_tpu=1 or emulate_tpws=1 we will be expect a 439 + * different page length for Thin Provisioning. 440 + */ 441 + if (dev->se_sub_dev->se_dev_attrib.emulate_tpu || dev->se_sub_dev->se_dev_attrib.emulate_tpws) 442 + have_tp = 1; 443 + 444 + buf[0] = dev->transport->get_device_type(dev); 445 + buf[3] = have_tp ? 0x3c : 0x10; 446 + 447 + /* Set WSNZ to 1 */ 448 + buf[4] = 0x01; 449 + 450 + /* 451 + * Set OPTIMAL TRANSFER LENGTH GRANULARITY 452 + */ 453 + put_unaligned_be16(1, &buf[6]); 454 + 455 + /* 456 + * Set MAXIMUM TRANSFER LENGTH 457 + */ 458 + max_sectors = min(dev->se_sub_dev->se_dev_attrib.fabric_max_sectors, 459 + dev->se_sub_dev->se_dev_attrib.hw_max_sectors); 460 + put_unaligned_be32(max_sectors, &buf[8]); 461 + 462 + /* 463 + * Set OPTIMAL TRANSFER LENGTH 464 + */ 465 + put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.optimal_sectors, &buf[12]); 466 + 467 + /* 468 + * Exit now if we don't support TP. 469 + */ 470 + if (!have_tp) 471 + return 0; 472 + 473 + /* 474 + * Set MAXIMUM UNMAP LBA COUNT 475 + */ 476 + put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.max_unmap_lba_count, &buf[20]); 477 + 478 + /* 479 + * Set MAXIMUM UNMAP BLOCK DESCRIPTOR COUNT 480 + */ 481 + put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.max_unmap_block_desc_count, 482 + &buf[24]); 483 + 484 + /* 485 + * Set OPTIMAL UNMAP GRANULARITY 486 + */ 487 + put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.unmap_granularity, &buf[28]); 488 + 489 + /* 490 + * UNMAP GRANULARITY ALIGNMENT 491 + */ 492 + put_unaligned_be32(dev->se_sub_dev->se_dev_attrib.unmap_granularity_alignment, 493 + &buf[32]); 494 + if (dev->se_sub_dev->se_dev_attrib.unmap_granularity_alignment != 0) 495 + buf[32] |= 0x80; /* Set the UGAVALID bit */ 496 + 497 + return 0; 498 + } 499 + 500 + /* Block Device Characteristics VPD page */ 501 + static int spc_emulate_evpd_b1(struct se_cmd *cmd, unsigned char *buf) 502 + { 503 + struct se_device *dev = cmd->se_dev; 504 + 505 + buf[0] = dev->transport->get_device_type(dev); 506 + buf[3] = 0x3c; 507 + buf[5] = dev->se_sub_dev->se_dev_attrib.is_nonrot ? 1 : 0; 508 + 509 + return 0; 510 + } 511 + 512 + /* Thin Provisioning VPD */ 513 + static int spc_emulate_evpd_b2(struct se_cmd *cmd, unsigned char *buf) 514 + { 515 + struct se_device *dev = cmd->se_dev; 516 + 517 + /* 518 + * From spc3r22 section 6.5.4 Thin Provisioning VPD page: 519 + * 520 + * The PAGE LENGTH field is defined in SPC-4. If the DP bit is set to 521 + * zero, then the page length shall be set to 0004h. If the DP bit 522 + * is set to one, then the page length shall be set to the value 523 + * defined in table 162. 524 + */ 525 + buf[0] = dev->transport->get_device_type(dev); 526 + 527 + /* 528 + * Set Hardcoded length mentioned above for DP=0 529 + */ 530 + put_unaligned_be16(0x0004, &buf[2]); 531 + 532 + /* 533 + * The THRESHOLD EXPONENT field indicates the threshold set size in 534 + * LBAs as a power of 2 (i.e., the threshold set size is equal to 535 + * 2(threshold exponent)). 536 + * 537 + * Note that this is currently set to 0x00 as mkp says it will be 538 + * changing again. We can enable this once it has settled in T10 539 + * and is actually used by Linux/SCSI ML code. 540 + */ 541 + buf[4] = 0x00; 542 + 543 + /* 544 + * A TPU bit set to one indicates that the device server supports 545 + * the UNMAP command (see 5.25). A TPU bit set to zero indicates 546 + * that the device server does not support the UNMAP command. 547 + */ 548 + if (dev->se_sub_dev->se_dev_attrib.emulate_tpu != 0) 549 + buf[5] = 0x80; 550 + 551 + /* 552 + * A TPWS bit set to one indicates that the device server supports 553 + * the use of the WRITE SAME (16) command (see 5.42) to unmap LBAs. 554 + * A TPWS bit set to zero indicates that the device server does not 555 + * support the use of the WRITE SAME (16) command to unmap LBAs. 556 + */ 557 + if (dev->se_sub_dev->se_dev_attrib.emulate_tpws != 0) 558 + buf[5] |= 0x40; 559 + 560 + return 0; 561 + } 562 + 563 + static int spc_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf); 564 + 565 + static struct { 566 + uint8_t page; 567 + int (*emulate)(struct se_cmd *, unsigned char *); 568 + } evpd_handlers[] = { 569 + { .page = 0x00, .emulate = spc_emulate_evpd_00 }, 570 + { .page = 0x80, .emulate = spc_emulate_evpd_80 }, 571 + { .page = 0x83, .emulate = spc_emulate_evpd_83 }, 572 + { .page = 0x86, .emulate = spc_emulate_evpd_86 }, 573 + { .page = 0xb0, .emulate = spc_emulate_evpd_b0 }, 574 + { .page = 0xb1, .emulate = spc_emulate_evpd_b1 }, 575 + { .page = 0xb2, .emulate = spc_emulate_evpd_b2 }, 576 + }; 577 + 578 + /* supported vital product data pages */ 579 + static int spc_emulate_evpd_00(struct se_cmd *cmd, unsigned char *buf) 580 + { 581 + int p; 582 + 583 + /* 584 + * Only report the INQUIRY EVPD=1 pages after a valid NAA 585 + * Registered Extended LUN WWN has been set via ConfigFS 586 + * during device creation/restart. 587 + */ 588 + if (cmd->se_dev->se_sub_dev->su_dev_flags & 589 + SDF_EMULATED_VPD_UNIT_SERIAL) { 590 + buf[3] = ARRAY_SIZE(evpd_handlers); 591 + for (p = 0; p < ARRAY_SIZE(evpd_handlers); ++p) 592 + buf[p + 4] = evpd_handlers[p].page; 593 + } 594 + 595 + return 0; 596 + } 597 + 598 + static int spc_emulate_inquiry(struct se_cmd *cmd) 599 + { 600 + struct se_device *dev = cmd->se_dev; 601 + struct se_portal_group *tpg = cmd->se_lun->lun_sep->sep_tpg; 602 + unsigned char *buf, *map_buf; 603 + unsigned char *cdb = cmd->t_task_cdb; 604 + int p, ret; 605 + 606 + map_buf = transport_kmap_data_sg(cmd); 607 + /* 608 + * If SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC is not set, then we 609 + * know we actually allocated a full page. Otherwise, if the 610 + * data buffer is too small, allocate a temporary buffer so we 611 + * don't have to worry about overruns in all our INQUIRY 612 + * emulation handling. 613 + */ 614 + if (cmd->data_length < SE_INQUIRY_BUF && 615 + (cmd->se_cmd_flags & SCF_PASSTHROUGH_SG_TO_MEM_NOALLOC)) { 616 + buf = kzalloc(SE_INQUIRY_BUF, GFP_KERNEL); 617 + if (!buf) { 618 + transport_kunmap_data_sg(cmd); 619 + cmd->scsi_sense_reason = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; 620 + return -ENOMEM; 621 + } 622 + } else { 623 + buf = map_buf; 624 + } 625 + 626 + if (dev == tpg->tpg_virt_lun0.lun_se_dev) 627 + buf[0] = 0x3f; /* Not connected */ 628 + else 629 + buf[0] = dev->transport->get_device_type(dev); 630 + 631 + if (!(cdb[1] & 0x1)) { 632 + if (cdb[2]) { 633 + pr_err("INQUIRY with EVPD==0 but PAGE CODE=%02x\n", 634 + cdb[2]); 635 + cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; 636 + ret = -EINVAL; 637 + goto out; 638 + } 639 + 640 + ret = spc_emulate_inquiry_std(cmd, buf); 641 + goto out; 642 + } 643 + 644 + for (p = 0; p < ARRAY_SIZE(evpd_handlers); ++p) { 645 + if (cdb[2] == evpd_handlers[p].page) { 646 + buf[1] = cdb[2]; 647 + ret = evpd_handlers[p].emulate(cmd, buf); 648 + goto out; 649 + } 650 + } 651 + 652 + pr_err("Unknown VPD Code: 0x%02x\n", cdb[2]); 653 + cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; 654 + ret = -EINVAL; 655 + 656 + out: 657 + if (buf != map_buf) { 658 + memcpy(map_buf, buf, cmd->data_length); 659 + kfree(buf); 660 + } 661 + transport_kunmap_data_sg(cmd); 662 + 663 + if (!ret) 664 + target_complete_cmd(cmd, GOOD); 665 + return ret; 666 + } 667 + 668 + static int spc_modesense_rwrecovery(unsigned char *p) 669 + { 670 + p[0] = 0x01; 671 + p[1] = 0x0a; 672 + 673 + return 12; 674 + } 675 + 676 + static int spc_modesense_control(struct se_device *dev, unsigned char *p) 677 + { 678 + p[0] = 0x0a; 679 + p[1] = 0x0a; 680 + p[2] = 2; 681 + /* 682 + * From spc4r23, 7.4.7 Control mode page 683 + * 684 + * The QUEUE ALGORITHM MODIFIER field (see table 368) specifies 685 + * restrictions on the algorithm used for reordering commands 686 + * having the SIMPLE task attribute (see SAM-4). 687 + * 688 + * Table 368 -- QUEUE ALGORITHM MODIFIER field 689 + * Code Description 690 + * 0h Restricted reordering 691 + * 1h Unrestricted reordering allowed 692 + * 2h to 7h Reserved 693 + * 8h to Fh Vendor specific 694 + * 695 + * A value of zero in the QUEUE ALGORITHM MODIFIER field specifies that 696 + * the device server shall order the processing sequence of commands 697 + * having the SIMPLE task attribute such that data integrity is maintained 698 + * for that I_T nexus (i.e., if the transmission of new SCSI transport protocol 699 + * requests is halted at any time, the final value of all data observable 700 + * on the medium shall be the same as if all the commands had been processed 701 + * with the ORDERED task attribute). 702 + * 703 + * A value of one in the QUEUE ALGORITHM MODIFIER field specifies that the 704 + * device server may reorder the processing sequence of commands having the 705 + * SIMPLE task attribute in any manner. Any data integrity exposures related to 706 + * command sequence order shall be explicitly handled by the application client 707 + * through the selection of appropriate ommands and task attributes. 708 + */ 709 + p[3] = (dev->se_sub_dev->se_dev_attrib.emulate_rest_reord == 1) ? 0x00 : 0x10; 710 + /* 711 + * From spc4r17, section 7.4.6 Control mode Page 712 + * 713 + * Unit Attention interlocks control (UN_INTLCK_CTRL) to code 00b 714 + * 715 + * 00b: The logical unit shall clear any unit attention condition 716 + * reported in the same I_T_L_Q nexus transaction as a CHECK CONDITION 717 + * status and shall not establish a unit attention condition when a com- 718 + * mand is completed with BUSY, TASK SET FULL, or RESERVATION CONFLICT 719 + * status. 720 + * 721 + * 10b: The logical unit shall not clear any unit attention condition 722 + * reported in the same I_T_L_Q nexus transaction as a CHECK CONDITION 723 + * status and shall not establish a unit attention condition when 724 + * a command is completed with BUSY, TASK SET FULL, or RESERVATION 725 + * CONFLICT status. 726 + * 727 + * 11b a The logical unit shall not clear any unit attention condition 728 + * reported in the same I_T_L_Q nexus transaction as a CHECK CONDITION 729 + * status and shall establish a unit attention condition for the 730 + * initiator port associated with the I_T nexus on which the BUSY, 731 + * TASK SET FULL, or RESERVATION CONFLICT status is being returned. 732 + * Depending on the status, the additional sense code shall be set to 733 + * PREVIOUS BUSY STATUS, PREVIOUS TASK SET FULL STATUS, or PREVIOUS 734 + * RESERVATION CONFLICT STATUS. Until it is cleared by a REQUEST SENSE 735 + * command, a unit attention condition shall be established only once 736 + * for a BUSY, TASK SET FULL, or RESERVATION CONFLICT status regardless 737 + * to the number of commands completed with one of those status codes. 738 + */ 739 + p[4] = (dev->se_sub_dev->se_dev_attrib.emulate_ua_intlck_ctrl == 2) ? 0x30 : 740 + (dev->se_sub_dev->se_dev_attrib.emulate_ua_intlck_ctrl == 1) ? 0x20 : 0x00; 741 + /* 742 + * From spc4r17, section 7.4.6 Control mode Page 743 + * 744 + * Task Aborted Status (TAS) bit set to zero. 745 + * 746 + * A task aborted status (TAS) bit set to zero specifies that aborted 747 + * tasks shall be terminated by the device server without any response 748 + * to the application client. A TAS bit set to one specifies that tasks 749 + * aborted by the actions of an I_T nexus other than the I_T nexus on 750 + * which the command was received shall be completed with TASK ABORTED 751 + * status (see SAM-4). 752 + */ 753 + p[5] = (dev->se_sub_dev->se_dev_attrib.emulate_tas) ? 0x40 : 0x00; 754 + p[8] = 0xff; 755 + p[9] = 0xff; 756 + p[11] = 30; 757 + 758 + return 12; 759 + } 760 + 761 + static int spc_modesense_caching(struct se_device *dev, unsigned char *p) 762 + { 763 + p[0] = 0x08; 764 + p[1] = 0x12; 765 + if (dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) 766 + p[2] = 0x04; /* Write Cache Enable */ 767 + p[12] = 0x20; /* Disabled Read Ahead */ 768 + 769 + return 20; 770 + } 771 + 772 + static void spc_modesense_write_protect(unsigned char *buf, int type) 773 + { 774 + /* 775 + * I believe that the WP bit (bit 7) in the mode header is the same for 776 + * all device types.. 777 + */ 778 + switch (type) { 779 + case TYPE_DISK: 780 + case TYPE_TAPE: 781 + default: 782 + buf[0] |= 0x80; /* WP bit */ 783 + break; 784 + } 785 + } 786 + 787 + static void spc_modesense_dpofua(unsigned char *buf, int type) 788 + { 789 + switch (type) { 790 + case TYPE_DISK: 791 + buf[0] |= 0x10; /* DPOFUA bit */ 792 + break; 793 + default: 794 + break; 795 + } 796 + } 797 + 798 + static int spc_emulate_modesense(struct se_cmd *cmd) 799 + { 800 + struct se_device *dev = cmd->se_dev; 801 + char *cdb = cmd->t_task_cdb; 802 + unsigned char *rbuf; 803 + int type = dev->transport->get_device_type(dev); 804 + int ten = (cmd->t_task_cdb[0] == MODE_SENSE_10); 805 + int offset = ten ? 8 : 4; 806 + int length = 0; 807 + unsigned char buf[SE_MODE_PAGE_BUF]; 808 + 809 + memset(buf, 0, SE_MODE_PAGE_BUF); 810 + 811 + switch (cdb[2] & 0x3f) { 812 + case 0x01: 813 + length = spc_modesense_rwrecovery(&buf[offset]); 814 + break; 815 + case 0x08: 816 + length = spc_modesense_caching(dev, &buf[offset]); 817 + break; 818 + case 0x0a: 819 + length = spc_modesense_control(dev, &buf[offset]); 820 + break; 821 + case 0x3f: 822 + length = spc_modesense_rwrecovery(&buf[offset]); 823 + length += spc_modesense_caching(dev, &buf[offset+length]); 824 + length += spc_modesense_control(dev, &buf[offset+length]); 825 + break; 826 + default: 827 + pr_err("MODE SENSE: unimplemented page/subpage: 0x%02x/0x%02x\n", 828 + cdb[2] & 0x3f, cdb[3]); 829 + cmd->scsi_sense_reason = TCM_UNKNOWN_MODE_PAGE; 830 + return -EINVAL; 831 + } 832 + offset += length; 833 + 834 + if (ten) { 835 + offset -= 2; 836 + buf[0] = (offset >> 8) & 0xff; 837 + buf[1] = offset & 0xff; 838 + 839 + if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) || 840 + (cmd->se_deve && 841 + (cmd->se_deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY))) 842 + spc_modesense_write_protect(&buf[3], type); 843 + 844 + if ((dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) && 845 + (dev->se_sub_dev->se_dev_attrib.emulate_fua_write > 0)) 846 + spc_modesense_dpofua(&buf[3], type); 847 + 848 + if ((offset + 2) > cmd->data_length) 849 + offset = cmd->data_length; 850 + 851 + } else { 852 + offset -= 1; 853 + buf[0] = offset & 0xff; 854 + 855 + if ((cmd->se_lun->lun_access & TRANSPORT_LUNFLAGS_READ_ONLY) || 856 + (cmd->se_deve && 857 + (cmd->se_deve->lun_flags & TRANSPORT_LUNFLAGS_READ_ONLY))) 858 + spc_modesense_write_protect(&buf[2], type); 859 + 860 + if ((dev->se_sub_dev->se_dev_attrib.emulate_write_cache > 0) && 861 + (dev->se_sub_dev->se_dev_attrib.emulate_fua_write > 0)) 862 + spc_modesense_dpofua(&buf[2], type); 863 + 864 + if ((offset + 1) > cmd->data_length) 865 + offset = cmd->data_length; 866 + } 867 + 868 + rbuf = transport_kmap_data_sg(cmd); 869 + memcpy(rbuf, buf, offset); 870 + transport_kunmap_data_sg(cmd); 871 + 872 + target_complete_cmd(cmd, GOOD); 873 + return 0; 874 + } 875 + 876 + static int spc_emulate_request_sense(struct se_cmd *cmd) 877 + { 878 + unsigned char *cdb = cmd->t_task_cdb; 879 + unsigned char *buf; 880 + u8 ua_asc = 0, ua_ascq = 0; 881 + int err = 0; 882 + 883 + if (cdb[1] & 0x01) { 884 + pr_err("REQUEST_SENSE description emulation not" 885 + " supported\n"); 886 + cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; 887 + return -ENOSYS; 888 + } 889 + 890 + buf = transport_kmap_data_sg(cmd); 891 + 892 + if (!core_scsi3_ua_clear_for_request_sense(cmd, &ua_asc, &ua_ascq)) { 893 + /* 894 + * CURRENT ERROR, UNIT ATTENTION 895 + */ 896 + buf[0] = 0x70; 897 + buf[SPC_SENSE_KEY_OFFSET] = UNIT_ATTENTION; 898 + 899 + if (cmd->data_length < 18) { 900 + buf[7] = 0x00; 901 + err = -EINVAL; 902 + goto end; 903 + } 904 + /* 905 + * The Additional Sense Code (ASC) from the UNIT ATTENTION 906 + */ 907 + buf[SPC_ASC_KEY_OFFSET] = ua_asc; 908 + buf[SPC_ASCQ_KEY_OFFSET] = ua_ascq; 909 + buf[7] = 0x0A; 910 + } else { 911 + /* 912 + * CURRENT ERROR, NO SENSE 913 + */ 914 + buf[0] = 0x70; 915 + buf[SPC_SENSE_KEY_OFFSET] = NO_SENSE; 916 + 917 + if (cmd->data_length < 18) { 918 + buf[7] = 0x00; 919 + err = -EINVAL; 920 + goto end; 921 + } 922 + /* 923 + * NO ADDITIONAL SENSE INFORMATION 924 + */ 925 + buf[SPC_ASC_KEY_OFFSET] = 0x00; 926 + buf[7] = 0x0A; 927 + } 928 + 929 + end: 930 + transport_kunmap_data_sg(cmd); 931 + target_complete_cmd(cmd, GOOD); 932 + return 0; 933 + } 934 + 935 + static int spc_emulate_testunitready(struct se_cmd *cmd) 936 + { 937 + target_complete_cmd(cmd, GOOD); 938 + return 0; 939 + } 940 + 941 + int spc_parse_cdb(struct se_cmd *cmd, unsigned int *size) 43 942 { 44 943 struct se_subsystem_dev *su_dev = cmd->se_dev->se_sub_dev; 45 944 unsigned char *cdb = cmd->t_task_cdb; ··· 952 53 break; 953 54 case MODE_SENSE: 954 55 *size = cdb[4]; 955 - if (!passthrough) 956 - cmd->execute_cmd = target_emulate_modesense; 56 + cmd->execute_cmd = spc_emulate_modesense; 957 57 break; 958 58 case MODE_SENSE_10: 959 59 *size = (cdb[7] << 8) + cdb[8]; 960 - if (!passthrough) 961 - cmd->execute_cmd = target_emulate_modesense; 60 + cmd->execute_cmd = spc_emulate_modesense; 962 61 break; 963 62 case LOG_SELECT: 964 63 case LOG_SENSE: ··· 1005 108 break; 1006 109 case REQUEST_SENSE: 1007 110 *size = cdb[4]; 1008 - if (!passthrough) 1009 - cmd->execute_cmd = target_emulate_request_sense; 111 + cmd->execute_cmd = spc_emulate_request_sense; 1010 112 break; 1011 113 case INQUIRY: 1012 114 *size = (cdb[3] << 8) + cdb[4]; ··· 1016 120 */ 1017 121 if (cmd->se_dev->dev_task_attr_type == SAM_TASK_ATTR_EMULATED) 1018 122 cmd->sam_task_attr = MSG_HEAD_TAG; 1019 - if (!passthrough) 1020 - cmd->execute_cmd = target_emulate_inquiry; 123 + cmd->execute_cmd = spc_emulate_inquiry; 1021 124 break; 1022 125 case SECURITY_PROTOCOL_IN: 1023 126 case SECURITY_PROTOCOL_OUT: ··· 1047 152 cmd->sam_task_attr = MSG_HEAD_TAG; 1048 153 break; 1049 154 case TEST_UNIT_READY: 155 + cmd->execute_cmd = spc_emulate_testunitready; 1050 156 *size = 0; 1051 - if (!passthrough) 1052 - cmd->execute_cmd = target_emulate_noop; 1053 157 break; 1054 158 default: 1055 159 pr_warn("TARGET_CORE[%s]: Unsupported SCSI Opcode"
+2 -45
drivers/target/target_core_transport.c
··· 1343 1343 } 1344 1344 } 1345 1345 1346 - static int target_cmd_size_check(struct se_cmd *cmd, unsigned int size) 1346 + int target_cmd_size_check(struct se_cmd *cmd, unsigned int size) 1347 1347 { 1348 1348 struct se_device *dev = cmd->se_dev; 1349 1349 ··· 1469 1469 u32 pr_reg_type = 0; 1470 1470 u8 alua_ascq = 0; 1471 1471 unsigned long flags; 1472 - unsigned int size; 1473 1472 int ret; 1474 1473 1475 1474 transport_generic_prepare_cdb(cdb); ··· 1560 1561 */ 1561 1562 } 1562 1563 1563 - ret = cmd->se_dev->transport->parse_cdb(cmd, &size); 1564 - if (ret < 0) 1565 - return ret; 1566 - 1567 - ret = target_cmd_size_check(cmd, size); 1564 + ret = cmd->se_dev->transport->parse_cdb(cmd); 1568 1565 if (ret < 0) 1569 1566 return ret; 1570 1567 ··· 2158 2163 return -1; 2159 2164 } 2160 2165 2161 - static inline long long transport_dev_end_lba(struct se_device *dev) 2162 - { 2163 - return dev->transport->get_blocks(dev) + 1; 2164 - } 2165 - 2166 - static int transport_cmd_get_valid_sectors(struct se_cmd *cmd) 2167 - { 2168 - struct se_device *dev = cmd->se_dev; 2169 - u32 sectors; 2170 - 2171 - if (dev->transport->get_device_type(dev) != TYPE_DISK) 2172 - return 0; 2173 - 2174 - sectors = (cmd->data_length / dev->se_sub_dev->se_dev_attrib.block_size); 2175 - 2176 - if ((cmd->t_task_lba + sectors) > transport_dev_end_lba(dev)) { 2177 - pr_err("LBA: %llu Sectors: %u exceeds" 2178 - " transport_dev_end_lba(): %llu\n", 2179 - cmd->t_task_lba, sectors, 2180 - transport_dev_end_lba(dev)); 2181 - return -EINVAL; 2182 - } 2183 - 2184 - return 0; 2185 - } 2186 - 2187 2166 /* 2188 2167 * Called from I/O completion to determine which dormant/delayed 2189 2168 * and ordered cmds need to have their tasks added to the execution queue. ··· 2601 2632 */ 2602 2633 int transport_generic_new_cmd(struct se_cmd *cmd) 2603 2634 { 2604 - struct se_device *dev = cmd->se_dev; 2605 2635 int ret = 0; 2606 2636 2607 2637 /* ··· 2632 2664 INIT_WORK(&cmd->work, target_complete_ok_work); 2633 2665 queue_work(target_completion_wq, &cmd->work); 2634 2666 return 0; 2635 - } 2636 - 2637 - if (cmd->se_cmd_flags & SCF_SCSI_DATA_CDB) { 2638 - struct se_dev_attrib *attr = &dev->se_sub_dev->se_dev_attrib; 2639 - 2640 - if (transport_cmd_get_valid_sectors(cmd) < 0) 2641 - return -EINVAL; 2642 - 2643 - BUG_ON(cmd->data_length % attr->block_size); 2644 - BUG_ON(DIV_ROUND_UP(cmd->data_length, attr->block_size) > 2645 - attr->hw_max_sectors); 2646 2667 } 2647 2668 2648 2669 atomic_inc(&cmd->t_fe_count);
+3 -3
include/target/target_core_backend.h
··· 25 25 void (*free_device)(void *); 26 26 int (*transport_complete)(struct se_cmd *cmd, struct scatterlist *); 27 27 28 - int (*parse_cdb)(struct se_cmd *cmd, unsigned int *size); 28 + int (*parse_cdb)(struct se_cmd *cmd); 29 29 int (*execute_cmd)(struct se_cmd *, struct scatterlist *, u32, 30 30 enum dma_data_direction); 31 31 int (*do_discard)(struct se_device *, sector_t, u32); ··· 51 51 52 52 void target_complete_cmd(struct se_cmd *, u8); 53 53 54 - int sbc_parse_cdb(struct se_cmd *cmd, unsigned int *size); 55 - int spc_parse_cdb(struct se_cmd *cmd, unsigned int *size, bool passthrough); 54 + int sbc_parse_cdb(struct se_cmd *cmd); 55 + int spc_parse_cdb(struct se_cmd *cmd, unsigned int *size); 56 56 57 57 void transport_set_vpd_proto_id(struct t10_vpd *, unsigned char *); 58 58 int transport_set_vpd_assoc(struct t10_vpd *, unsigned char *);