1 /* 2 * Copyright(c) 2007 Intel Corporation. All rights reserved. 3 * Copyright(c) 2008 Red Hat, Inc. All rights reserved. 4 * Copyright(c) 2008 Mike Christie 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms and conditions of the GNU General Public License, 8 * version 2, as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 * 15 * You should have received a copy of the GNU General Public License along with 16 * this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Maintained at www.Open-FCoE.org 20 */ 21 22 #include <linux/module.h> 23 #include <linux/delay.h> 24 #include <linux/kernel.h> 25 #include <linux/types.h> 26 #include <linux/spinlock.h> 27 #include <linux/scatterlist.h> 28 #include <linux/err.h> 29 #include <linux/crc32.h> 30 31 #include <scsi/scsi_tcq.h> 32 #include <scsi/scsi.h> 33 #include <scsi/scsi_host.h> 34 #include <scsi/scsi_device.h> 35 #include <scsi/scsi_cmnd.h> 36 37 #include <scsi/fc/fc_fc2.h> 38 39 #include <scsi/libfc.h> 40 #include <scsi/fc_encode.h> 41 42 #include "fc_libfc.h" 43 44 struct kmem_cache *scsi_pkt_cachep; 45 46 /* SRB state definitions */ 47 #define FC_SRB_FREE 0 /* cmd is free */ 48 #define FC_SRB_CMD_SENT (1 << 0) /* cmd has been sent */ 49 #define FC_SRB_RCV_STATUS (1 << 1) /* response has arrived */ 50 #define FC_SRB_ABORT_PENDING (1 << 2) /* cmd abort sent to device */ 51 #define FC_SRB_ABORTED (1 << 3) /* abort acknowleged */ 52 #define FC_SRB_DISCONTIG (1 << 4) /* non-sequential data recvd */ 53 #define FC_SRB_COMPL (1 << 5) /* fc_io_compl has been run */ 54 #define FC_SRB_FCP_PROCESSING_TMO (1 << 6) /* timer function processing */ 55 56 #define FC_SRB_READ (1 << 1) 57 #define FC_SRB_WRITE (1 << 0) 58 59 /* 60 * The SCp.ptr should be tested and set under the host lock. NULL indicates 61 * that the command has been retruned to the scsi layer. 62 */ 63 #define CMD_SP(Cmnd) ((struct fc_fcp_pkt *)(Cmnd)->SCp.ptr) 64 #define CMD_ENTRY_STATUS(Cmnd) ((Cmnd)->SCp.have_data_in) 65 #define CMD_COMPL_STATUS(Cmnd) ((Cmnd)->SCp.this_residual) 66 #define CMD_SCSI_STATUS(Cmnd) ((Cmnd)->SCp.Status) 67 #define CMD_RESID_LEN(Cmnd) ((Cmnd)->SCp.buffers_residual) 68 69 /** 70 * struct fc_fcp_internal - FCP layer internal data 71 * @scsi_pkt_pool: Memory pool to draw FCP packets from 72 * @scsi_pkt_queue: Current FCP packets 73 * @last_can_queue_ramp_down_time: ramp down time 74 * @last_can_queue_ramp_up_time: ramp up time 75 * @max_can_queue: max can_queue size 76 */ 77 struct fc_fcp_internal { 78 mempool_t *scsi_pkt_pool; 79 struct list_head scsi_pkt_queue; 80 unsigned long last_can_queue_ramp_down_time; 81 unsigned long last_can_queue_ramp_up_time; 82 int max_can_queue; 83 }; 84 85 #define fc_get_scsi_internal(x) ((struct fc_fcp_internal *)(x)->scsi_priv) 86 87 /* 88 * function prototypes 89 * FC scsi I/O related functions 90 */ 91 static void fc_fcp_recv_data(struct fc_fcp_pkt *, struct fc_frame *); 92 static void fc_fcp_recv(struct fc_seq *, struct fc_frame *, void *); 93 static void fc_fcp_resp(struct fc_fcp_pkt *, struct fc_frame *); 94 static void fc_fcp_complete_locked(struct fc_fcp_pkt *); 95 static void fc_tm_done(struct fc_seq *, struct fc_frame *, void *); 96 static void fc_fcp_error(struct fc_fcp_pkt *, struct fc_frame *); 97 static void fc_timeout_error(struct fc_fcp_pkt *); 98 static void fc_fcp_timeout(unsigned long); 99 static void fc_fcp_rec(struct fc_fcp_pkt *); 100 static void fc_fcp_rec_error(struct fc_fcp_pkt *, struct fc_frame *); 101 static void fc_fcp_rec_resp(struct fc_seq *, struct fc_frame *, void *); 102 static void fc_io_compl(struct fc_fcp_pkt *); 103 104 static void fc_fcp_srr(struct fc_fcp_pkt *, enum fc_rctl, u32); 105 static void fc_fcp_srr_resp(struct fc_seq *, struct fc_frame *, void *); 106 static void fc_fcp_srr_error(struct fc_fcp_pkt *, struct fc_frame *); 107 108 /* 109 * command status codes 110 */ 111 #define FC_COMPLETE 0 112 #define FC_CMD_ABORTED 1 113 #define FC_CMD_RESET 2 114 #define FC_CMD_PLOGO 3 115 #define FC_SNS_RCV 4 116 #define FC_TRANS_ERR 5 117 #define FC_DATA_OVRRUN 6 118 #define FC_DATA_UNDRUN 7 119 #define FC_ERROR 8 120 #define FC_HRD_ERROR 9 121 #define FC_CMD_TIME_OUT 10 122 123 /* 124 * Error recovery timeout values. 125 */ 126 #define FC_SCSI_ER_TIMEOUT (10 * HZ) 127 #define FC_SCSI_TM_TOV (10 * HZ) 128 #define FC_SCSI_REC_TOV (2 * HZ) 129 #define FC_HOST_RESET_TIMEOUT (30 * HZ) 130 #define FC_CAN_QUEUE_PERIOD (60 * HZ) 131 132 #define FC_MAX_ERROR_CNT 5 133 #define FC_MAX_RECOV_RETRY 3 134 135 #define FC_FCP_DFLT_QUEUE_DEPTH 32 136 137 /** 138 * fc_fcp_pkt_alloc() - Allocate a fcp_pkt 139 * @lport: The local port that the FCP packet is for 140 * @gfp: GFP flags for allocation 141 * 142 * Return value: fcp_pkt structure or null on allocation failure. 143 * Context: Can be called from process context, no lock is required. 144 */ 145 static struct fc_fcp_pkt *fc_fcp_pkt_alloc(struct fc_lport *lport, gfp_t gfp) 146 { 147 struct fc_fcp_internal *si = fc_get_scsi_internal(lport); 148 struct fc_fcp_pkt *fsp; 149 150 fsp = mempool_alloc(si->scsi_pkt_pool, gfp); 151 if (fsp) { 152 memset(fsp, 0, sizeof(*fsp)); 153 fsp->lp = lport; 154 atomic_set(&fsp->ref_cnt, 1); 155 init_timer(&fsp->timer); 156 INIT_LIST_HEAD(&fsp->list); 157 spin_lock_init(&fsp->scsi_pkt_lock); 158 } 159 return fsp; 160 } 161 162 /** 163 * fc_fcp_pkt_release() - Release hold on a fcp_pkt 164 * @fsp: The FCP packet to be released 165 * 166 * Context: Can be called from process or interrupt context, 167 * no lock is required. 168 */ 169 static void fc_fcp_pkt_release(struct fc_fcp_pkt *fsp) 170 { 171 if (atomic_dec_and_test(&fsp->ref_cnt)) { 172 struct fc_fcp_internal *si = fc_get_scsi_internal(fsp->lp); 173 174 mempool_free(fsp, si->scsi_pkt_pool); 175 } 176 } 177 178 /** 179 * fc_fcp_pkt_hold() - Hold a fcp_pkt 180 * @fsp: The FCP packet to be held 181 */ 182 static void fc_fcp_pkt_hold(struct fc_fcp_pkt *fsp) 183 { 184 atomic_inc(&fsp->ref_cnt); 185 } 186 187 /** 188 * fc_fcp_pkt_destory() - Release hold on a fcp_pkt 189 * @seq: The sequence that the FCP packet is on (required by destructor API) 190 * @fsp: The FCP packet to be released 191 * 192 * This routine is called by a destructor callback in the exch_seq_send() 193 * routine of the libfc Transport Template. The 'struct fc_seq' is a required 194 * argument even though it is not used by this routine. 195 * 196 * Context: No locking required. 197 */ 198 static void fc_fcp_pkt_destroy(struct fc_seq *seq, void *fsp) 199 { 200 fc_fcp_pkt_release(fsp); 201 } 202 203 /** 204 * fc_fcp_lock_pkt() - Lock a fcp_pkt and increase its reference count 205 * @fsp: The FCP packet to be locked and incremented 206 * 207 * We should only return error if we return a command to SCSI-ml before 208 * getting a response. This can happen in cases where we send a abort, but 209 * do not wait for the response and the abort and command can be passing 210 * each other on the wire/network-layer. 211 * 212 * Note: this function locks the packet and gets a reference to allow 213 * callers to call the completion function while the lock is held and 214 * not have to worry about the packets refcount. 215 * 216 * TODO: Maybe we should just have callers grab/release the lock and 217 * have a function that they call to verify the fsp and grab a ref if 218 * needed. 219 */ 220 static inline int fc_fcp_lock_pkt(struct fc_fcp_pkt *fsp) 221 { 222 spin_lock_bh(&fsp->scsi_pkt_lock); 223 if (fsp->state & FC_SRB_COMPL) { 224 spin_unlock_bh(&fsp->scsi_pkt_lock); 225 return -EPERM; 226 } 227 228 fc_fcp_pkt_hold(fsp); 229 return 0; 230 } 231 232 /** 233 * fc_fcp_unlock_pkt() - Release a fcp_pkt's lock and decrement its 234 * reference count 235 * @fsp: The FCP packet to be unlocked and decremented 236 */ 237 static inline void fc_fcp_unlock_pkt(struct fc_fcp_pkt *fsp) 238 { 239 spin_unlock_bh(&fsp->scsi_pkt_lock); 240 fc_fcp_pkt_release(fsp); 241 } 242 243 /** 244 * fc_fcp_timer_set() - Start a timer for a fcp_pkt 245 * @fsp: The FCP packet to start a timer for 246 * @delay: The timeout period for the timer 247 */ 248 static void fc_fcp_timer_set(struct fc_fcp_pkt *fsp, unsigned long delay) 249 { 250 if (!(fsp->state & FC_SRB_COMPL)) 251 mod_timer(&fsp->timer, jiffies + delay); 252 } 253 254 /** 255 * fc_fcp_send_abort() - Send an abort for exchanges associated with a 256 * fcp_pkt 257 * @fsp: The FCP packet to abort exchanges on 258 */ 259 static int fc_fcp_send_abort(struct fc_fcp_pkt *fsp) 260 { 261 if (!fsp->seq_ptr) 262 return -EINVAL; 263 264 fsp->state |= FC_SRB_ABORT_PENDING; 265 return fsp->lp->tt.seq_exch_abort(fsp->seq_ptr, 0); 266 } 267 268 /** 269 * fc_fcp_retry_cmd() - Retry a fcp_pkt 270 * @fsp: The FCP packet to be retried 271 * 272 * Sets the status code to be FC_ERROR and then calls 273 * fc_fcp_complete_locked() which in turn calls fc_io_compl(). 274 * fc_io_compl() will notify the SCSI-ml that the I/O is done. 275 * The SCSI-ml will retry the command. 276 */ 277 static void fc_fcp_retry_cmd(struct fc_fcp_pkt *fsp) 278 { 279 if (fsp->seq_ptr) { 280 fsp->lp->tt.exch_done(fsp->seq_ptr); 281 fsp->seq_ptr = NULL; 282 } 283 284 fsp->state &= ~FC_SRB_ABORT_PENDING; 285 fsp->io_status = 0; 286 fsp->status_code = FC_ERROR; 287 fc_fcp_complete_locked(fsp); 288 } 289 290 /** 291 * fc_fcp_ddp_setup() - Calls a LLD's ddp_setup routine to set up DDP context 292 * @fsp: The FCP packet that will manage the DDP frames 293 * @xid: The XID that will be used for the DDP exchange 294 */ 295 void fc_fcp_ddp_setup(struct fc_fcp_pkt *fsp, u16 xid) 296 { 297 struct fc_lport *lport; 298 299 if (!fsp) 300 return; 301 302 lport = fsp->lp; 303 if ((fsp->req_flags & FC_SRB_READ) && 304 (lport->lro_enabled) && (lport->tt.ddp_setup)) { 305 if (lport->tt.ddp_setup(lport, xid, scsi_sglist(fsp->cmd), 306 scsi_sg_count(fsp->cmd))) 307 fsp->xfer_ddp = xid; 308 } 309 } 310 311 /** 312 * fc_fcp_ddp_done() - Calls a LLD's ddp_done routine to release any 313 * DDP related resources for a fcp_pkt 314 * @fsp: The FCP packet that DDP had been used on 315 */ 316 static void fc_fcp_ddp_done(struct fc_fcp_pkt *fsp) 317 { 318 struct fc_lport *lport; 319 320 if (!fsp) 321 return; 322 323 if (fsp->xfer_ddp == FC_XID_UNKNOWN) 324 return; 325 326 lport = fsp->lp; 327 if (lport->tt.ddp_done) { 328 fsp->xfer_len = lport->tt.ddp_done(lport, fsp->xfer_ddp); 329 fsp->xfer_ddp = FC_XID_UNKNOWN; 330 } 331 } 332 333 /** 334 * fc_fcp_can_queue_ramp_up() - increases can_queue 335 * @lport: lport to ramp up can_queue 336 * 337 * Locking notes: Called with Scsi_Host lock held 338 */ 339 static void fc_fcp_can_queue_ramp_up(struct fc_lport *lport) 340 { 341 struct fc_fcp_internal *si = fc_get_scsi_internal(lport); 342 int can_queue; 343 344 if (si->last_can_queue_ramp_up_time && 345 (time_before(jiffies, si->last_can_queue_ramp_up_time + 346 FC_CAN_QUEUE_PERIOD))) 347 return; 348 349 if (time_before(jiffies, si->last_can_queue_ramp_down_time + 350 FC_CAN_QUEUE_PERIOD)) 351 return; 352 353 si->last_can_queue_ramp_up_time = jiffies; 354 355 can_queue = lport->host->can_queue << 1; 356 if (can_queue >= si->max_can_queue) { 357 can_queue = si->max_can_queue; 358 si->last_can_queue_ramp_down_time = 0; 359 } 360 lport->host->can_queue = can_queue; 361 shost_printk(KERN_ERR, lport->host, "libfc: increased " 362 "can_queue to %d.\n", can_queue); 363 } 364 365 /** 366 * fc_fcp_can_queue_ramp_down() - reduces can_queue 367 * @lport: lport to reduce can_queue 368 * 369 * If we are getting memory allocation failures, then we may 370 * be trying to execute too many commands. We let the running 371 * commands complete or timeout, then try again with a reduced 372 * can_queue. Eventually we will hit the point where we run 373 * on all reserved structs. 374 * 375 * Locking notes: Called with Scsi_Host lock held 376 */ 377 static void fc_fcp_can_queue_ramp_down(struct fc_lport *lport) 378 { 379 struct fc_fcp_internal *si = fc_get_scsi_internal(lport); 380 int can_queue; 381 382 if (si->last_can_queue_ramp_down_time && 383 (time_before(jiffies, si->last_can_queue_ramp_down_time + 384 FC_CAN_QUEUE_PERIOD))) 385 return; 386 387 si->last_can_queue_ramp_down_time = jiffies; 388 389 can_queue = lport->host->can_queue; 390 can_queue >>= 1; 391 if (!can_queue) 392 can_queue = 1; 393 lport->host->can_queue = can_queue; 394 shost_printk(KERN_ERR, lport->host, "libfc: Could not allocate frame.\n" 395 "Reducing can_queue to %d.\n", can_queue); 396 } 397 398 /* 399 * fc_fcp_frame_alloc() - Allocates fc_frame structure and buffer. 400 * @lport: fc lport struct 401 * @len: payload length 402 * 403 * Allocates fc_frame structure and buffer but if fails to allocate 404 * then reduce can_queue. 405 */ 406 static inline struct fc_frame *fc_fcp_frame_alloc(struct fc_lport *lport, 407 size_t len) 408 { 409 struct fc_frame *fp; 410 unsigned long flags; 411 412 fp = fc_frame_alloc(lport, len); 413 if (!fp) { 414 spin_lock_irqsave(lport->host->host_lock, flags); 415 fc_fcp_can_queue_ramp_down(lport); 416 spin_unlock_irqrestore(lport->host->host_lock, flags); 417 } 418 return fp; 419 } 420 421 /** 422 * fc_fcp_recv_data() - Handler for receiving SCSI-FCP data from a target 423 * @fsp: The FCP packet the data is on 424 * @fp: The data frame 425 */ 426 static void fc_fcp_recv_data(struct fc_fcp_pkt *fsp, struct fc_frame *fp) 427 { 428 struct scsi_cmnd *sc = fsp->cmd; 429 struct fc_lport *lport = fsp->lp; 430 struct fcoe_dev_stats *stats; 431 struct fc_frame_header *fh; 432 size_t start_offset; 433 size_t offset; 434 u32 crc; 435 u32 copy_len = 0; 436 size_t len; 437 void *buf; 438 struct scatterlist *sg; 439 u32 nents; 440 441 fh = fc_frame_header_get(fp); 442 offset = ntohl(fh->fh_parm_offset); 443 start_offset = offset; 444 len = fr_len(fp) - sizeof(*fh); 445 buf = fc_frame_payload_get(fp, 0); 446 447 /* if this I/O is ddped, update xfer len */ 448 fc_fcp_ddp_done(fsp); 449 450 if (offset + len > fsp->data_len) { 451 /* this should never happen */ 452 if ((fr_flags(fp) & FCPHF_CRC_UNCHECKED) && 453 fc_frame_crc_check(fp)) 454 goto crc_err; 455 FC_FCP_DBG(fsp, "data received past end. len %zx offset %zx " 456 "data_len %x\n", len, offset, fsp->data_len); 457 fc_fcp_retry_cmd(fsp); 458 return; 459 } 460 if (offset != fsp->xfer_len) 461 fsp->state |= FC_SRB_DISCONTIG; 462 463 sg = scsi_sglist(sc); 464 nents = scsi_sg_count(sc); 465 466 if (!(fr_flags(fp) & FCPHF_CRC_UNCHECKED)) { 467 copy_len = fc_copy_buffer_to_sglist(buf, len, sg, &nents, 468 &offset, KM_SOFTIRQ0, NULL); 469 } else { 470 crc = crc32(~0, (u8 *) fh, sizeof(*fh)); 471 copy_len = fc_copy_buffer_to_sglist(buf, len, sg, &nents, 472 &offset, KM_SOFTIRQ0, &crc); 473 buf = fc_frame_payload_get(fp, 0); 474 if (len % 4) 475 crc = crc32(crc, buf + len, 4 - (len % 4)); 476 477 if (~crc != le32_to_cpu(fr_crc(fp))) { 478 crc_err: 479 stats = fc_lport_get_stats(lport); 480 stats->ErrorFrames++; 481 /* FIXME - per cpu count, not total count! */ 482 if (stats->InvalidCRCCount++ < 5) 483 printk(KERN_WARNING "libfc: CRC error on data " 484 "frame for port (%6x)\n", 485 fc_host_port_id(lport->host)); 486 /* 487 * Assume the frame is total garbage. 488 * We may have copied it over the good part 489 * of the buffer. 490 * If so, we need to retry the entire operation. 491 * Otherwise, ignore it. 492 */ 493 if (fsp->state & FC_SRB_DISCONTIG) 494 fc_fcp_retry_cmd(fsp); 495 return; 496 } 497 } 498 499 if (fsp->xfer_contig_end == start_offset) 500 fsp->xfer_contig_end += copy_len; 501 fsp->xfer_len += copy_len; 502 503 /* 504 * In the very rare event that this data arrived after the response 505 * and completes the transfer, call the completion handler. 506 */ 507 if (unlikely(fsp->state & FC_SRB_RCV_STATUS) && 508 fsp->xfer_len == fsp->data_len - fsp->scsi_resid) 509 fc_fcp_complete_locked(fsp); 510 } 511 512 /** 513 * fc_fcp_send_data() - Send SCSI data to a target 514 * @fsp: The FCP packet the data is on 515 * @sp: The sequence the data is to be sent on 516 * @offset: The starting offset for this data request 517 * @seq_blen: The burst length for this data request 518 * 519 * Called after receiving a Transfer Ready data descriptor. 520 * If the LLD is capable of sequence offload then send down the 521 * seq_blen ammount of data in single frame, otherwise send 522 * multiple frames of the maximum frame payload supported by 523 * the target port. 524 */ 525 static int fc_fcp_send_data(struct fc_fcp_pkt *fsp, struct fc_seq *seq, 526 size_t offset, size_t seq_blen) 527 { 528 struct fc_exch *ep; 529 struct scsi_cmnd *sc; 530 struct scatterlist *sg; 531 struct fc_frame *fp = NULL; 532 struct fc_lport *lport = fsp->lp; 533 struct page *page; 534 size_t remaining; 535 size_t t_blen; 536 size_t tlen; 537 size_t sg_bytes; 538 size_t frame_offset, fh_parm_offset; 539 size_t off; 540 int error; 541 void *data = NULL; 542 void *page_addr; 543 int using_sg = lport->sg_supp; 544 u32 f_ctl; 545 546 WARN_ON(seq_blen <= 0); 547 if (unlikely(offset + seq_blen > fsp->data_len)) { 548 /* this should never happen */ 549 FC_FCP_DBG(fsp, "xfer-ready past end. seq_blen %zx " 550 "offset %zx\n", seq_blen, offset); 551 fc_fcp_send_abort(fsp); 552 return 0; 553 } else if (offset != fsp->xfer_len) { 554 /* Out of Order Data Request - no problem, but unexpected. */ 555 FC_FCP_DBG(fsp, "xfer-ready non-contiguous. " 556 "seq_blen %zx offset %zx\n", seq_blen, offset); 557 } 558 559 /* 560 * if LLD is capable of seq_offload then set transport 561 * burst length (t_blen) to seq_blen, otherwise set t_blen 562 * to max FC frame payload previously set in fsp->max_payload. 563 */ 564 t_blen = fsp->max_payload; 565 if (lport->seq_offload) { 566 t_blen = min(seq_blen, (size_t)lport->lso_max); 567 FC_FCP_DBG(fsp, "fsp=%p:lso:blen=%zx lso_max=0x%x t_blen=%zx\n", 568 fsp, seq_blen, lport->lso_max, t_blen); 569 } 570 571 WARN_ON(t_blen < FC_MIN_MAX_PAYLOAD); 572 if (t_blen > 512) 573 t_blen &= ~(512 - 1); /* round down to block size */ 574 WARN_ON(t_blen < FC_MIN_MAX_PAYLOAD); /* won't go below 256 */ 575 sc = fsp->cmd; 576 577 remaining = seq_blen; 578 fh_parm_offset = frame_offset = offset; 579 tlen = 0; 580 seq = lport->tt.seq_start_next(seq); 581 f_ctl = FC_FC_REL_OFF; 582 WARN_ON(!seq); 583 584 sg = scsi_sglist(sc); 585 586 while (remaining > 0 && sg) { 587 if (offset >= sg->length) { 588 offset -= sg->length; 589 sg = sg_next(sg); 590 continue; 591 } 592 if (!fp) { 593 tlen = min(t_blen, remaining); 594 595 /* 596 * TODO. Temporary workaround. fc_seq_send() can't 597 * handle odd lengths in non-linear skbs. 598 * This will be the final fragment only. 599 */ 600 if (tlen % 4) 601 using_sg = 0; 602 fp = fc_frame_alloc(lport, using_sg ? 0 : tlen); 603 if (!fp) 604 return -ENOMEM; 605 606 data = fc_frame_header_get(fp) + 1; 607 fh_parm_offset = frame_offset; 608 fr_max_payload(fp) = fsp->max_payload; 609 } 610 611 off = offset + sg->offset; 612 sg_bytes = min(tlen, sg->length - offset); 613 sg_bytes = min(sg_bytes, 614 (size_t) (PAGE_SIZE - (off & ~PAGE_MASK))); 615 page = sg_page(sg) + (off >> PAGE_SHIFT); 616 if (using_sg) { 617 get_page(page); 618 skb_fill_page_desc(fp_skb(fp), 619 skb_shinfo(fp_skb(fp))->nr_frags, 620 page, off & ~PAGE_MASK, sg_bytes); 621 fp_skb(fp)->data_len += sg_bytes; 622 fr_len(fp) += sg_bytes; 623 fp_skb(fp)->truesize += PAGE_SIZE; 624 } else { 625 /* 626 * The scatterlist item may be bigger than PAGE_SIZE, 627 * but we must not cross pages inside the kmap. 628 */ 629 page_addr = kmap_atomic(page, KM_SOFTIRQ0); 630 memcpy(data, (char *)page_addr + (off & ~PAGE_MASK), 631 sg_bytes); 632 kunmap_atomic(page_addr, KM_SOFTIRQ0); 633 data += sg_bytes; 634 } 635 offset += sg_bytes; 636 frame_offset += sg_bytes; 637 tlen -= sg_bytes; 638 remaining -= sg_bytes; 639 640 if ((skb_shinfo(fp_skb(fp))->nr_frags < FC_FRAME_SG_LEN) && 641 (tlen)) 642 continue; 643 644 /* 645 * Send sequence with transfer sequence initiative in case 646 * this is last FCP frame of the sequence. 647 */ 648 if (remaining == 0) 649 f_ctl |= FC_FC_SEQ_INIT | FC_FC_END_SEQ; 650 651 ep = fc_seq_exch(seq); 652 fc_fill_fc_hdr(fp, FC_RCTL_DD_SOL_DATA, ep->did, ep->sid, 653 FC_TYPE_FCP, f_ctl, fh_parm_offset); 654 655 /* 656 * send fragment using for a sequence. 657 */ 658 error = lport->tt.seq_send(lport, seq, fp); 659 if (error) { 660 WARN_ON(1); /* send error should be rare */ 661 fc_fcp_retry_cmd(fsp); 662 return 0; 663 } 664 fp = NULL; 665 } 666 fsp->xfer_len += seq_blen; /* premature count? */ 667 return 0; 668 } 669 670 /** 671 * fc_fcp_abts_resp() - Send an ABTS response 672 * @fsp: The FCP packet that is being aborted 673 * @fp: The response frame 674 */ 675 static void fc_fcp_abts_resp(struct fc_fcp_pkt *fsp, struct fc_frame *fp) 676 { 677 int ba_done = 1; 678 struct fc_ba_rjt *brp; 679 struct fc_frame_header *fh; 680 681 fh = fc_frame_header_get(fp); 682 switch (fh->fh_r_ctl) { 683 case FC_RCTL_BA_ACC: 684 break; 685 case FC_RCTL_BA_RJT: 686 brp = fc_frame_payload_get(fp, sizeof(*brp)); 687 if (brp && brp->br_reason == FC_BA_RJT_LOG_ERR) 688 break; 689 /* fall thru */ 690 default: 691 /* 692 * we will let the command timeout 693 * and scsi-ml recover in this case, 694 * therefore cleared the ba_done flag. 695 */ 696 ba_done = 0; 697 } 698 699 if (ba_done) { 700 fsp->state |= FC_SRB_ABORTED; 701 fsp->state &= ~FC_SRB_ABORT_PENDING; 702 703 if (fsp->wait_for_comp) 704 complete(&fsp->tm_done); 705 else 706 fc_fcp_complete_locked(fsp); 707 } 708 } 709 710 /** 711 * fc_fcp_recv() - Reveive an FCP frame 712 * @seq: The sequence the frame is on 713 * @fp: The received frame 714 * @arg: The related FCP packet 715 * 716 * Context: Called from Soft IRQ context. Can not be called 717 * holding the FCP packet list lock. 718 */ 719 static void fc_fcp_recv(struct fc_seq *seq, struct fc_frame *fp, void *arg) 720 { 721 struct fc_fcp_pkt *fsp = (struct fc_fcp_pkt *)arg; 722 struct fc_lport *lport = fsp->lp; 723 struct fc_frame_header *fh; 724 struct fcp_txrdy *dd; 725 u8 r_ctl; 726 int rc = 0; 727 728 if (IS_ERR(fp)) { 729 fc_fcp_error(fsp, fp); 730 return; 731 } 732 733 fh = fc_frame_header_get(fp); 734 r_ctl = fh->fh_r_ctl; 735 736 if (!(lport->state & LPORT_ST_READY)) 737 goto out; 738 if (fc_fcp_lock_pkt(fsp)) 739 goto out; 740 fsp->last_pkt_time = jiffies; 741 742 if (fh->fh_type == FC_TYPE_BLS) { 743 fc_fcp_abts_resp(fsp, fp); 744 goto unlock; 745 } 746 747 if (fsp->state & (FC_SRB_ABORTED | FC_SRB_ABORT_PENDING)) 748 goto unlock; 749 750 if (r_ctl == FC_RCTL_DD_DATA_DESC) { 751 /* 752 * received XFER RDY from the target 753 * need to send data to the target 754 */ 755 WARN_ON(fr_flags(fp) & FCPHF_CRC_UNCHECKED); 756 dd = fc_frame_payload_get(fp, sizeof(*dd)); 757 WARN_ON(!dd); 758 759 rc = fc_fcp_send_data(fsp, seq, 760 (size_t) ntohl(dd->ft_data_ro), 761 (size_t) ntohl(dd->ft_burst_len)); 762 if (!rc) 763 seq->rec_data = fsp->xfer_len; 764 } else if (r_ctl == FC_RCTL_DD_SOL_DATA) { 765 /* 766 * received a DATA frame 767 * next we will copy the data to the system buffer 768 */ 769 WARN_ON(fr_len(fp) < sizeof(*fh)); /* len may be 0 */ 770 fc_fcp_recv_data(fsp, fp); 771 seq->rec_data = fsp->xfer_contig_end; 772 } else if (r_ctl == FC_RCTL_DD_CMD_STATUS) { 773 WARN_ON(fr_flags(fp) & FCPHF_CRC_UNCHECKED); 774 775 fc_fcp_resp(fsp, fp); 776 } else { 777 FC_FCP_DBG(fsp, "unexpected frame. r_ctl %x\n", r_ctl); 778 } 779 unlock: 780 fc_fcp_unlock_pkt(fsp); 781 out: 782 fc_frame_free(fp); 783 } 784 785 /** 786 * fc_fcp_resp() - Handler for FCP responses 787 * @fsp: The FCP packet the response is for 788 * @fp: The response frame 789 */ 790 static void fc_fcp_resp(struct fc_fcp_pkt *fsp, struct fc_frame *fp) 791 { 792 struct fc_frame_header *fh; 793 struct fcp_resp *fc_rp; 794 struct fcp_resp_ext *rp_ex; 795 struct fcp_resp_rsp_info *fc_rp_info; 796 u32 plen; 797 u32 expected_len; 798 u32 respl = 0; 799 u32 snsl = 0; 800 u8 flags = 0; 801 802 plen = fr_len(fp); 803 fh = (struct fc_frame_header *)fr_hdr(fp); 804 if (unlikely(plen < sizeof(*fh) + sizeof(*fc_rp))) 805 goto len_err; 806 plen -= sizeof(*fh); 807 fc_rp = (struct fcp_resp *)(fh + 1); 808 fsp->cdb_status = fc_rp->fr_status; 809 flags = fc_rp->fr_flags; 810 fsp->scsi_comp_flags = flags; 811 expected_len = fsp->data_len; 812 813 /* if ddp, update xfer len */ 814 fc_fcp_ddp_done(fsp); 815 816 if (unlikely((flags & ~FCP_CONF_REQ) || fc_rp->fr_status)) { 817 rp_ex = (void *)(fc_rp + 1); 818 if (flags & (FCP_RSP_LEN_VAL | FCP_SNS_LEN_VAL)) { 819 if (plen < sizeof(*fc_rp) + sizeof(*rp_ex)) 820 goto len_err; 821 fc_rp_info = (struct fcp_resp_rsp_info *)(rp_ex + 1); 822 if (flags & FCP_RSP_LEN_VAL) { 823 respl = ntohl(rp_ex->fr_rsp_len); 824 if (respl != sizeof(*fc_rp_info)) 825 goto len_err; 826 if (fsp->wait_for_comp) { 827 /* Abuse cdb_status for rsp code */ 828 fsp->cdb_status = fc_rp_info->rsp_code; 829 complete(&fsp->tm_done); 830 /* 831 * tmfs will not have any scsi cmd so 832 * exit here 833 */ 834 return; 835 } else 836 goto err; 837 } 838 if (flags & FCP_SNS_LEN_VAL) { 839 snsl = ntohl(rp_ex->fr_sns_len); 840 if (snsl > SCSI_SENSE_BUFFERSIZE) 841 snsl = SCSI_SENSE_BUFFERSIZE; 842 memcpy(fsp->cmd->sense_buffer, 843 (char *)fc_rp_info + respl, snsl); 844 } 845 } 846 if (flags & (FCP_RESID_UNDER | FCP_RESID_OVER)) { 847 if (plen < sizeof(*fc_rp) + sizeof(rp_ex->fr_resid)) 848 goto len_err; 849 if (flags & FCP_RESID_UNDER) { 850 fsp->scsi_resid = ntohl(rp_ex->fr_resid); 851 /* 852 * The cmnd->underflow is the minimum number of 853 * bytes that must be transfered for this 854 * command. Provided a sense condition is not 855 * present, make sure the actual amount 856 * transferred is at least the underflow value 857 * or fail. 858 */ 859 if (!(flags & FCP_SNS_LEN_VAL) && 860 (fc_rp->fr_status == 0) && 861 (scsi_bufflen(fsp->cmd) - 862 fsp->scsi_resid) < fsp->cmd->underflow) 863 goto err; 864 expected_len -= fsp->scsi_resid; 865 } else { 866 fsp->status_code = FC_ERROR; 867 } 868 } 869 } 870 fsp->state |= FC_SRB_RCV_STATUS; 871 872 /* 873 * Check for missing or extra data frames. 874 */ 875 if (unlikely(fsp->xfer_len != expected_len)) { 876 if (fsp->xfer_len < expected_len) { 877 /* 878 * Some data may be queued locally, 879 * Wait a at least one jiffy to see if it is delivered. 880 * If this expires without data, we may do SRR. 881 */ 882 fc_fcp_timer_set(fsp, 2); 883 return; 884 } 885 fsp->status_code = FC_DATA_OVRRUN; 886 FC_FCP_DBG(fsp, "tgt %6x xfer len %zx greater than expected, " 887 "len %x, data len %x\n", 888 fsp->rport->port_id, 889 fsp->xfer_len, expected_len, fsp->data_len); 890 } 891 fc_fcp_complete_locked(fsp); 892 return; 893 894 len_err: 895 FC_FCP_DBG(fsp, "short FCP response. flags 0x%x len %u respl %u " 896 "snsl %u\n", flags, fr_len(fp), respl, snsl); 897 err: 898 fsp->status_code = FC_ERROR; 899 fc_fcp_complete_locked(fsp); 900 } 901 902 /** 903 * fc_fcp_complete_locked() - Complete processing of a fcp_pkt with the 904 * fcp_pkt lock held 905 * @fsp: The FCP packet to be completed 906 * 907 * This function may sleep if a timer is pending. The packet lock must be 908 * held, and the host lock must not be held. 909 */ 910 static void fc_fcp_complete_locked(struct fc_fcp_pkt *fsp) 911 { 912 struct fc_lport *lport = fsp->lp; 913 struct fc_seq *seq; 914 struct fc_exch *ep; 915 u32 f_ctl; 916 917 if (fsp->state & FC_SRB_ABORT_PENDING) 918 return; 919 920 if (fsp->state & FC_SRB_ABORTED) { 921 if (!fsp->status_code) 922 fsp->status_code = FC_CMD_ABORTED; 923 } else { 924 /* 925 * Test for transport underrun, independent of response 926 * underrun status. 927 */ 928 if (fsp->xfer_len < fsp->data_len && !fsp->io_status && 929 (!(fsp->scsi_comp_flags & FCP_RESID_UNDER) || 930 fsp->xfer_len < fsp->data_len - fsp->scsi_resid)) { 931 fsp->status_code = FC_DATA_UNDRUN; 932 fsp->io_status = 0; 933 } 934 } 935 936 seq = fsp->seq_ptr; 937 if (seq) { 938 fsp->seq_ptr = NULL; 939 if (unlikely(fsp->scsi_comp_flags & FCP_CONF_REQ)) { 940 struct fc_frame *conf_frame; 941 struct fc_seq *csp; 942 943 csp = lport->tt.seq_start_next(seq); 944 conf_frame = fc_fcp_frame_alloc(fsp->lp, 0); 945 if (conf_frame) { 946 f_ctl = FC_FC_SEQ_INIT; 947 f_ctl |= FC_FC_LAST_SEQ | FC_FC_END_SEQ; 948 ep = fc_seq_exch(seq); 949 fc_fill_fc_hdr(conf_frame, FC_RCTL_DD_SOL_CTL, 950 ep->did, ep->sid, 951 FC_TYPE_FCP, f_ctl, 0); 952 lport->tt.seq_send(lport, csp, conf_frame); 953 } 954 } 955 lport->tt.exch_done(seq); 956 } 957 fc_io_compl(fsp); 958 } 959 960 /** 961 * fc_fcp_cleanup_cmd() - Cancel the active exchange on a fcp_pkt 962 * @fsp: The FCP packet whose exchanges should be canceled 963 * @error: The reason for the cancellation 964 */ 965 static void fc_fcp_cleanup_cmd(struct fc_fcp_pkt *fsp, int error) 966 { 967 struct fc_lport *lport = fsp->lp; 968 969 if (fsp->seq_ptr) { 970 lport->tt.exch_done(fsp->seq_ptr); 971 fsp->seq_ptr = NULL; 972 } 973 fsp->status_code = error; 974 } 975 976 /** 977 * fc_fcp_cleanup_each_cmd() - Cancel all exchanges on a local port 978 * @lport: The local port whose exchanges should be canceled 979 * @id: The target's ID 980 * @lun: The LUN 981 * @error: The reason for cancellation 982 * 983 * If lun or id is -1, they are ignored. 984 */ 985 static void fc_fcp_cleanup_each_cmd(struct fc_lport *lport, unsigned int id, 986 unsigned int lun, int error) 987 { 988 struct fc_fcp_internal *si = fc_get_scsi_internal(lport); 989 struct fc_fcp_pkt *fsp; 990 struct scsi_cmnd *sc_cmd; 991 unsigned long flags; 992 993 spin_lock_irqsave(lport->host->host_lock, flags); 994 restart: 995 list_for_each_entry(fsp, &si->scsi_pkt_queue, list) { 996 sc_cmd = fsp->cmd; 997 if (id != -1 && scmd_id(sc_cmd) != id) 998 continue; 999 1000 if (lun != -1 && sc_cmd->device->lun != lun) 1001 continue; 1002 1003 fc_fcp_pkt_hold(fsp); 1004 spin_unlock_irqrestore(lport->host->host_lock, flags); 1005 1006 if (!fc_fcp_lock_pkt(fsp)) { 1007 fc_fcp_cleanup_cmd(fsp, error); 1008 fc_io_compl(fsp); 1009 fc_fcp_unlock_pkt(fsp); 1010 } 1011 1012 fc_fcp_pkt_release(fsp); 1013 spin_lock_irqsave(lport->host->host_lock, flags); 1014 /* 1015 * while we dropped the lock multiple pkts could 1016 * have been released, so we have to start over. 1017 */ 1018 goto restart; 1019 } 1020 spin_unlock_irqrestore(lport->host->host_lock, flags); 1021 } 1022 1023 /** 1024 * fc_fcp_abort_io() - Abort all FCP-SCSI exchanges on a local port 1025 * @lport: The local port whose exchanges are to be aborted 1026 */ 1027 static void fc_fcp_abort_io(struct fc_lport *lport) 1028 { 1029 fc_fcp_cleanup_each_cmd(lport, -1, -1, FC_HRD_ERROR); 1030 } 1031 1032 /** 1033 * fc_fcp_pkt_send() - Send a fcp_pkt 1034 * @lport: The local port to send the FCP packet on 1035 * @fsp: The FCP packet to send 1036 * 1037 * Return: Zero for success and -1 for failure 1038 * Locks: Called with the host lock and irqs disabled. 1039 */ 1040 static int fc_fcp_pkt_send(struct fc_lport *lport, struct fc_fcp_pkt *fsp) 1041 { 1042 struct fc_fcp_internal *si = fc_get_scsi_internal(lport); 1043 int rc; 1044 1045 fsp->cmd->SCp.ptr = (char *)fsp; 1046 fsp->cdb_cmd.fc_dl = htonl(fsp->data_len); 1047 fsp->cdb_cmd.fc_flags = fsp->req_flags & ~FCP_CFL_LEN_MASK; 1048 1049 int_to_scsilun(fsp->cmd->device->lun, 1050 (struct scsi_lun *)fsp->cdb_cmd.fc_lun); 1051 memcpy(fsp->cdb_cmd.fc_cdb, fsp->cmd->cmnd, fsp->cmd->cmd_len); 1052 list_add_tail(&fsp->list, &si->scsi_pkt_queue); 1053 1054 spin_unlock_irq(lport->host->host_lock); 1055 rc = lport->tt.fcp_cmd_send(lport, fsp, fc_fcp_recv); 1056 spin_lock_irq(lport->host->host_lock); 1057 if (rc) 1058 list_del(&fsp->list); 1059 1060 return rc; 1061 } 1062 1063 /** 1064 * fc_fcp_cmd_send() - Send a FCP command 1065 * @lport: The local port to send the command on 1066 * @fsp: The FCP packet the command is on 1067 * @resp: The handler for the response 1068 */ 1069 static int fc_fcp_cmd_send(struct fc_lport *lport, struct fc_fcp_pkt *fsp, 1070 void (*resp)(struct fc_seq *, 1071 struct fc_frame *fp, 1072 void *arg)) 1073 { 1074 struct fc_frame *fp; 1075 struct fc_seq *seq; 1076 struct fc_rport *rport; 1077 struct fc_rport_libfc_priv *rpriv; 1078 const size_t len = sizeof(fsp->cdb_cmd); 1079 int rc = 0; 1080 1081 if (fc_fcp_lock_pkt(fsp)) 1082 return 0; 1083 1084 fp = fc_fcp_frame_alloc(lport, sizeof(fsp->cdb_cmd)); 1085 if (!fp) { 1086 rc = -1; 1087 goto unlock; 1088 } 1089 1090 memcpy(fc_frame_payload_get(fp, len), &fsp->cdb_cmd, len); 1091 fr_fsp(fp) = fsp; 1092 rport = fsp->rport; 1093 fsp->max_payload = rport->maxframe_size; 1094 rpriv = rport->dd_data; 1095 1096 fc_fill_fc_hdr(fp, FC_RCTL_DD_UNSOL_CMD, rport->port_id, 1097 fc_host_port_id(rpriv->local_port->host), FC_TYPE_FCP, 1098 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); 1099 1100 seq = lport->tt.exch_seq_send(lport, fp, resp, fc_fcp_pkt_destroy, 1101 fsp, 0); 1102 if (!seq) { 1103 rc = -1; 1104 goto unlock; 1105 } 1106 fsp->last_pkt_time = jiffies; 1107 fsp->seq_ptr = seq; 1108 fc_fcp_pkt_hold(fsp); /* hold for fc_fcp_pkt_destroy */ 1109 1110 setup_timer(&fsp->timer, fc_fcp_timeout, (unsigned long)fsp); 1111 fc_fcp_timer_set(fsp, 1112 (fsp->tgt_flags & FC_RP_FLAGS_REC_SUPPORTED) ? 1113 FC_SCSI_REC_TOV : FC_SCSI_ER_TIMEOUT); 1114 unlock: 1115 fc_fcp_unlock_pkt(fsp); 1116 return rc; 1117 } 1118 1119 /** 1120 * fc_fcp_error() - Handler for FCP layer errors 1121 * @fsp: The FCP packet the error is on 1122 * @fp: The frame that has errored 1123 */ 1124 static void fc_fcp_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp) 1125 { 1126 int error = PTR_ERR(fp); 1127 1128 if (fc_fcp_lock_pkt(fsp)) 1129 return; 1130 1131 if (error == -FC_EX_CLOSED) { 1132 fc_fcp_retry_cmd(fsp); 1133 goto unlock; 1134 } 1135 1136 /* 1137 * clear abort pending, because the lower layer 1138 * decided to force completion. 1139 */ 1140 fsp->state &= ~FC_SRB_ABORT_PENDING; 1141 fsp->status_code = FC_CMD_PLOGO; 1142 fc_fcp_complete_locked(fsp); 1143 unlock: 1144 fc_fcp_unlock_pkt(fsp); 1145 } 1146 1147 /** 1148 * fc_fcp_pkt_abort() - Abort a fcp_pkt 1149 * @fsp: The FCP packet to abort on 1150 * 1151 * Called to send an abort and then wait for abort completion 1152 */ 1153 static int fc_fcp_pkt_abort(struct fc_fcp_pkt *fsp) 1154 { 1155 int rc = FAILED; 1156 1157 if (fc_fcp_send_abort(fsp)) 1158 return FAILED; 1159 1160 init_completion(&fsp->tm_done); 1161 fsp->wait_for_comp = 1; 1162 1163 spin_unlock_bh(&fsp->scsi_pkt_lock); 1164 rc = wait_for_completion_timeout(&fsp->tm_done, FC_SCSI_TM_TOV); 1165 spin_lock_bh(&fsp->scsi_pkt_lock); 1166 fsp->wait_for_comp = 0; 1167 1168 if (!rc) { 1169 FC_FCP_DBG(fsp, "target abort cmd failed\n"); 1170 rc = FAILED; 1171 } else if (fsp->state & FC_SRB_ABORTED) { 1172 FC_FCP_DBG(fsp, "target abort cmd passed\n"); 1173 rc = SUCCESS; 1174 fc_fcp_complete_locked(fsp); 1175 } 1176 1177 return rc; 1178 } 1179 1180 /** 1181 * fc_lun_reset_send() - Send LUN reset command 1182 * @data: The FCP packet that identifies the LUN to be reset 1183 */ 1184 static void fc_lun_reset_send(unsigned long data) 1185 { 1186 struct fc_fcp_pkt *fsp = (struct fc_fcp_pkt *)data; 1187 struct fc_lport *lport = fsp->lp; 1188 if (lport->tt.fcp_cmd_send(lport, fsp, fc_tm_done)) { 1189 if (fsp->recov_retry++ >= FC_MAX_RECOV_RETRY) 1190 return; 1191 if (fc_fcp_lock_pkt(fsp)) 1192 return; 1193 setup_timer(&fsp->timer, fc_lun_reset_send, (unsigned long)fsp); 1194 fc_fcp_timer_set(fsp, FC_SCSI_REC_TOV); 1195 fc_fcp_unlock_pkt(fsp); 1196 } 1197 } 1198 1199 /** 1200 * fc_lun_reset() - Send a LUN RESET command to a device 1201 * and wait for the reply 1202 * @lport: The local port to sent the comand on 1203 * @fsp: The FCP packet that identifies the LUN to be reset 1204 * @id: The SCSI command ID 1205 * @lun: The LUN ID to be reset 1206 */ 1207 static int fc_lun_reset(struct fc_lport *lport, struct fc_fcp_pkt *fsp, 1208 unsigned int id, unsigned int lun) 1209 { 1210 int rc; 1211 1212 fsp->cdb_cmd.fc_dl = htonl(fsp->data_len); 1213 fsp->cdb_cmd.fc_tm_flags = FCP_TMF_LUN_RESET; 1214 int_to_scsilun(lun, (struct scsi_lun *)fsp->cdb_cmd.fc_lun); 1215 1216 fsp->wait_for_comp = 1; 1217 init_completion(&fsp->tm_done); 1218 1219 fc_lun_reset_send((unsigned long)fsp); 1220 1221 /* 1222 * wait for completion of reset 1223 * after that make sure all commands are terminated 1224 */ 1225 rc = wait_for_completion_timeout(&fsp->tm_done, FC_SCSI_TM_TOV); 1226 1227 spin_lock_bh(&fsp->scsi_pkt_lock); 1228 fsp->state |= FC_SRB_COMPL; 1229 spin_unlock_bh(&fsp->scsi_pkt_lock); 1230 1231 del_timer_sync(&fsp->timer); 1232 1233 spin_lock_bh(&fsp->scsi_pkt_lock); 1234 if (fsp->seq_ptr) { 1235 lport->tt.exch_done(fsp->seq_ptr); 1236 fsp->seq_ptr = NULL; 1237 } 1238 fsp->wait_for_comp = 0; 1239 spin_unlock_bh(&fsp->scsi_pkt_lock); 1240 1241 if (!rc) { 1242 FC_SCSI_DBG(lport, "lun reset failed\n"); 1243 return FAILED; 1244 } 1245 1246 /* cdb_status holds the tmf's rsp code */ 1247 if (fsp->cdb_status != FCP_TMF_CMPL) 1248 return FAILED; 1249 1250 FC_SCSI_DBG(lport, "lun reset to lun %u completed\n", lun); 1251 fc_fcp_cleanup_each_cmd(lport, id, lun, FC_CMD_ABORTED); 1252 return SUCCESS; 1253 } 1254 1255 /** 1256 * fc_tm_done() - Task Managment response handler 1257 * @seq: The sequence that the response is on 1258 * @fp: The response frame 1259 * @arg: The FCP packet the response is for 1260 */ 1261 static void fc_tm_done(struct fc_seq *seq, struct fc_frame *fp, void *arg) 1262 { 1263 struct fc_fcp_pkt *fsp = arg; 1264 struct fc_frame_header *fh; 1265 1266 if (IS_ERR(fp)) { 1267 /* 1268 * If there is an error just let it timeout or wait 1269 * for TMF to be aborted if it timedout. 1270 * 1271 * scsi-eh will escalate for when either happens. 1272 */ 1273 return; 1274 } 1275 1276 if (fc_fcp_lock_pkt(fsp)) 1277 return; 1278 1279 /* 1280 * raced with eh timeout handler. 1281 */ 1282 if (!fsp->seq_ptr || !fsp->wait_for_comp) { 1283 spin_unlock_bh(&fsp->scsi_pkt_lock); 1284 return; 1285 } 1286 1287 fh = fc_frame_header_get(fp); 1288 if (fh->fh_type != FC_TYPE_BLS) 1289 fc_fcp_resp(fsp, fp); 1290 fsp->seq_ptr = NULL; 1291 fsp->lp->tt.exch_done(seq); 1292 fc_frame_free(fp); 1293 fc_fcp_unlock_pkt(fsp); 1294 } 1295 1296 /** 1297 * fc_fcp_cleanup() - Cleanup all FCP exchanges on a local port 1298 * @lport: The local port to be cleaned up 1299 */ 1300 static void fc_fcp_cleanup(struct fc_lport *lport) 1301 { 1302 fc_fcp_cleanup_each_cmd(lport, -1, -1, FC_ERROR); 1303 } 1304 1305 /** 1306 * fc_fcp_timeout() - Handler for fcp_pkt timeouts 1307 * @data: The FCP packet that has timed out 1308 * 1309 * If REC is supported then just issue it and return. The REC exchange will 1310 * complete or time out and recovery can continue at that point. Otherwise, 1311 * if the response has been received without all the data it has been 1312 * ER_TIMEOUT since the response was received. If the response has not been 1313 * received we see if data was received recently. If it has been then we 1314 * continue waiting, otherwise, we abort the command. 1315 */ 1316 static void fc_fcp_timeout(unsigned long data) 1317 { 1318 struct fc_fcp_pkt *fsp = (struct fc_fcp_pkt *)data; 1319 struct fc_rport *rport = fsp->rport; 1320 struct fc_rport_libfc_priv *rpriv = rport->dd_data; 1321 1322 if (fc_fcp_lock_pkt(fsp)) 1323 return; 1324 1325 if (fsp->cdb_cmd.fc_tm_flags) 1326 goto unlock; 1327 1328 fsp->state |= FC_SRB_FCP_PROCESSING_TMO; 1329 1330 if (rpriv->flags & FC_RP_FLAGS_REC_SUPPORTED) 1331 fc_fcp_rec(fsp); 1332 else if (time_after_eq(fsp->last_pkt_time + (FC_SCSI_ER_TIMEOUT / 2), 1333 jiffies)) 1334 fc_fcp_timer_set(fsp, FC_SCSI_ER_TIMEOUT); 1335 else if (fsp->state & FC_SRB_RCV_STATUS) 1336 fc_fcp_complete_locked(fsp); 1337 else 1338 fc_timeout_error(fsp); 1339 fsp->state &= ~FC_SRB_FCP_PROCESSING_TMO; 1340 unlock: 1341 fc_fcp_unlock_pkt(fsp); 1342 } 1343 1344 /** 1345 * fc_fcp_rec() - Send a REC ELS request 1346 * @fsp: The FCP packet to send the REC request on 1347 */ 1348 static void fc_fcp_rec(struct fc_fcp_pkt *fsp) 1349 { 1350 struct fc_lport *lport; 1351 struct fc_frame *fp; 1352 struct fc_rport *rport; 1353 struct fc_rport_libfc_priv *rpriv; 1354 1355 lport = fsp->lp; 1356 rport = fsp->rport; 1357 rpriv = rport->dd_data; 1358 if (!fsp->seq_ptr || rpriv->rp_state != RPORT_ST_READY) { 1359 fsp->status_code = FC_HRD_ERROR; 1360 fsp->io_status = 0; 1361 fc_fcp_complete_locked(fsp); 1362 return; 1363 } 1364 fp = fc_fcp_frame_alloc(lport, sizeof(struct fc_els_rec)); 1365 if (!fp) 1366 goto retry; 1367 1368 fr_seq(fp) = fsp->seq_ptr; 1369 fc_fill_fc_hdr(fp, FC_RCTL_ELS_REQ, rport->port_id, 1370 fc_host_port_id(rpriv->local_port->host), FC_TYPE_ELS, 1371 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); 1372 if (lport->tt.elsct_send(lport, rport->port_id, fp, ELS_REC, 1373 fc_fcp_rec_resp, fsp, 1374 jiffies_to_msecs(FC_SCSI_REC_TOV))) { 1375 fc_fcp_pkt_hold(fsp); /* hold while REC outstanding */ 1376 return; 1377 } 1378 retry: 1379 if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY) 1380 fc_fcp_timer_set(fsp, FC_SCSI_REC_TOV); 1381 else 1382 fc_timeout_error(fsp); 1383 } 1384 1385 /** 1386 * fc_fcp_rec_resp() - Handler for REC ELS responses 1387 * @seq: The sequence the response is on 1388 * @fp: The response frame 1389 * @arg: The FCP packet the response is on 1390 * 1391 * If the response is a reject then the scsi layer will handle 1392 * the timeout. If the response is a LS_ACC then if the I/O was not completed 1393 * set the timeout and return. If the I/O was completed then complete the 1394 * exchange and tell the SCSI layer. 1395 */ 1396 static void fc_fcp_rec_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg) 1397 { 1398 struct fc_fcp_pkt *fsp = (struct fc_fcp_pkt *)arg; 1399 struct fc_els_rec_acc *recp; 1400 struct fc_els_ls_rjt *rjt; 1401 u32 e_stat; 1402 u8 opcode; 1403 u32 offset; 1404 enum dma_data_direction data_dir; 1405 enum fc_rctl r_ctl; 1406 struct fc_rport_libfc_priv *rpriv; 1407 1408 if (IS_ERR(fp)) { 1409 fc_fcp_rec_error(fsp, fp); 1410 return; 1411 } 1412 1413 if (fc_fcp_lock_pkt(fsp)) 1414 goto out; 1415 1416 fsp->recov_retry = 0; 1417 opcode = fc_frame_payload_op(fp); 1418 if (opcode == ELS_LS_RJT) { 1419 rjt = fc_frame_payload_get(fp, sizeof(*rjt)); 1420 switch (rjt->er_reason) { 1421 default: 1422 FC_FCP_DBG(fsp, "device %x unexpected REC reject " 1423 "reason %d expl %d\n", 1424 fsp->rport->port_id, rjt->er_reason, 1425 rjt->er_explan); 1426 /* fall through */ 1427 case ELS_RJT_UNSUP: 1428 FC_FCP_DBG(fsp, "device does not support REC\n"); 1429 rpriv = fsp->rport->dd_data; 1430 /* 1431 * if we do not spport RECs or got some bogus 1432 * reason then resetup timer so we check for 1433 * making progress. 1434 */ 1435 rpriv->flags &= ~FC_RP_FLAGS_REC_SUPPORTED; 1436 fc_fcp_timer_set(fsp, FC_SCSI_ER_TIMEOUT); 1437 break; 1438 case ELS_RJT_LOGIC: 1439 case ELS_RJT_UNAB: 1440 /* 1441 * If no data transfer, the command frame got dropped 1442 * so we just retry. If data was transferred, we 1443 * lost the response but the target has no record, 1444 * so we abort and retry. 1445 */ 1446 if (rjt->er_explan == ELS_EXPL_OXID_RXID && 1447 fsp->xfer_len == 0) { 1448 fc_fcp_retry_cmd(fsp); 1449 break; 1450 } 1451 fc_timeout_error(fsp); 1452 break; 1453 } 1454 } else if (opcode == ELS_LS_ACC) { 1455 if (fsp->state & FC_SRB_ABORTED) 1456 goto unlock_out; 1457 1458 data_dir = fsp->cmd->sc_data_direction; 1459 recp = fc_frame_payload_get(fp, sizeof(*recp)); 1460 offset = ntohl(recp->reca_fc4value); 1461 e_stat = ntohl(recp->reca_e_stat); 1462 1463 if (e_stat & ESB_ST_COMPLETE) { 1464 1465 /* 1466 * The exchange is complete. 1467 * 1468 * For output, we must've lost the response. 1469 * For input, all data must've been sent. 1470 * We lost may have lost the response 1471 * (and a confirmation was requested) and maybe 1472 * some data. 1473 * 1474 * If all data received, send SRR 1475 * asking for response. If partial data received, 1476 * or gaps, SRR requests data at start of gap. 1477 * Recovery via SRR relies on in-order-delivery. 1478 */ 1479 if (data_dir == DMA_TO_DEVICE) { 1480 r_ctl = FC_RCTL_DD_CMD_STATUS; 1481 } else if (fsp->xfer_contig_end == offset) { 1482 r_ctl = FC_RCTL_DD_CMD_STATUS; 1483 } else { 1484 offset = fsp->xfer_contig_end; 1485 r_ctl = FC_RCTL_DD_SOL_DATA; 1486 } 1487 fc_fcp_srr(fsp, r_ctl, offset); 1488 } else if (e_stat & ESB_ST_SEQ_INIT) { 1489 1490 /* 1491 * The remote port has the initiative, so just 1492 * keep waiting for it to complete. 1493 */ 1494 fc_fcp_timer_set(fsp, FC_SCSI_REC_TOV); 1495 } else { 1496 1497 /* 1498 * The exchange is incomplete, we have seq. initiative. 1499 * Lost response with requested confirmation, 1500 * lost confirmation, lost transfer ready or 1501 * lost write data. 1502 * 1503 * For output, if not all data was received, ask 1504 * for transfer ready to be repeated. 1505 * 1506 * If we received or sent all the data, send SRR to 1507 * request response. 1508 * 1509 * If we lost a response, we may have lost some read 1510 * data as well. 1511 */ 1512 r_ctl = FC_RCTL_DD_SOL_DATA; 1513 if (data_dir == DMA_TO_DEVICE) { 1514 r_ctl = FC_RCTL_DD_CMD_STATUS; 1515 if (offset < fsp->data_len) 1516 r_ctl = FC_RCTL_DD_DATA_DESC; 1517 } else if (offset == fsp->xfer_contig_end) { 1518 r_ctl = FC_RCTL_DD_CMD_STATUS; 1519 } else if (fsp->xfer_contig_end < offset) { 1520 offset = fsp->xfer_contig_end; 1521 } 1522 fc_fcp_srr(fsp, r_ctl, offset); 1523 } 1524 } 1525 unlock_out: 1526 fc_fcp_unlock_pkt(fsp); 1527 out: 1528 fc_fcp_pkt_release(fsp); /* drop hold for outstanding REC */ 1529 fc_frame_free(fp); 1530 } 1531 1532 /** 1533 * fc_fcp_rec_error() - Handler for REC errors 1534 * @fsp: The FCP packet the error is on 1535 * @fp: The REC frame 1536 */ 1537 static void fc_fcp_rec_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp) 1538 { 1539 int error = PTR_ERR(fp); 1540 1541 if (fc_fcp_lock_pkt(fsp)) 1542 goto out; 1543 1544 switch (error) { 1545 case -FC_EX_CLOSED: 1546 fc_fcp_retry_cmd(fsp); 1547 break; 1548 1549 default: 1550 FC_FCP_DBG(fsp, "REC %p fid %x error unexpected error %d\n", 1551 fsp, fsp->rport->port_id, error); 1552 fsp->status_code = FC_CMD_PLOGO; 1553 /* fall through */ 1554 1555 case -FC_EX_TIMEOUT: 1556 /* 1557 * Assume REC or LS_ACC was lost. 1558 * The exchange manager will have aborted REC, so retry. 1559 */ 1560 FC_FCP_DBG(fsp, "REC fid %x error error %d retry %d/%d\n", 1561 fsp->rport->port_id, error, fsp->recov_retry, 1562 FC_MAX_RECOV_RETRY); 1563 if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY) 1564 fc_fcp_rec(fsp); 1565 else 1566 fc_timeout_error(fsp); 1567 break; 1568 } 1569 fc_fcp_unlock_pkt(fsp); 1570 out: 1571 fc_fcp_pkt_release(fsp); /* drop hold for outstanding REC */ 1572 } 1573 1574 /** 1575 * fc_timeout_error() - Handler for fcp_pkt timeouts 1576 * @fsp: The FCP packt that has timed out 1577 */ 1578 static void fc_timeout_error(struct fc_fcp_pkt *fsp) 1579 { 1580 fsp->status_code = FC_CMD_TIME_OUT; 1581 fsp->cdb_status = 0; 1582 fsp->io_status = 0; 1583 /* 1584 * if this fails then we let the scsi command timer fire and 1585 * scsi-ml escalate. 1586 */ 1587 fc_fcp_send_abort(fsp); 1588 } 1589 1590 /** 1591 * fc_fcp_srr() - Send a SRR request (Sequence Retransmission Request) 1592 * @fsp: The FCP packet the SRR is to be sent on 1593 * @r_ctl: The R_CTL field for the SRR request 1594 * This is called after receiving status but insufficient data, or 1595 * when expecting status but the request has timed out. 1596 */ 1597 static void fc_fcp_srr(struct fc_fcp_pkt *fsp, enum fc_rctl r_ctl, u32 offset) 1598 { 1599 struct fc_lport *lport = fsp->lp; 1600 struct fc_rport *rport; 1601 struct fc_rport_libfc_priv *rpriv; 1602 struct fc_exch *ep = fc_seq_exch(fsp->seq_ptr); 1603 struct fc_seq *seq; 1604 struct fcp_srr *srr; 1605 struct fc_frame *fp; 1606 u8 cdb_op; 1607 1608 rport = fsp->rport; 1609 rpriv = rport->dd_data; 1610 cdb_op = fsp->cdb_cmd.fc_cdb[0]; 1611 1612 if (!(rpriv->flags & FC_RP_FLAGS_RETRY) || 1613 rpriv->rp_state != RPORT_ST_READY) 1614 goto retry; /* shouldn't happen */ 1615 fp = fc_fcp_frame_alloc(lport, sizeof(*srr)); 1616 if (!fp) 1617 goto retry; 1618 1619 srr = fc_frame_payload_get(fp, sizeof(*srr)); 1620 memset(srr, 0, sizeof(*srr)); 1621 srr->srr_op = ELS_SRR; 1622 srr->srr_ox_id = htons(ep->oxid); 1623 srr->srr_rx_id = htons(ep->rxid); 1624 srr->srr_r_ctl = r_ctl; 1625 srr->srr_rel_off = htonl(offset); 1626 1627 fc_fill_fc_hdr(fp, FC_RCTL_ELS4_REQ, rport->port_id, 1628 fc_host_port_id(rpriv->local_port->host), FC_TYPE_FCP, 1629 FC_FC_FIRST_SEQ | FC_FC_END_SEQ | FC_FC_SEQ_INIT, 0); 1630 1631 seq = lport->tt.exch_seq_send(lport, fp, fc_fcp_srr_resp, NULL, 1632 fsp, jiffies_to_msecs(FC_SCSI_REC_TOV)); 1633 if (!seq) 1634 goto retry; 1635 1636 fsp->recov_seq = seq; 1637 fsp->xfer_len = offset; 1638 fsp->xfer_contig_end = offset; 1639 fsp->state &= ~FC_SRB_RCV_STATUS; 1640 fc_fcp_pkt_hold(fsp); /* hold for outstanding SRR */ 1641 return; 1642 retry: 1643 fc_fcp_retry_cmd(fsp); 1644 } 1645 1646 /** 1647 * fc_fcp_srr_resp() - Handler for SRR response 1648 * @seq: The sequence the SRR is on 1649 * @fp: The SRR frame 1650 * @arg: The FCP packet the SRR is on 1651 */ 1652 static void fc_fcp_srr_resp(struct fc_seq *seq, struct fc_frame *fp, void *arg) 1653 { 1654 struct fc_fcp_pkt *fsp = arg; 1655 struct fc_frame_header *fh; 1656 1657 if (IS_ERR(fp)) { 1658 fc_fcp_srr_error(fsp, fp); 1659 return; 1660 } 1661 1662 if (fc_fcp_lock_pkt(fsp)) 1663 goto out; 1664 1665 fh = fc_frame_header_get(fp); 1666 /* 1667 * BUG? fc_fcp_srr_error calls exch_done which would release 1668 * the ep. But if fc_fcp_srr_error had got -FC_EX_TIMEOUT, 1669 * then fc_exch_timeout would be sending an abort. The exch_done 1670 * call by fc_fcp_srr_error would prevent fc_exch.c from seeing 1671 * an abort response though. 1672 */ 1673 if (fh->fh_type == FC_TYPE_BLS) { 1674 fc_fcp_unlock_pkt(fsp); 1675 return; 1676 } 1677 1678 fsp->recov_seq = NULL; 1679 switch (fc_frame_payload_op(fp)) { 1680 case ELS_LS_ACC: 1681 fsp->recov_retry = 0; 1682 fc_fcp_timer_set(fsp, FC_SCSI_REC_TOV); 1683 break; 1684 case ELS_LS_RJT: 1685 default: 1686 fc_timeout_error(fsp); 1687 break; 1688 } 1689 fc_fcp_unlock_pkt(fsp); 1690 fsp->lp->tt.exch_done(seq); 1691 out: 1692 fc_frame_free(fp); 1693 fc_fcp_pkt_release(fsp); /* drop hold for outstanding SRR */ 1694 } 1695 1696 /** 1697 * fc_fcp_srr_error() - Handler for SRR errors 1698 * @fsp: The FCP packet that the SRR error is on 1699 * @fp: The SRR frame 1700 */ 1701 static void fc_fcp_srr_error(struct fc_fcp_pkt *fsp, struct fc_frame *fp) 1702 { 1703 if (fc_fcp_lock_pkt(fsp)) 1704 goto out; 1705 fsp->lp->tt.exch_done(fsp->recov_seq); 1706 fsp->recov_seq = NULL; 1707 switch (PTR_ERR(fp)) { 1708 case -FC_EX_TIMEOUT: 1709 if (fsp->recov_retry++ < FC_MAX_RECOV_RETRY) 1710 fc_fcp_rec(fsp); 1711 else 1712 fc_timeout_error(fsp); 1713 break; 1714 case -FC_EX_CLOSED: /* e.g., link failure */ 1715 /* fall through */ 1716 default: 1717 fc_fcp_retry_cmd(fsp); 1718 break; 1719 } 1720 fc_fcp_unlock_pkt(fsp); 1721 out: 1722 fc_fcp_pkt_release(fsp); /* drop hold for outstanding SRR */ 1723 } 1724 1725 /** 1726 * fc_fcp_lport_queue_ready() - Determine if the lport and it's queue is ready 1727 * @lport: The local port to be checked 1728 */ 1729 static inline int fc_fcp_lport_queue_ready(struct fc_lport *lport) 1730 { 1731 /* lock ? */ 1732 return (lport->state == LPORT_ST_READY) && 1733 lport->link_up && !lport->qfull; 1734 } 1735 1736 /** 1737 * fc_queuecommand() - The queuecommand function of the SCSI template 1738 * @cmd: The scsi_cmnd to be executed 1739 * @done: The callback function to be called when the scsi_cmnd is complete 1740 * 1741 * This is the i/o strategy routine, called by the SCSI layer. This routine 1742 * is called with the host_lock held. 1743 */ 1744 int fc_queuecommand(struct scsi_cmnd *sc_cmd, void (*done)(struct scsi_cmnd *)) 1745 { 1746 struct fc_lport *lport; 1747 struct fc_rport *rport = starget_to_rport(scsi_target(sc_cmd->device)); 1748 struct fc_fcp_pkt *fsp; 1749 struct fc_rport_libfc_priv *rpriv; 1750 int rval; 1751 int rc = 0; 1752 struct fcoe_dev_stats *stats; 1753 1754 lport = shost_priv(sc_cmd->device->host); 1755 1756 rval = fc_remote_port_chkready(rport); 1757 if (rval) { 1758 sc_cmd->result = rval; 1759 done(sc_cmd); 1760 goto out; 1761 } 1762 1763 if (!*(struct fc_remote_port **)rport->dd_data) { 1764 /* 1765 * rport is transitioning from blocked/deleted to 1766 * online 1767 */ 1768 sc_cmd->result = DID_IMM_RETRY << 16; 1769 done(sc_cmd); 1770 goto out; 1771 } 1772 1773 rpriv = rport->dd_data; 1774 1775 if (!fc_fcp_lport_queue_ready(lport)) { 1776 if (lport->qfull) 1777 fc_fcp_can_queue_ramp_down(lport); 1778 rc = SCSI_MLQUEUE_HOST_BUSY; 1779 goto out; 1780 } 1781 1782 fsp = fc_fcp_pkt_alloc(lport, GFP_ATOMIC); 1783 if (fsp == NULL) { 1784 rc = SCSI_MLQUEUE_HOST_BUSY; 1785 goto out; 1786 } 1787 1788 /* 1789 * build the libfc request pkt 1790 */ 1791 fsp->cmd = sc_cmd; /* save the cmd */ 1792 fsp->lp = lport; /* save the softc ptr */ 1793 fsp->rport = rport; /* set the remote port ptr */ 1794 fsp->xfer_ddp = FC_XID_UNKNOWN; 1795 sc_cmd->scsi_done = done; 1796 1797 /* 1798 * set up the transfer length 1799 */ 1800 fsp->data_len = scsi_bufflen(sc_cmd); 1801 fsp->xfer_len = 0; 1802 1803 /* 1804 * setup the data direction 1805 */ 1806 stats = fc_lport_get_stats(lport); 1807 if (sc_cmd->sc_data_direction == DMA_FROM_DEVICE) { 1808 fsp->req_flags = FC_SRB_READ; 1809 stats->InputRequests++; 1810 stats->InputMegabytes = fsp->data_len; 1811 } else if (sc_cmd->sc_data_direction == DMA_TO_DEVICE) { 1812 fsp->req_flags = FC_SRB_WRITE; 1813 stats->OutputRequests++; 1814 stats->OutputMegabytes = fsp->data_len; 1815 } else { 1816 fsp->req_flags = 0; 1817 stats->ControlRequests++; 1818 } 1819 1820 fsp->tgt_flags = rpriv->flags; 1821 1822 init_timer(&fsp->timer); 1823 fsp->timer.data = (unsigned long)fsp; 1824 1825 /* 1826 * send it to the lower layer 1827 * if we get -1 return then put the request in the pending 1828 * queue. 1829 */ 1830 rval = fc_fcp_pkt_send(lport, fsp); 1831 if (rval != 0) { 1832 fsp->state = FC_SRB_FREE; 1833 fc_fcp_pkt_release(fsp); 1834 rc = SCSI_MLQUEUE_HOST_BUSY; 1835 } 1836 out: 1837 return rc; 1838 } 1839 EXPORT_SYMBOL(fc_queuecommand); 1840 1841 /** 1842 * fc_io_compl() - Handle responses for completed commands 1843 * @fsp: The FCP packet that is complete 1844 * 1845 * Translates fcp_pkt errors to a Linux SCSI errors. 1846 * The fcp packet lock must be held when calling. 1847 */ 1848 static void fc_io_compl(struct fc_fcp_pkt *fsp) 1849 { 1850 struct fc_fcp_internal *si; 1851 struct scsi_cmnd *sc_cmd; 1852 struct fc_lport *lport; 1853 unsigned long flags; 1854 1855 /* release outstanding ddp context */ 1856 fc_fcp_ddp_done(fsp); 1857 1858 fsp->state |= FC_SRB_COMPL; 1859 if (!(fsp->state & FC_SRB_FCP_PROCESSING_TMO)) { 1860 spin_unlock_bh(&fsp->scsi_pkt_lock); 1861 del_timer_sync(&fsp->timer); 1862 spin_lock_bh(&fsp->scsi_pkt_lock); 1863 } 1864 1865 lport = fsp->lp; 1866 si = fc_get_scsi_internal(lport); 1867 spin_lock_irqsave(lport->host->host_lock, flags); 1868 if (!fsp->cmd) { 1869 spin_unlock_irqrestore(lport->host->host_lock, flags); 1870 return; 1871 } 1872 1873 /* 1874 * if can_queue ramp down is done then try can_queue ramp up 1875 * since commands are completing now. 1876 */ 1877 if (si->last_can_queue_ramp_down_time) 1878 fc_fcp_can_queue_ramp_up(lport); 1879 1880 sc_cmd = fsp->cmd; 1881 fsp->cmd = NULL; 1882 1883 if (!sc_cmd->SCp.ptr) { 1884 spin_unlock_irqrestore(lport->host->host_lock, flags); 1885 return; 1886 } 1887 1888 CMD_SCSI_STATUS(sc_cmd) = fsp->cdb_status; 1889 switch (fsp->status_code) { 1890 case FC_COMPLETE: 1891 if (fsp->cdb_status == 0) { 1892 /* 1893 * good I/O status 1894 */ 1895 sc_cmd->result = DID_OK << 16; 1896 if (fsp->scsi_resid) 1897 CMD_RESID_LEN(sc_cmd) = fsp->scsi_resid; 1898 } else { 1899 /* 1900 * transport level I/O was ok but scsi 1901 * has non zero status 1902 */ 1903 sc_cmd->result = (DID_OK << 16) | fsp->cdb_status; 1904 } 1905 break; 1906 case FC_ERROR: 1907 sc_cmd->result = DID_ERROR << 16; 1908 break; 1909 case FC_DATA_UNDRUN: 1910 if ((fsp->cdb_status == 0) && !(fsp->req_flags & FC_SRB_READ)) { 1911 /* 1912 * scsi status is good but transport level 1913 * underrun. 1914 */ 1915 sc_cmd->result = (fsp->state & FC_SRB_RCV_STATUS ? 1916 DID_OK : DID_ERROR) << 16; 1917 } else { 1918 /* 1919 * scsi got underrun, this is an error 1920 */ 1921 CMD_RESID_LEN(sc_cmd) = fsp->scsi_resid; 1922 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status; 1923 } 1924 break; 1925 case FC_DATA_OVRRUN: 1926 /* 1927 * overrun is an error 1928 */ 1929 sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status; 1930 break; 1931 case FC_CMD_ABORTED: 1932 sc_cmd->result = (DID_ERROR << 16) | fsp->io_status; 1933 break; 1934 case FC_CMD_TIME_OUT: 1935 sc_cmd->result = (DID_BUS_BUSY << 16) | fsp->io_status; 1936 break; 1937 case FC_CMD_RESET: 1938 sc_cmd->result = (DID_RESET << 16); 1939 break; 1940 case FC_HRD_ERROR: 1941 sc_cmd->result = (DID_NO_CONNECT << 16); 1942 break; 1943 default: 1944 sc_cmd->result = (DID_ERROR << 16); 1945 break; 1946 } 1947 1948 list_del(&fsp->list); 1949 sc_cmd->SCp.ptr = NULL; 1950 sc_cmd->scsi_done(sc_cmd); 1951 spin_unlock_irqrestore(lport->host->host_lock, flags); 1952 1953 /* release ref from initial allocation in queue command */ 1954 fc_fcp_pkt_release(fsp); 1955 } 1956 1957 /** 1958 * fc_eh_abort() - Abort a command 1959 * @sc_cmd: The SCSI command to abort 1960 * 1961 * From SCSI host template. 1962 * Send an ABTS to the target device and wait for the response. 1963 */ 1964 int fc_eh_abort(struct scsi_cmnd *sc_cmd) 1965 { 1966 struct fc_fcp_pkt *fsp; 1967 struct fc_lport *lport; 1968 int rc = FAILED; 1969 unsigned long flags; 1970 1971 lport = shost_priv(sc_cmd->device->host); 1972 if (lport->state != LPORT_ST_READY) 1973 return rc; 1974 else if (!lport->link_up) 1975 return rc; 1976 1977 spin_lock_irqsave(lport->host->host_lock, flags); 1978 fsp = CMD_SP(sc_cmd); 1979 if (!fsp) { 1980 /* command completed while scsi eh was setting up */ 1981 spin_unlock_irqrestore(lport->host->host_lock, flags); 1982 return SUCCESS; 1983 } 1984 /* grab a ref so the fsp and sc_cmd cannot be relased from under us */ 1985 fc_fcp_pkt_hold(fsp); 1986 spin_unlock_irqrestore(lport->host->host_lock, flags); 1987 1988 if (fc_fcp_lock_pkt(fsp)) { 1989 /* completed while we were waiting for timer to be deleted */ 1990 rc = SUCCESS; 1991 goto release_pkt; 1992 } 1993 1994 rc = fc_fcp_pkt_abort(fsp); 1995 fc_fcp_unlock_pkt(fsp); 1996 1997 release_pkt: 1998 fc_fcp_pkt_release(fsp); 1999 return rc; 2000 } 2001 EXPORT_SYMBOL(fc_eh_abort); 2002 2003 /** 2004 * fc_eh_device_reset() - Reset a single LUN 2005 * @sc_cmd: The SCSI command which identifies the device whose 2006 * LUN is to be reset 2007 * 2008 * Set from SCSI host template. 2009 */ 2010 int fc_eh_device_reset(struct scsi_cmnd *sc_cmd) 2011 { 2012 struct fc_lport *lport; 2013 struct fc_fcp_pkt *fsp; 2014 struct fc_rport *rport = starget_to_rport(scsi_target(sc_cmd->device)); 2015 int rc = FAILED; 2016 int rval; 2017 2018 rval = fc_remote_port_chkready(rport); 2019 if (rval) 2020 goto out; 2021 2022 lport = shost_priv(sc_cmd->device->host); 2023 2024 if (lport->state != LPORT_ST_READY) 2025 return rc; 2026 2027 FC_SCSI_DBG(lport, "Resetting rport (%6x)\n", rport->port_id); 2028 2029 fsp = fc_fcp_pkt_alloc(lport, GFP_NOIO); 2030 if (fsp == NULL) { 2031 printk(KERN_WARNING "libfc: could not allocate scsi_pkt\n"); 2032 goto out; 2033 } 2034 2035 /* 2036 * Build the libfc request pkt. Do not set the scsi cmnd, because 2037 * the sc passed in is not setup for execution like when sent 2038 * through the queuecommand callout. 2039 */ 2040 fsp->lp = lport; /* save the softc ptr */ 2041 fsp->rport = rport; /* set the remote port ptr */ 2042 2043 /* 2044 * flush outstanding commands 2045 */ 2046 rc = fc_lun_reset(lport, fsp, scmd_id(sc_cmd), sc_cmd->device->lun); 2047 fsp->state = FC_SRB_FREE; 2048 fc_fcp_pkt_release(fsp); 2049 2050 out: 2051 return rc; 2052 } 2053 EXPORT_SYMBOL(fc_eh_device_reset); 2054 2055 /** 2056 * fc_eh_host_reset() - Reset a Scsi_Host. 2057 * @sc_cmd: The SCSI command that identifies the SCSI host to be reset 2058 */ 2059 int fc_eh_host_reset(struct scsi_cmnd *sc_cmd) 2060 { 2061 struct Scsi_Host *shost = sc_cmd->device->host; 2062 struct fc_lport *lport = shost_priv(shost); 2063 unsigned long wait_tmo; 2064 2065 FC_SCSI_DBG(lport, "Resetting host\n"); 2066 2067 lport->tt.lport_reset(lport); 2068 wait_tmo = jiffies + FC_HOST_RESET_TIMEOUT; 2069 while (!fc_fcp_lport_queue_ready(lport) && time_before(jiffies, 2070 wait_tmo)) 2071 msleep(1000); 2072 2073 if (fc_fcp_lport_queue_ready(lport)) { 2074 shost_printk(KERN_INFO, shost, "libfc: Host reset succeeded " 2075 "on port (%6x)\n", fc_host_port_id(lport->host)); 2076 return SUCCESS; 2077 } else { 2078 shost_printk(KERN_INFO, shost, "libfc: Host reset failed, " 2079 "port (%6x) is not ready.\n", 2080 fc_host_port_id(lport->host)); 2081 return FAILED; 2082 } 2083 } 2084 EXPORT_SYMBOL(fc_eh_host_reset); 2085 2086 /** 2087 * fc_slave_alloc() - Configure the queue depth of a Scsi_Host 2088 * @sdev: The SCSI device that identifies the SCSI host 2089 * 2090 * Configures queue depth based on host's cmd_per_len. If not set 2091 * then we use the libfc default. 2092 */ 2093 int fc_slave_alloc(struct scsi_device *sdev) 2094 { 2095 struct fc_rport *rport = starget_to_rport(scsi_target(sdev)); 2096 2097 if (!rport || fc_remote_port_chkready(rport)) 2098 return -ENXIO; 2099 2100 if (sdev->tagged_supported) 2101 scsi_activate_tcq(sdev, FC_FCP_DFLT_QUEUE_DEPTH); 2102 else 2103 scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), 2104 FC_FCP_DFLT_QUEUE_DEPTH); 2105 2106 return 0; 2107 } 2108 EXPORT_SYMBOL(fc_slave_alloc); 2109 2110 /** 2111 * fc_change_queue_depth() - Change a device's queue depth 2112 * @sdev: The SCSI device whose queue depth is to change 2113 * @qdepth: The new queue depth 2114 * @reason: The resason for the change 2115 */ 2116 int fc_change_queue_depth(struct scsi_device *sdev, int qdepth, int reason) 2117 { 2118 switch (reason) { 2119 case SCSI_QDEPTH_DEFAULT: 2120 scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); 2121 break; 2122 case SCSI_QDEPTH_QFULL: 2123 scsi_track_queue_full(sdev, qdepth); 2124 break; 2125 case SCSI_QDEPTH_RAMP_UP: 2126 scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); 2127 break; 2128 default: 2129 return -EOPNOTSUPP; 2130 } 2131 return sdev->queue_depth; 2132 } 2133 EXPORT_SYMBOL(fc_change_queue_depth); 2134 2135 /** 2136 * fc_change_queue_type() - Change a device's queue type 2137 * @sdev: The SCSI device whose queue depth is to change 2138 * @tag_type: Identifier for queue type 2139 */ 2140 int fc_change_queue_type(struct scsi_device *sdev, int tag_type) 2141 { 2142 if (sdev->tagged_supported) { 2143 scsi_set_tag_type(sdev, tag_type); 2144 if (tag_type) 2145 scsi_activate_tcq(sdev, sdev->queue_depth); 2146 else 2147 scsi_deactivate_tcq(sdev, sdev->queue_depth); 2148 } else 2149 tag_type = 0; 2150 2151 return tag_type; 2152 } 2153 EXPORT_SYMBOL(fc_change_queue_type); 2154 2155 /** 2156 * fc_fcp_destory() - Tear down the FCP layer for a given local port 2157 * @lport: The local port that no longer needs the FCP layer 2158 */ 2159 void fc_fcp_destroy(struct fc_lport *lport) 2160 { 2161 struct fc_fcp_internal *si = fc_get_scsi_internal(lport); 2162 2163 if (!list_empty(&si->scsi_pkt_queue)) 2164 printk(KERN_ERR "libfc: Leaked SCSI packets when destroying " 2165 "port (%6x)\n", fc_host_port_id(lport->host)); 2166 2167 mempool_destroy(si->scsi_pkt_pool); 2168 kfree(si); 2169 lport->scsi_priv = NULL; 2170 } 2171 EXPORT_SYMBOL(fc_fcp_destroy); 2172 2173 int fc_setup_fcp() 2174 { 2175 int rc = 0; 2176 2177 scsi_pkt_cachep = kmem_cache_create("libfc_fcp_pkt", 2178 sizeof(struct fc_fcp_pkt), 2179 0, SLAB_HWCACHE_ALIGN, NULL); 2180 if (!scsi_pkt_cachep) { 2181 printk(KERN_ERR "libfc: Unable to allocate SRB cache, " 2182 "module load failed!"); 2183 rc = -ENOMEM; 2184 } 2185 2186 return rc; 2187 } 2188 2189 void fc_destroy_fcp() 2190 { 2191 if (scsi_pkt_cachep) 2192 kmem_cache_destroy(scsi_pkt_cachep); 2193 } 2194 2195 /** 2196 * fc_fcp_init() - Initialize the FCP layer for a local port 2197 * @lport: The local port to initialize the exchange layer for 2198 */ 2199 int fc_fcp_init(struct fc_lport *lport) 2200 { 2201 int rc; 2202 struct fc_fcp_internal *si; 2203 2204 if (!lport->tt.fcp_cmd_send) 2205 lport->tt.fcp_cmd_send = fc_fcp_cmd_send; 2206 2207 if (!lport->tt.fcp_cleanup) 2208 lport->tt.fcp_cleanup = fc_fcp_cleanup; 2209 2210 if (!lport->tt.fcp_abort_io) 2211 lport->tt.fcp_abort_io = fc_fcp_abort_io; 2212 2213 si = kzalloc(sizeof(struct fc_fcp_internal), GFP_KERNEL); 2214 if (!si) 2215 return -ENOMEM; 2216 lport->scsi_priv = si; 2217 si->max_can_queue = lport->host->can_queue; 2218 INIT_LIST_HEAD(&si->scsi_pkt_queue); 2219 2220 si->scsi_pkt_pool = mempool_create_slab_pool(2, scsi_pkt_cachep); 2221 if (!si->scsi_pkt_pool) { 2222 rc = -ENOMEM; 2223 goto free_internal; 2224 } 2225 return 0; 2226 2227 free_internal: 2228 kfree(si); 2229 return rc; 2230 } 2231 EXPORT_SYMBOL(fc_fcp_init); 2232