1
2
3
4
5
6
7
8
9
10#include <linux/bio.h>
11#include <linux/bitops.h>
12#include <linux/blkdev.h>
13#include <linux/completion.h>
14#include <linux/kernel.h>
15#include <linux/export.h>
16#include <linux/mempool.h>
17#include <linux/slab.h>
18#include <linux/init.h>
19#include <linux/pci.h>
20#include <linux/delay.h>
21#include <linux/hardirq.h>
22#include <linux/scatterlist.h>
23
24#include <scsi/scsi.h>
25#include <scsi/scsi_cmnd.h>
26#include <scsi/scsi_dbg.h>
27#include <scsi/scsi_device.h>
28#include <scsi/scsi_driver.h>
29#include <scsi/scsi_eh.h>
30#include <scsi/scsi_host.h>
31
32#include "scsi_priv.h"
33#include "scsi_logging.h"
34
35
36#define SG_MEMPOOL_NR ARRAY_SIZE(scsi_sg_pools)
37#define SG_MEMPOOL_SIZE 2
38
39struct scsi_host_sg_pool {
40 size_t size;
41 char *name;
42 struct kmem_cache *slab;
43 mempool_t *pool;
44};
45
46#define SP(x) { x, "sgpool-" __stringify(x) }
47#if (SCSI_MAX_SG_SEGMENTS < 32)
48#error SCSI_MAX_SG_SEGMENTS is too small (must be 32 or greater)
49#endif
50static struct scsi_host_sg_pool scsi_sg_pools[] = {
51 SP(8),
52 SP(16),
53#if (SCSI_MAX_SG_SEGMENTS > 32)
54 SP(32),
55#if (SCSI_MAX_SG_SEGMENTS > 64)
56 SP(64),
57#if (SCSI_MAX_SG_SEGMENTS > 128)
58 SP(128),
59#if (SCSI_MAX_SG_SEGMENTS > 256)
60#error SCSI_MAX_SG_SEGMENTS is too large (256 MAX)
61#endif
62#endif
63#endif
64#endif
65 SP(SCSI_MAX_SG_SEGMENTS)
66};
67#undef SP
68
69struct kmem_cache *scsi_sdb_cache;
70
71#ifdef CONFIG_ACPI
72#include <acpi/acpi_bus.h>
73
74int scsi_register_acpi_bus_type(struct acpi_bus_type *bus)
75{
76 bus->bus = &scsi_bus_type;
77 return register_acpi_bus_type(bus);
78}
79EXPORT_SYMBOL_GPL(scsi_register_acpi_bus_type);
80
81void scsi_unregister_acpi_bus_type(struct acpi_bus_type *bus)
82{
83 unregister_acpi_bus_type(bus);
84}
85EXPORT_SYMBOL_GPL(scsi_unregister_acpi_bus_type);
86#endif
87
88
89
90
91
92
93#define SCSI_QUEUE_DELAY 3
94
95
96
97
98
99
100
101
102
103
104
105
106
107static void scsi_unprep_request(struct request *req)
108{
109 struct scsi_cmnd *cmd = req->special;
110
111 blk_unprep_request(req);
112 req->special = NULL;
113
114 scsi_put_command(cmd);
115}
116
117
118
119
120
121
122
123
124
125
126
127
128
129static void __scsi_queue_insert(struct scsi_cmnd *cmd, int reason, int unbusy)
130{
131 struct Scsi_Host *host = cmd->device->host;
132 struct scsi_device *device = cmd->device;
133 struct scsi_target *starget = scsi_target(device);
134 struct request_queue *q = device->request_queue;
135 unsigned long flags;
136
137 SCSI_LOG_MLQUEUE(1,
138 printk("Inserting command %p into mlqueue\n", cmd));
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153 switch (reason) {
154 case SCSI_MLQUEUE_HOST_BUSY:
155 host->host_blocked = host->max_host_blocked;
156 break;
157 case SCSI_MLQUEUE_DEVICE_BUSY:
158 case SCSI_MLQUEUE_EH_RETRY:
159 device->device_blocked = device->max_device_blocked;
160 break;
161 case SCSI_MLQUEUE_TARGET_BUSY:
162 starget->target_blocked = starget->max_target_blocked;
163 break;
164 }
165
166
167
168
169
170 if (unbusy)
171 scsi_device_unbusy(device);
172
173
174
175
176
177
178
179 spin_lock_irqsave(q->queue_lock, flags);
180 blk_requeue_request(q, cmd->request);
181 kblockd_schedule_work(q, &device->requeue_work);
182 spin_unlock_irqrestore(q->queue_lock, flags);
183}
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204void scsi_queue_insert(struct scsi_cmnd *cmd, int reason)
205{
206 __scsi_queue_insert(cmd, reason, 1);
207}
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
225 int data_direction, void *buffer, unsigned bufflen,
226 unsigned char *sense, int timeout, int retries, int flags,
227 int *resid)
228{
229 struct request *req;
230 int write = (data_direction == DMA_TO_DEVICE);
231 int ret = DRIVER_ERROR << 24;
232
233 req = blk_get_request(sdev->request_queue, write, __GFP_WAIT);
234 if (!req)
235 return ret;
236
237 if (bufflen && blk_rq_map_kern(sdev->request_queue, req,
238 buffer, bufflen, __GFP_WAIT))
239 goto out;
240
241 req->cmd_len = COMMAND_SIZE(cmd[0]);
242 memcpy(req->cmd, cmd, req->cmd_len);
243 req->sense = sense;
244 req->sense_len = 0;
245 req->retries = retries;
246 req->timeout = timeout;
247 req->cmd_type = REQ_TYPE_BLOCK_PC;
248 req->cmd_flags |= flags | REQ_QUIET | REQ_PREEMPT;
249
250
251
252
253 blk_execute_rq(req->q, NULL, req, 1);
254
255
256
257
258
259
260
261 if (unlikely(req->resid_len > 0 && req->resid_len <= bufflen))
262 memset(buffer + (bufflen - req->resid_len), 0, req->resid_len);
263
264 if (resid)
265 *resid = req->resid_len;
266 ret = req->errors;
267 out:
268 blk_put_request(req);
269
270 return ret;
271}
272EXPORT_SYMBOL(scsi_execute);
273
274
275int scsi_execute_req(struct scsi_device *sdev, const unsigned char *cmd,
276 int data_direction, void *buffer, unsigned bufflen,
277 struct scsi_sense_hdr *sshdr, int timeout, int retries,
278 int *resid)
279{
280 char *sense = NULL;
281 int result;
282
283 if (sshdr) {
284 sense = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_NOIO);
285 if (!sense)
286 return DRIVER_ERROR << 24;
287 }
288 result = scsi_execute(sdev, cmd, data_direction, buffer, bufflen,
289 sense, timeout, retries, 0, resid);
290 if (sshdr)
291 scsi_normalize_sense(sense, SCSI_SENSE_BUFFERSIZE, sshdr);
292
293 kfree(sense);
294 return result;
295}
296EXPORT_SYMBOL(scsi_execute_req);
297
298
299
300
301
302
303
304
305
306
307
308
309static void scsi_init_cmd_errh(struct scsi_cmnd *cmd)
310{
311 cmd->serial_number = 0;
312 scsi_set_resid(cmd, 0);
313 memset(cmd->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
314 if (cmd->cmd_len == 0)
315 cmd->cmd_len = scsi_command_size(cmd->cmnd);
316}
317
318void scsi_device_unbusy(struct scsi_device *sdev)
319{
320 struct Scsi_Host *shost = sdev->host;
321 struct scsi_target *starget = scsi_target(sdev);
322 unsigned long flags;
323
324 spin_lock_irqsave(shost->host_lock, flags);
325 shost->host_busy--;
326 starget->target_busy--;
327 if (unlikely(scsi_host_in_recovery(shost) &&
328 (shost->host_failed || shost->host_eh_scheduled)))
329 scsi_eh_wakeup(shost);
330 spin_unlock(shost->host_lock);
331 spin_lock(sdev->request_queue->queue_lock);
332 sdev->device_busy--;
333 spin_unlock_irqrestore(sdev->request_queue->queue_lock, flags);
334}
335
336
337
338
339
340
341
342
343static void scsi_single_lun_run(struct scsi_device *current_sdev)
344{
345 struct Scsi_Host *shost = current_sdev->host;
346 struct scsi_device *sdev, *tmp;
347 struct scsi_target *starget = scsi_target(current_sdev);
348 unsigned long flags;
349
350 spin_lock_irqsave(shost->host_lock, flags);
351 starget->starget_sdev_user = NULL;
352 spin_unlock_irqrestore(shost->host_lock, flags);
353
354
355
356
357
358
359
360 blk_run_queue(current_sdev->request_queue);
361
362 spin_lock_irqsave(shost->host_lock, flags);
363 if (starget->starget_sdev_user)
364 goto out;
365 list_for_each_entry_safe(sdev, tmp, &starget->devices,
366 same_target_siblings) {
367 if (sdev == current_sdev)
368 continue;
369 if (scsi_device_get(sdev))
370 continue;
371
372 spin_unlock_irqrestore(shost->host_lock, flags);
373 blk_run_queue(sdev->request_queue);
374 spin_lock_irqsave(shost->host_lock, flags);
375
376 scsi_device_put(sdev);
377 }
378 out:
379 spin_unlock_irqrestore(shost->host_lock, flags);
380}
381
382static inline int scsi_device_is_busy(struct scsi_device *sdev)
383{
384 if (sdev->device_busy >= sdev->queue_depth || sdev->device_blocked)
385 return 1;
386
387 return 0;
388}
389
390static inline int scsi_target_is_busy(struct scsi_target *starget)
391{
392 return ((starget->can_queue > 0 &&
393 starget->target_busy >= starget->can_queue) ||
394 starget->target_blocked);
395}
396
397static inline int scsi_host_is_busy(struct Scsi_Host *shost)
398{
399 if ((shost->can_queue > 0 && shost->host_busy >= shost->can_queue) ||
400 shost->host_blocked || shost->host_self_blocked)
401 return 1;
402
403 return 0;
404}
405
406
407
408
409
410
411
412
413
414
415
416
417
418static void scsi_run_queue(struct request_queue *q)
419{
420 struct scsi_device *sdev = q->queuedata;
421 struct Scsi_Host *shost;
422 LIST_HEAD(starved_list);
423 unsigned long flags;
424
425 shost = sdev->host;
426 if (scsi_target(sdev)->single_lun)
427 scsi_single_lun_run(sdev);
428
429 spin_lock_irqsave(shost->host_lock, flags);
430 list_splice_init(&shost->starved_list, &starved_list);
431
432 while (!list_empty(&starved_list)) {
433
434
435
436
437
438
439
440
441
442
443 if (scsi_host_is_busy(shost))
444 break;
445
446 sdev = list_entry(starved_list.next,
447 struct scsi_device, starved_entry);
448 list_del_init(&sdev->starved_entry);
449 if (scsi_target_is_busy(scsi_target(sdev))) {
450 list_move_tail(&sdev->starved_entry,
451 &shost->starved_list);
452 continue;
453 }
454
455 spin_unlock(shost->host_lock);
456 spin_lock(sdev->request_queue->queue_lock);
457 __blk_run_queue(sdev->request_queue);
458 spin_unlock(sdev->request_queue->queue_lock);
459 spin_lock(shost->host_lock);
460 }
461
462 list_splice(&starved_list, &shost->starved_list);
463 spin_unlock_irqrestore(shost->host_lock, flags);
464
465 blk_run_queue(q);
466}
467
468void scsi_requeue_run_queue(struct work_struct *work)
469{
470 struct scsi_device *sdev;
471 struct request_queue *q;
472
473 sdev = container_of(work, struct scsi_device, requeue_work);
474 q = sdev->request_queue;
475 scsi_run_queue(q);
476}
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496static void scsi_requeue_command(struct request_queue *q, struct scsi_cmnd *cmd)
497{
498 struct scsi_device *sdev = cmd->device;
499 struct request *req = cmd->request;
500 unsigned long flags;
501
502
503
504
505
506
507
508 get_device(&sdev->sdev_gendev);
509
510 spin_lock_irqsave(q->queue_lock, flags);
511 scsi_unprep_request(req);
512 blk_requeue_request(q, req);
513 spin_unlock_irqrestore(q->queue_lock, flags);
514
515 scsi_run_queue(q);
516
517 put_device(&sdev->sdev_gendev);
518}
519
520void scsi_next_command(struct scsi_cmnd *cmd)
521{
522 struct scsi_device *sdev = cmd->device;
523 struct request_queue *q = sdev->request_queue;
524
525
526 get_device(&sdev->sdev_gendev);
527
528 scsi_put_command(cmd);
529 scsi_run_queue(q);
530
531
532 put_device(&sdev->sdev_gendev);
533}
534
535void scsi_run_host_queues(struct Scsi_Host *shost)
536{
537 struct scsi_device *sdev;
538
539 shost_for_each_device(sdev, shost)
540 scsi_run_queue(sdev->request_queue);
541}
542
543static void __scsi_release_buffers(struct scsi_cmnd *, int);
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567static struct scsi_cmnd *scsi_end_request(struct scsi_cmnd *cmd, int error,
568 int bytes, int requeue)
569{
570 struct request_queue *q = cmd->device->request_queue;
571 struct request *req = cmd->request;
572
573
574
575
576
577 if (blk_end_request(req, error, bytes)) {
578
579 if (error && scsi_noretry_cmd(cmd))
580 blk_end_request_all(req, error);
581 else {
582 if (requeue) {
583
584
585
586
587
588 scsi_release_buffers(cmd);
589 scsi_requeue_command(q, cmd);
590 cmd = NULL;
591 }
592 return cmd;
593 }
594 }
595
596
597
598
599
600 __scsi_release_buffers(cmd, 0);
601 scsi_next_command(cmd);
602 return NULL;
603}
604
605static inline unsigned int scsi_sgtable_index(unsigned short nents)
606{
607 unsigned int index;
608
609 BUG_ON(nents > SCSI_MAX_SG_SEGMENTS);
610
611 if (nents <= 8)
612 index = 0;
613 else
614 index = get_count_order(nents) - 3;
615
616 return index;
617}
618
619static void scsi_sg_free(struct scatterlist *sgl, unsigned int nents)
620{
621 struct scsi_host_sg_pool *sgp;
622
623 sgp = scsi_sg_pools + scsi_sgtable_index(nents);
624 mempool_free(sgl, sgp->pool);
625}
626
627static struct scatterlist *scsi_sg_alloc(unsigned int nents, gfp_t gfp_mask)
628{
629 struct scsi_host_sg_pool *sgp;
630
631 sgp = scsi_sg_pools + scsi_sgtable_index(nents);
632 return mempool_alloc(sgp->pool, gfp_mask);
633}
634
635static int scsi_alloc_sgtable(struct scsi_data_buffer *sdb, int nents,
636 gfp_t gfp_mask)
637{
638 int ret;
639
640 BUG_ON(!nents);
641
642 ret = __sg_alloc_table(&sdb->table, nents, SCSI_MAX_SG_SEGMENTS,
643 gfp_mask, scsi_sg_alloc);
644 if (unlikely(ret))
645 __sg_free_table(&sdb->table, SCSI_MAX_SG_SEGMENTS,
646 scsi_sg_free);
647
648 return ret;
649}
650
651static void scsi_free_sgtable(struct scsi_data_buffer *sdb)
652{
653 __sg_free_table(&sdb->table, SCSI_MAX_SG_SEGMENTS, scsi_sg_free);
654}
655
656static void __scsi_release_buffers(struct scsi_cmnd *cmd, int do_bidi_check)
657{
658
659 if (cmd->sdb.table.nents)
660 scsi_free_sgtable(&cmd->sdb);
661
662 memset(&cmd->sdb, 0, sizeof(cmd->sdb));
663
664 if (do_bidi_check && scsi_bidi_cmnd(cmd)) {
665 struct scsi_data_buffer *bidi_sdb =
666 cmd->request->next_rq->special;
667 scsi_free_sgtable(bidi_sdb);
668 kmem_cache_free(scsi_sdb_cache, bidi_sdb);
669 cmd->request->next_rq->special = NULL;
670 }
671
672 if (scsi_prot_sg_count(cmd))
673 scsi_free_sgtable(cmd->prot_sdb);
674}
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693void scsi_release_buffers(struct scsi_cmnd *cmd)
694{
695 __scsi_release_buffers(cmd, 1);
696}
697EXPORT_SYMBOL(scsi_release_buffers);
698
699static int __scsi_error_from_host_byte(struct scsi_cmnd *cmd, int result)
700{
701 int error = 0;
702
703 switch(host_byte(result)) {
704 case DID_TRANSPORT_FAILFAST:
705 error = -ENOLINK;
706 break;
707 case DID_TARGET_FAILURE:
708 set_host_byte(cmd, DID_OK);
709 error = -EREMOTEIO;
710 break;
711 case DID_NEXUS_FAILURE:
712 set_host_byte(cmd, DID_OK);
713 error = -EBADE;
714 break;
715 default:
716 error = -EIO;
717 break;
718 }
719
720 return error;
721}
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
760{
761 int result = cmd->result;
762 struct request_queue *q = cmd->device->request_queue;
763 struct request *req = cmd->request;
764 int error = 0;
765 struct scsi_sense_hdr sshdr;
766 int sense_valid = 0;
767 int sense_deferred = 0;
768 enum {ACTION_FAIL, ACTION_REPREP, ACTION_RETRY,
769 ACTION_DELAYED_RETRY} action;
770 char *description = NULL;
771
772 if (result) {
773 sense_valid = scsi_command_normalize_sense(cmd, &sshdr);
774 if (sense_valid)
775 sense_deferred = scsi_sense_is_deferred(&sshdr);
776 }
777
778 if (req->cmd_type == REQ_TYPE_BLOCK_PC) {
779 if (result) {
780 if (sense_valid && req->sense) {
781
782
783
784 int len = 8 + cmd->sense_buffer[7];
785
786 if (len > SCSI_SENSE_BUFFERSIZE)
787 len = SCSI_SENSE_BUFFERSIZE;
788 memcpy(req->sense, cmd->sense_buffer, len);
789 req->sense_len = len;
790 }
791 if (!sense_deferred)
792 error = __scsi_error_from_host_byte(cmd, result);
793 }
794
795
796
797 req->errors = cmd->result;
798
799 req->resid_len = scsi_get_resid(cmd);
800
801 if (scsi_bidi_cmnd(cmd)) {
802
803
804
805
806 req->next_rq->resid_len = scsi_in(cmd)->resid;
807
808 scsi_release_buffers(cmd);
809 blk_end_request_all(req, 0);
810
811 scsi_next_command(cmd);
812 return;
813 }
814 }
815
816
817 BUG_ON(blk_bidi_rq(req));
818
819
820
821
822
823 SCSI_LOG_HLCOMPLETE(1, printk("%u sectors total, "
824 "%d bytes done.\n",
825 blk_rq_sectors(req), good_bytes));
826
827
828
829
830
831
832
833 if (sense_valid && (sshdr.sense_key == RECOVERED_ERROR)) {
834
835
836
837
838 if ((sshdr.asc == 0x0) && (sshdr.ascq == 0x1d))
839 ;
840 else if (!(req->cmd_flags & REQ_QUIET))
841 scsi_print_sense("", cmd);
842 result = 0;
843
844 error = 0;
845 }
846
847
848
849
850
851
852 if (scsi_end_request(cmd, error, good_bytes, result == 0) == NULL)
853 return;
854
855 error = __scsi_error_from_host_byte(cmd, result);
856
857 if (host_byte(result) == DID_RESET) {
858
859
860
861
862 action = ACTION_RETRY;
863 } else if (sense_valid && !sense_deferred) {
864 switch (sshdr.sense_key) {
865 case UNIT_ATTENTION:
866 if (cmd->device->removable) {
867
868
869
870 cmd->device->changed = 1;
871 description = "Media Changed";
872 action = ACTION_FAIL;
873 } else {
874
875
876
877
878
879 action = ACTION_RETRY;
880 }
881 break;
882 case ILLEGAL_REQUEST:
883
884
885
886
887
888
889
890
891 if ((cmd->device->use_10_for_rw &&
892 sshdr.asc == 0x20 && sshdr.ascq == 0x00) &&
893 (cmd->cmnd[0] == READ_10 ||
894 cmd->cmnd[0] == WRITE_10)) {
895
896 cmd->device->use_10_for_rw = 0;
897 action = ACTION_REPREP;
898 } else if (sshdr.asc == 0x10) {
899 description = "Host Data Integrity Failure";
900 action = ACTION_FAIL;
901 error = -EILSEQ;
902
903 } else if ((sshdr.asc == 0x20 || sshdr.asc == 0x24) &&
904 (cmd->cmnd[0] == UNMAP ||
905 cmd->cmnd[0] == WRITE_SAME_16 ||
906 cmd->cmnd[0] == WRITE_SAME)) {
907 description = "Discard failure";
908 action = ACTION_FAIL;
909 error = -EREMOTEIO;
910 } else
911 action = ACTION_FAIL;
912 break;
913 case ABORTED_COMMAND:
914 action = ACTION_FAIL;
915 if (sshdr.asc == 0x10) {
916 description = "Target Data Integrity Failure";
917 error = -EILSEQ;
918 }
919 break;
920 case NOT_READY:
921
922
923
924 if (sshdr.asc == 0x04) {
925 switch (sshdr.ascq) {
926 case 0x01:
927 case 0x04:
928 case 0x05:
929 case 0x06:
930 case 0x07:
931 case 0x08:
932 case 0x09:
933 case 0x14:
934 action = ACTION_DELAYED_RETRY;
935 break;
936 default:
937 description = "Device not ready";
938 action = ACTION_FAIL;
939 break;
940 }
941 } else {
942 description = "Device not ready";
943 action = ACTION_FAIL;
944 }
945 break;
946 case VOLUME_OVERFLOW:
947
948 action = ACTION_FAIL;
949 break;
950 default:
951 description = "Unhandled sense code";
952 action = ACTION_FAIL;
953 break;
954 }
955 } else {
956 description = "Unhandled error code";
957 action = ACTION_FAIL;
958 }
959
960 switch (action) {
961 case ACTION_FAIL:
962
963 scsi_release_buffers(cmd);
964 if (!(req->cmd_flags & REQ_QUIET)) {
965 if (description)
966 scmd_printk(KERN_INFO, cmd, "%s\n",
967 description);
968 scsi_print_result(cmd);
969 if (driver_byte(result) & DRIVER_SENSE)
970 scsi_print_sense("", cmd);
971 scsi_print_command(cmd);
972 }
973 if (blk_end_request_err(req, error))
974 scsi_requeue_command(q, cmd);
975 else
976 scsi_next_command(cmd);
977 break;
978 case ACTION_REPREP:
979
980
981
982 scsi_release_buffers(cmd);
983 scsi_requeue_command(q, cmd);
984 break;
985 case ACTION_RETRY:
986
987 __scsi_queue_insert(cmd, SCSI_MLQUEUE_EH_RETRY, 0);
988 break;
989 case ACTION_DELAYED_RETRY:
990
991 __scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY, 0);
992 break;
993 }
994}
995
996static int scsi_init_sgtable(struct request *req, struct scsi_data_buffer *sdb,
997 gfp_t gfp_mask)
998{
999 int count;
1000
1001
1002
1003
1004 if (unlikely(scsi_alloc_sgtable(sdb, req->nr_phys_segments,
1005 gfp_mask))) {
1006 return BLKPREP_DEFER;
1007 }
1008
1009 req->buffer = NULL;
1010
1011
1012
1013
1014
1015 count = blk_rq_map_sg(req->q, req, sdb->table.sgl);
1016 BUG_ON(count > sdb->table.nents);
1017 sdb->table.nents = count;
1018 sdb->length = blk_rq_bytes(req);
1019 return BLKPREP_OK;
1020}
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033int scsi_init_io(struct scsi_cmnd *cmd, gfp_t gfp_mask)
1034{
1035 struct request *rq = cmd->request;
1036
1037 int error = scsi_init_sgtable(rq, &cmd->sdb, gfp_mask);
1038 if (error)
1039 goto err_exit;
1040
1041 if (blk_bidi_rq(rq)) {
1042 struct scsi_data_buffer *bidi_sdb = kmem_cache_zalloc(
1043 scsi_sdb_cache, GFP_ATOMIC);
1044 if (!bidi_sdb) {
1045 error = BLKPREP_DEFER;
1046 goto err_exit;
1047 }
1048
1049 rq->next_rq->special = bidi_sdb;
1050 error = scsi_init_sgtable(rq->next_rq, bidi_sdb, GFP_ATOMIC);
1051 if (error)
1052 goto err_exit;
1053 }
1054
1055 if (blk_integrity_rq(rq)) {
1056 struct scsi_data_buffer *prot_sdb = cmd->prot_sdb;
1057 int ivecs, count;
1058
1059 BUG_ON(prot_sdb == NULL);
1060 ivecs = blk_rq_count_integrity_sg(rq->q, rq->bio);
1061
1062 if (scsi_alloc_sgtable(prot_sdb, ivecs, gfp_mask)) {
1063 error = BLKPREP_DEFER;
1064 goto err_exit;
1065 }
1066
1067 count = blk_rq_map_integrity_sg(rq->q, rq->bio,
1068 prot_sdb->table.sgl);
1069 BUG_ON(unlikely(count > ivecs));
1070 BUG_ON(unlikely(count > queue_max_integrity_segments(rq->q)));
1071
1072 cmd->prot_sdb = prot_sdb;
1073 cmd->prot_sdb->table.nents = count;
1074 }
1075
1076 return BLKPREP_OK ;
1077
1078err_exit:
1079 scsi_release_buffers(cmd);
1080 cmd->request->special = NULL;
1081 scsi_put_command(cmd);
1082 return error;
1083}
1084EXPORT_SYMBOL(scsi_init_io);
1085
1086static struct scsi_cmnd *scsi_get_cmd_from_req(struct scsi_device *sdev,
1087 struct request *req)
1088{
1089 struct scsi_cmnd *cmd;
1090
1091 if (!req->special) {
1092 cmd = scsi_get_command(sdev, GFP_ATOMIC);
1093 if (unlikely(!cmd))
1094 return NULL;
1095 req->special = cmd;
1096 } else {
1097 cmd = req->special;
1098 }
1099
1100
1101 cmd->tag = req->tag;
1102 cmd->request = req;
1103
1104 cmd->cmnd = req->cmd;
1105 cmd->prot_op = SCSI_PROT_NORMAL;
1106
1107 return cmd;
1108}
1109
1110int scsi_setup_blk_pc_cmnd(struct scsi_device *sdev, struct request *req)
1111{
1112 struct scsi_cmnd *cmd;
1113 int ret = scsi_prep_state_check(sdev, req);
1114
1115 if (ret != BLKPREP_OK)
1116 return ret;
1117
1118 cmd = scsi_get_cmd_from_req(sdev, req);
1119 if (unlikely(!cmd))
1120 return BLKPREP_DEFER;
1121
1122
1123
1124
1125
1126
1127
1128 if (req->bio) {
1129 int ret;
1130
1131 BUG_ON(!req->nr_phys_segments);
1132
1133 ret = scsi_init_io(cmd, GFP_ATOMIC);
1134 if (unlikely(ret))
1135 return ret;
1136 } else {
1137 BUG_ON(blk_rq_bytes(req));
1138
1139 memset(&cmd->sdb, 0, sizeof(cmd->sdb));
1140 req->buffer = NULL;
1141 }
1142
1143 cmd->cmd_len = req->cmd_len;
1144 if (!blk_rq_bytes(req))
1145 cmd->sc_data_direction = DMA_NONE;
1146 else if (rq_data_dir(req) == WRITE)
1147 cmd->sc_data_direction = DMA_TO_DEVICE;
1148 else
1149 cmd->sc_data_direction = DMA_FROM_DEVICE;
1150
1151 cmd->transfersize = blk_rq_bytes(req);
1152 cmd->allowed = req->retries;
1153 return BLKPREP_OK;
1154}
1155EXPORT_SYMBOL(scsi_setup_blk_pc_cmnd);
1156
1157
1158
1159
1160
1161
1162int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req)
1163{
1164 struct scsi_cmnd *cmd;
1165 int ret = scsi_prep_state_check(sdev, req);
1166
1167 if (ret != BLKPREP_OK)
1168 return ret;
1169
1170 if (unlikely(sdev->scsi_dh_data && sdev->scsi_dh_data->scsi_dh
1171 && sdev->scsi_dh_data->scsi_dh->prep_fn)) {
1172 ret = sdev->scsi_dh_data->scsi_dh->prep_fn(sdev, req);
1173 if (ret != BLKPREP_OK)
1174 return ret;
1175 }
1176
1177
1178
1179
1180 BUG_ON(!req->nr_phys_segments);
1181
1182 cmd = scsi_get_cmd_from_req(sdev, req);
1183 if (unlikely(!cmd))
1184 return BLKPREP_DEFER;
1185
1186 memset(cmd->cmnd, 0, BLK_MAX_CDB);
1187 return scsi_init_io(cmd, GFP_ATOMIC);
1188}
1189EXPORT_SYMBOL(scsi_setup_fs_cmnd);
1190
1191int scsi_prep_state_check(struct scsi_device *sdev, struct request *req)
1192{
1193 int ret = BLKPREP_OK;
1194
1195
1196
1197
1198
1199 if (unlikely(sdev->sdev_state != SDEV_RUNNING)) {
1200 switch (sdev->sdev_state) {
1201 case SDEV_OFFLINE:
1202 case SDEV_TRANSPORT_OFFLINE:
1203
1204
1205
1206
1207
1208 sdev_printk(KERN_ERR, sdev,
1209 "rejecting I/O to offline device\n");
1210 ret = BLKPREP_KILL;
1211 break;
1212 case SDEV_DEL:
1213
1214
1215
1216
1217 sdev_printk(KERN_ERR, sdev,
1218 "rejecting I/O to dead device\n");
1219 ret = BLKPREP_KILL;
1220 break;
1221 case SDEV_QUIESCE:
1222 case SDEV_BLOCK:
1223 case SDEV_CREATED_BLOCK:
1224
1225
1226
1227 if (!(req->cmd_flags & REQ_PREEMPT))
1228 ret = BLKPREP_DEFER;
1229 break;
1230 default:
1231
1232
1233
1234
1235
1236 if (!(req->cmd_flags & REQ_PREEMPT))
1237 ret = BLKPREP_KILL;
1238 break;
1239 }
1240 }
1241 return ret;
1242}
1243EXPORT_SYMBOL(scsi_prep_state_check);
1244
1245int scsi_prep_return(struct request_queue *q, struct request *req, int ret)
1246{
1247 struct scsi_device *sdev = q->queuedata;
1248
1249 switch (ret) {
1250 case BLKPREP_KILL:
1251 req->errors = DID_NO_CONNECT << 16;
1252
1253 if (req->special) {
1254 struct scsi_cmnd *cmd = req->special;
1255 scsi_release_buffers(cmd);
1256 scsi_put_command(cmd);
1257 req->special = NULL;
1258 }
1259 break;
1260 case BLKPREP_DEFER:
1261
1262
1263
1264
1265
1266 if (sdev->device_busy == 0)
1267 blk_delay_queue(q, SCSI_QUEUE_DELAY);
1268 break;
1269 default:
1270 req->cmd_flags |= REQ_DONTPREP;
1271 }
1272
1273 return ret;
1274}
1275EXPORT_SYMBOL(scsi_prep_return);
1276
1277int scsi_prep_fn(struct request_queue *q, struct request *req)
1278{
1279 struct scsi_device *sdev = q->queuedata;
1280 int ret = BLKPREP_KILL;
1281
1282 if (req->cmd_type == REQ_TYPE_BLOCK_PC)
1283 ret = scsi_setup_blk_pc_cmnd(sdev, req);
1284 return scsi_prep_return(q, req, ret);
1285}
1286EXPORT_SYMBOL(scsi_prep_fn);
1287
1288
1289
1290
1291
1292
1293
1294static inline int scsi_dev_queue_ready(struct request_queue *q,
1295 struct scsi_device *sdev)
1296{
1297 if (sdev->device_busy == 0 && sdev->device_blocked) {
1298
1299
1300
1301 if (--sdev->device_blocked == 0) {
1302 SCSI_LOG_MLQUEUE(3,
1303 sdev_printk(KERN_INFO, sdev,
1304 "unblocking device at zero depth\n"));
1305 } else {
1306 blk_delay_queue(q, SCSI_QUEUE_DELAY);
1307 return 0;
1308 }
1309 }
1310 if (scsi_device_is_busy(sdev))
1311 return 0;
1312
1313 return 1;
1314}
1315
1316
1317
1318
1319
1320
1321
1322
1323static inline int scsi_target_queue_ready(struct Scsi_Host *shost,
1324 struct scsi_device *sdev)
1325{
1326 struct scsi_target *starget = scsi_target(sdev);
1327
1328 if (starget->single_lun) {
1329 if (starget->starget_sdev_user &&
1330 starget->starget_sdev_user != sdev)
1331 return 0;
1332 starget->starget_sdev_user = sdev;
1333 }
1334
1335 if (starget->target_busy == 0 && starget->target_blocked) {
1336
1337
1338
1339 if (--starget->target_blocked == 0) {
1340 SCSI_LOG_MLQUEUE(3, starget_printk(KERN_INFO, starget,
1341 "unblocking target at zero depth\n"));
1342 } else
1343 return 0;
1344 }
1345
1346 if (scsi_target_is_busy(starget)) {
1347 list_move_tail(&sdev->starved_entry, &shost->starved_list);
1348 return 0;
1349 }
1350
1351 return 1;
1352}
1353
1354
1355
1356
1357
1358
1359
1360
1361static inline int scsi_host_queue_ready(struct request_queue *q,
1362 struct Scsi_Host *shost,
1363 struct scsi_device *sdev)
1364{
1365 if (scsi_host_in_recovery(shost))
1366 return 0;
1367 if (shost->host_busy == 0 && shost->host_blocked) {
1368
1369
1370
1371 if (--shost->host_blocked == 0) {
1372 SCSI_LOG_MLQUEUE(3,
1373 printk("scsi%d unblocking host at zero depth\n",
1374 shost->host_no));
1375 } else {
1376 return 0;
1377 }
1378 }
1379 if (scsi_host_is_busy(shost)) {
1380 if (list_empty(&sdev->starved_entry))
1381 list_add_tail(&sdev->starved_entry, &shost->starved_list);
1382 return 0;
1383 }
1384
1385
1386 if (!list_empty(&sdev->starved_entry))
1387 list_del_init(&sdev->starved_entry);
1388
1389 return 1;
1390}
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404static int scsi_lld_busy(struct request_queue *q)
1405{
1406 struct scsi_device *sdev = q->queuedata;
1407 struct Scsi_Host *shost;
1408
1409 if (blk_queue_dead(q))
1410 return 0;
1411
1412 shost = sdev->host;
1413
1414
1415
1416
1417
1418
1419
1420 if (scsi_host_in_recovery(shost) || scsi_device_is_busy(sdev))
1421 return 1;
1422
1423 return 0;
1424}
1425
1426
1427
1428
1429static void scsi_kill_request(struct request *req, struct request_queue *q)
1430{
1431 struct scsi_cmnd *cmd = req->special;
1432 struct scsi_device *sdev;
1433 struct scsi_target *starget;
1434 struct Scsi_Host *shost;
1435
1436 blk_start_request(req);
1437
1438 scmd_printk(KERN_INFO, cmd, "killing request\n");
1439
1440 sdev = cmd->device;
1441 starget = scsi_target(sdev);
1442 shost = sdev->host;
1443 scsi_init_cmd_errh(cmd);
1444 cmd->result = DID_NO_CONNECT << 16;
1445 atomic_inc(&cmd->device->iorequest_cnt);
1446
1447
1448
1449
1450
1451
1452 sdev->device_busy++;
1453 spin_unlock(sdev->request_queue->queue_lock);
1454 spin_lock(shost->host_lock);
1455 shost->host_busy++;
1456 starget->target_busy++;
1457 spin_unlock(shost->host_lock);
1458 spin_lock(sdev->request_queue->queue_lock);
1459
1460 blk_complete_request(req);
1461}
1462
1463static void scsi_softirq_done(struct request *rq)
1464{
1465 struct scsi_cmnd *cmd = rq->special;
1466 unsigned long wait_for = (cmd->allowed + 1) * rq->timeout;
1467 int disposition;
1468
1469 INIT_LIST_HEAD(&cmd->eh_entry);
1470
1471 atomic_inc(&cmd->device->iodone_cnt);
1472 if (cmd->result)
1473 atomic_inc(&cmd->device->ioerr_cnt);
1474
1475 disposition = scsi_decide_disposition(cmd);
1476 if (disposition != SUCCESS &&
1477 time_before(cmd->jiffies_at_alloc + wait_for, jiffies)) {
1478 sdev_printk(KERN_ERR, cmd->device,
1479 "timing out command, waited %lus\n",
1480 wait_for/HZ);
1481 disposition = SUCCESS;
1482 }
1483
1484 scsi_log_completion(cmd, disposition);
1485
1486 switch (disposition) {
1487 case SUCCESS:
1488 scsi_finish_command(cmd);
1489 break;
1490 case NEEDS_RETRY:
1491 scsi_queue_insert(cmd, SCSI_MLQUEUE_EH_RETRY);
1492 break;
1493 case ADD_TO_MLQUEUE:
1494 scsi_queue_insert(cmd, SCSI_MLQUEUE_DEVICE_BUSY);
1495 break;
1496 default:
1497 if (!scsi_eh_scmd_add(cmd, 0))
1498 scsi_finish_command(cmd);
1499 }
1500}
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513static void scsi_request_fn(struct request_queue *q)
1514{
1515 struct scsi_device *sdev = q->queuedata;
1516 struct Scsi_Host *shost;
1517 struct scsi_cmnd *cmd;
1518 struct request *req;
1519
1520 if(!get_device(&sdev->sdev_gendev))
1521
1522 return;
1523
1524
1525
1526
1527
1528 shost = sdev->host;
1529 for (;;) {
1530 int rtn;
1531
1532
1533
1534
1535
1536 req = blk_peek_request(q);
1537 if (!req || !scsi_dev_queue_ready(q, sdev))
1538 break;
1539
1540 if (unlikely(!scsi_device_online(sdev))) {
1541 sdev_printk(KERN_ERR, sdev,
1542 "rejecting I/O to offline device\n");
1543 scsi_kill_request(req, q);
1544 continue;
1545 }
1546
1547
1548
1549
1550
1551 if (!(blk_queue_tagged(q) && !blk_queue_start_tag(q, req)))
1552 blk_start_request(req);
1553 sdev->device_busy++;
1554
1555 spin_unlock(q->queue_lock);
1556 cmd = req->special;
1557 if (unlikely(cmd == NULL)) {
1558 printk(KERN_CRIT "impossible request in %s.\n"
1559 "please mail a stack trace to "
1560 "linux-scsi@vger.kernel.org\n",
1561 __func__);
1562 blk_dump_rq_flags(req, "foo");
1563 BUG();
1564 }
1565 spin_lock(shost->host_lock);
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575 if (blk_queue_tagged(q) && !blk_rq_tagged(req)) {
1576 if (list_empty(&sdev->starved_entry))
1577 list_add_tail(&sdev->starved_entry,
1578 &shost->starved_list);
1579 goto not_ready;
1580 }
1581
1582 if (!scsi_target_queue_ready(shost, sdev))
1583 goto not_ready;
1584
1585 if (!scsi_host_queue_ready(q, shost, sdev))
1586 goto not_ready;
1587
1588 scsi_target(sdev)->target_busy++;
1589 shost->host_busy++;
1590
1591
1592
1593
1594
1595 spin_unlock_irq(shost->host_lock);
1596
1597
1598
1599
1600
1601 scsi_init_cmd_errh(cmd);
1602
1603
1604
1605
1606 rtn = scsi_dispatch_cmd(cmd);
1607 spin_lock_irq(q->queue_lock);
1608 if (rtn)
1609 goto out_delay;
1610 }
1611
1612 goto out;
1613
1614 not_ready:
1615 spin_unlock_irq(shost->host_lock);
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625 spin_lock_irq(q->queue_lock);
1626 blk_requeue_request(q, req);
1627 sdev->device_busy--;
1628out_delay:
1629 if (sdev->device_busy == 0)
1630 blk_delay_queue(q, SCSI_QUEUE_DELAY);
1631out:
1632
1633
1634 spin_unlock_irq(q->queue_lock);
1635 put_device(&sdev->sdev_gendev);
1636 spin_lock_irq(q->queue_lock);
1637}
1638
1639u64 scsi_calculate_bounce_limit(struct Scsi_Host *shost)
1640{
1641 struct device *host_dev;
1642 u64 bounce_limit = 0xffffffff;
1643
1644 if (shost->unchecked_isa_dma)
1645 return BLK_BOUNCE_ISA;
1646
1647
1648
1649
1650 if (!PCI_DMA_BUS_IS_PHYS)
1651 return BLK_BOUNCE_ANY;
1652
1653 host_dev = scsi_get_device(shost);
1654 if (host_dev && host_dev->dma_mask)
1655 bounce_limit = *host_dev->dma_mask;
1656
1657 return bounce_limit;
1658}
1659EXPORT_SYMBOL(scsi_calculate_bounce_limit);
1660
1661struct request_queue *__scsi_alloc_queue(struct Scsi_Host *shost,
1662 request_fn_proc *request_fn)
1663{
1664 struct request_queue *q;
1665 struct device *dev = shost->dma_dev;
1666
1667 q = blk_init_queue(request_fn, NULL);
1668 if (!q)
1669 return NULL;
1670
1671
1672
1673
1674 blk_queue_max_segments(q, min_t(unsigned short, shost->sg_tablesize,
1675 SCSI_MAX_SG_CHAIN_SEGMENTS));
1676
1677 if (scsi_host_prot_dma(shost)) {
1678 shost->sg_prot_tablesize =
1679 min_not_zero(shost->sg_prot_tablesize,
1680 (unsigned short)SCSI_MAX_PROT_SG_SEGMENTS);
1681 BUG_ON(shost->sg_prot_tablesize < shost->sg_tablesize);
1682 blk_queue_max_integrity_segments(q, shost->sg_prot_tablesize);
1683 }
1684
1685 blk_queue_max_hw_sectors(q, shost->max_sectors);
1686 blk_queue_bounce_limit(q, scsi_calculate_bounce_limit(shost));
1687 blk_queue_segment_boundary(q, shost->dma_boundary);
1688 dma_set_seg_boundary(dev, shost->dma_boundary);
1689
1690 blk_queue_max_segment_size(q, dma_get_max_seg_size(dev));
1691
1692 if (!shost->use_clustering)
1693 q->limits.cluster = 0;
1694
1695
1696
1697
1698
1699
1700 blk_queue_dma_alignment(q, 0x03);
1701
1702 return q;
1703}
1704EXPORT_SYMBOL(__scsi_alloc_queue);
1705
1706struct request_queue *scsi_alloc_queue(struct scsi_device *sdev)
1707{
1708 struct request_queue *q;
1709
1710 q = __scsi_alloc_queue(sdev->host, scsi_request_fn);
1711 if (!q)
1712 return NULL;
1713
1714 blk_queue_prep_rq(q, scsi_prep_fn);
1715 blk_queue_softirq_done(q, scsi_softirq_done);
1716 blk_queue_rq_timed_out(q, scsi_times_out);
1717 blk_queue_lld_busy(q, scsi_lld_busy);
1718 return q;
1719}
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737void scsi_block_requests(struct Scsi_Host *shost)
1738{
1739 shost->host_self_blocked = 1;
1740}
1741EXPORT_SYMBOL(scsi_block_requests);
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763void scsi_unblock_requests(struct Scsi_Host *shost)
1764{
1765 shost->host_self_blocked = 0;
1766 scsi_run_host_queues(shost);
1767}
1768EXPORT_SYMBOL(scsi_unblock_requests);
1769
1770int __init scsi_init_queue(void)
1771{
1772 int i;
1773
1774 scsi_sdb_cache = kmem_cache_create("scsi_data_buffer",
1775 sizeof(struct scsi_data_buffer),
1776 0, 0, NULL);
1777 if (!scsi_sdb_cache) {
1778 printk(KERN_ERR "SCSI: can't init scsi sdb cache\n");
1779 return -ENOMEM;
1780 }
1781
1782 for (i = 0; i < SG_MEMPOOL_NR; i++) {
1783 struct scsi_host_sg_pool *sgp = scsi_sg_pools + i;
1784 int size = sgp->size * sizeof(struct scatterlist);
1785
1786 sgp->slab = kmem_cache_create(sgp->name, size, 0,
1787 SLAB_HWCACHE_ALIGN, NULL);
1788 if (!sgp->slab) {
1789 printk(KERN_ERR "SCSI: can't init sg slab %s\n",
1790 sgp->name);
1791 goto cleanup_sdb;
1792 }
1793
1794 sgp->pool = mempool_create_slab_pool(SG_MEMPOOL_SIZE,
1795 sgp->slab);
1796 if (!sgp->pool) {
1797 printk(KERN_ERR "SCSI: can't init sg mempool %s\n",
1798 sgp->name);
1799 goto cleanup_sdb;
1800 }
1801 }
1802
1803 return 0;
1804
1805cleanup_sdb:
1806 for (i = 0; i < SG_MEMPOOL_NR; i++) {
1807 struct scsi_host_sg_pool *sgp = scsi_sg_pools + i;
1808 if (sgp->pool)
1809 mempool_destroy(sgp->pool);
1810 if (sgp->slab)
1811 kmem_cache_destroy(sgp->slab);
1812 }
1813 kmem_cache_destroy(scsi_sdb_cache);
1814
1815 return -ENOMEM;
1816}
1817
1818void scsi_exit_queue(void)
1819{
1820 int i;
1821
1822 kmem_cache_destroy(scsi_sdb_cache);
1823
1824 for (i = 0; i < SG_MEMPOOL_NR; i++) {
1825 struct scsi_host_sg_pool *sgp = scsi_sg_pools + i;
1826 mempool_destroy(sgp->pool);
1827 kmem_cache_destroy(sgp->slab);
1828 }
1829}
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849int
1850scsi_mode_select(struct scsi_device *sdev, int pf, int sp, int modepage,
1851 unsigned char *buffer, int len, int timeout, int retries,
1852 struct scsi_mode_data *data, struct scsi_sense_hdr *sshdr)
1853{
1854 unsigned char cmd[10];
1855 unsigned char *real_buffer;
1856 int ret;
1857
1858 memset(cmd, 0, sizeof(cmd));
1859 cmd[1] = (pf ? 0x10 : 0) | (sp ? 0x01 : 0);
1860
1861 if (sdev->use_10_for_ms) {
1862 if (len > 65535)
1863 return -EINVAL;
1864 real_buffer = kmalloc(8 + len, GFP_KERNEL);
1865 if (!real_buffer)
1866 return -ENOMEM;
1867 memcpy(real_buffer + 8, buffer, len);
1868 len += 8;
1869 real_buffer[0] = 0;
1870 real_buffer[1] = 0;
1871 real_buffer[2] = data->medium_type;
1872 real_buffer[3] = data->device_specific;
1873 real_buffer[4] = data->longlba ? 0x01 : 0;
1874 real_buffer[5] = 0;
1875 real_buffer[6] = data->block_descriptor_length >> 8;
1876 real_buffer[7] = data->block_descriptor_length;
1877
1878 cmd[0] = MODE_SELECT_10;
1879 cmd[7] = len >> 8;
1880 cmd[8] = len;
1881 } else {
1882 if (len > 255 || data->block_descriptor_length > 255 ||
1883 data->longlba)
1884 return -EINVAL;
1885
1886 real_buffer = kmalloc(4 + len, GFP_KERNEL);
1887 if (!real_buffer)
1888 return -ENOMEM;
1889 memcpy(real_buffer + 4, buffer, len);
1890 len += 4;
1891 real_buffer[0] = 0;
1892 real_buffer[1] = data->medium_type;
1893 real_buffer[2] = data->device_specific;
1894 real_buffer[3] = data->block_descriptor_length;
1895
1896
1897 cmd[0] = MODE_SELECT;
1898 cmd[4] = len;
1899 }
1900
1901 ret = scsi_execute_req(sdev, cmd, DMA_TO_DEVICE, real_buffer, len,
1902 sshdr, timeout, retries, NULL);
1903 kfree(real_buffer);
1904 return ret;
1905}
1906EXPORT_SYMBOL_GPL(scsi_mode_select);
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925int
1926scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
1927 unsigned char *buffer, int len, int timeout, int retries,
1928 struct scsi_mode_data *data, struct scsi_sense_hdr *sshdr)
1929{
1930 unsigned char cmd[12];
1931 int use_10_for_ms;
1932 int header_length;
1933 int result;
1934 struct scsi_sense_hdr my_sshdr;
1935
1936 memset(data, 0, sizeof(*data));
1937 memset(&cmd[0], 0, 12);
1938 cmd[1] = dbd & 0x18;
1939 cmd[2] = modepage;
1940
1941
1942 if (!sshdr)
1943 sshdr = &my_sshdr;
1944
1945 retry:
1946 use_10_for_ms = sdev->use_10_for_ms;
1947
1948 if (use_10_for_ms) {
1949 if (len < 8)
1950 len = 8;
1951
1952 cmd[0] = MODE_SENSE_10;
1953 cmd[8] = len;
1954 header_length = 8;
1955 } else {
1956 if (len < 4)
1957 len = 4;
1958
1959 cmd[0] = MODE_SENSE;
1960 cmd[4] = len;
1961 header_length = 4;
1962 }
1963
1964 memset(buffer, 0, len);
1965
1966 result = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buffer, len,
1967 sshdr, timeout, retries, NULL);
1968
1969
1970
1971
1972
1973
1974 if (use_10_for_ms && !scsi_status_is_good(result) &&
1975 (driver_byte(result) & DRIVER_SENSE)) {
1976 if (scsi_sense_valid(sshdr)) {
1977 if ((sshdr->sense_key == ILLEGAL_REQUEST) &&
1978 (sshdr->asc == 0x20) && (sshdr->ascq == 0)) {
1979
1980
1981
1982 sdev->use_10_for_ms = 0;
1983 goto retry;
1984 }
1985 }
1986 }
1987
1988 if(scsi_status_is_good(result)) {
1989 if (unlikely(buffer[0] == 0x86 && buffer[1] == 0x0b &&
1990 (modepage == 6 || modepage == 8))) {
1991
1992 header_length = 0;
1993 data->length = 13;
1994 data->medium_type = 0;
1995 data->device_specific = 0;
1996 data->longlba = 0;
1997 data->block_descriptor_length = 0;
1998 } else if(use_10_for_ms) {
1999 data->length = buffer[0]*256 + buffer[1] + 2;
2000 data->medium_type = buffer[2];
2001 data->device_specific = buffer[3];
2002 data->longlba = buffer[4] & 0x01;
2003 data->block_descriptor_length = buffer[6]*256
2004 + buffer[7];
2005 } else {
2006 data->length = buffer[0] + 1;
2007 data->medium_type = buffer[1];
2008 data->device_specific = buffer[2];
2009 data->block_descriptor_length = buffer[3];
2010 }
2011 data->header_length = header_length;
2012 }
2013
2014 return result;
2015}
2016EXPORT_SYMBOL(scsi_mode_sense);
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030int
2031scsi_test_unit_ready(struct scsi_device *sdev, int timeout, int retries,
2032 struct scsi_sense_hdr *sshdr_external)
2033{
2034 char cmd[] = {
2035 TEST_UNIT_READY, 0, 0, 0, 0, 0,
2036 };
2037 struct scsi_sense_hdr *sshdr;
2038 int result;
2039
2040 if (!sshdr_external)
2041 sshdr = kzalloc(sizeof(*sshdr), GFP_KERNEL);
2042 else
2043 sshdr = sshdr_external;
2044
2045
2046 do {
2047 result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, sshdr,
2048 timeout, retries, NULL);
2049 if (sdev->removable && scsi_sense_valid(sshdr) &&
2050 sshdr->sense_key == UNIT_ATTENTION)
2051 sdev->changed = 1;
2052 } while (scsi_sense_valid(sshdr) &&
2053 sshdr->sense_key == UNIT_ATTENTION && --retries);
2054
2055 if (!sshdr_external)
2056 kfree(sshdr);
2057 return result;
2058}
2059EXPORT_SYMBOL(scsi_test_unit_ready);
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069int
2070scsi_device_set_state(struct scsi_device *sdev, enum scsi_device_state state)
2071{
2072 enum scsi_device_state oldstate = sdev->sdev_state;
2073
2074 if (state == oldstate)
2075 return 0;
2076
2077 switch (state) {
2078 case SDEV_CREATED:
2079 switch (oldstate) {
2080 case SDEV_CREATED_BLOCK:
2081 break;
2082 default:
2083 goto illegal;
2084 }
2085 break;
2086
2087 case SDEV_RUNNING:
2088 switch (oldstate) {
2089 case SDEV_CREATED:
2090 case SDEV_OFFLINE:
2091 case SDEV_TRANSPORT_OFFLINE:
2092 case SDEV_QUIESCE:
2093 case SDEV_BLOCK:
2094 break;
2095 default:
2096 goto illegal;
2097 }
2098 break;
2099
2100 case SDEV_QUIESCE:
2101 switch (oldstate) {
2102 case SDEV_RUNNING:
2103 case SDEV_OFFLINE:
2104 case SDEV_TRANSPORT_OFFLINE:
2105 break;
2106 default:
2107 goto illegal;
2108 }
2109 break;
2110
2111 case SDEV_OFFLINE:
2112 case SDEV_TRANSPORT_OFFLINE:
2113 switch (oldstate) {
2114 case SDEV_CREATED:
2115 case SDEV_RUNNING:
2116 case SDEV_QUIESCE:
2117 case SDEV_BLOCK:
2118 break;
2119 default:
2120 goto illegal;
2121 }
2122 break;
2123
2124 case SDEV_BLOCK:
2125 switch (oldstate) {
2126 case SDEV_RUNNING:
2127 case SDEV_CREATED_BLOCK:
2128 break;
2129 default:
2130 goto illegal;
2131 }
2132 break;
2133
2134 case SDEV_CREATED_BLOCK:
2135 switch (oldstate) {
2136 case SDEV_CREATED:
2137 break;
2138 default:
2139 goto illegal;
2140 }
2141 break;
2142
2143 case SDEV_CANCEL:
2144 switch (oldstate) {
2145 case SDEV_CREATED:
2146 case SDEV_RUNNING:
2147 case SDEV_QUIESCE:
2148 case SDEV_OFFLINE:
2149 case SDEV_TRANSPORT_OFFLINE:
2150 case SDEV_BLOCK:
2151 break;
2152 default:
2153 goto illegal;
2154 }
2155 break;
2156
2157 case SDEV_DEL:
2158 switch (oldstate) {
2159 case SDEV_CREATED:
2160 case SDEV_RUNNING:
2161 case SDEV_OFFLINE:
2162 case SDEV_TRANSPORT_OFFLINE:
2163 case SDEV_CANCEL:
2164 break;
2165 default:
2166 goto illegal;
2167 }
2168 break;
2169
2170 }
2171 sdev->sdev_state = state;
2172 return 0;
2173
2174 illegal:
2175 SCSI_LOG_ERROR_RECOVERY(1,
2176 sdev_printk(KERN_ERR, sdev,
2177 "Illegal state transition %s->%s\n",
2178 scsi_device_state_name(oldstate),
2179 scsi_device_state_name(state))
2180 );
2181 return -EINVAL;
2182}
2183EXPORT_SYMBOL(scsi_device_set_state);
2184
2185
2186
2187
2188
2189
2190
2191
2192static void scsi_evt_emit(struct scsi_device *sdev, struct scsi_event *evt)
2193{
2194 int idx = 0;
2195 char *envp[3];
2196
2197 switch (evt->evt_type) {
2198 case SDEV_EVT_MEDIA_CHANGE:
2199 envp[idx++] = "SDEV_MEDIA_CHANGE=1";
2200 break;
2201
2202 default:
2203
2204 break;
2205 }
2206
2207 envp[idx++] = NULL;
2208
2209 kobject_uevent_env(&sdev->sdev_gendev.kobj, KOBJ_CHANGE, envp);
2210}
2211
2212
2213
2214
2215
2216
2217
2218
2219void scsi_evt_thread(struct work_struct *work)
2220{
2221 struct scsi_device *sdev;
2222 LIST_HEAD(event_list);
2223
2224 sdev = container_of(work, struct scsi_device, event_work);
2225
2226 while (1) {
2227 struct scsi_event *evt;
2228 struct list_head *this, *tmp;
2229 unsigned long flags;
2230
2231 spin_lock_irqsave(&sdev->list_lock, flags);
2232 list_splice_init(&sdev->event_list, &event_list);
2233 spin_unlock_irqrestore(&sdev->list_lock, flags);
2234
2235 if (list_empty(&event_list))
2236 break;
2237
2238 list_for_each_safe(this, tmp, &event_list) {
2239 evt = list_entry(this, struct scsi_event, node);
2240 list_del(&evt->node);
2241 scsi_evt_emit(sdev, evt);
2242 kfree(evt);
2243 }
2244 }
2245}
2246
2247
2248
2249
2250
2251
2252
2253
2254void sdev_evt_send(struct scsi_device *sdev, struct scsi_event *evt)
2255{
2256 unsigned long flags;
2257
2258#if 0
2259
2260
2261
2262 if (!test_bit(evt->evt_type, sdev->supported_events)) {
2263 kfree(evt);
2264 return;
2265 }
2266#endif
2267
2268 spin_lock_irqsave(&sdev->list_lock, flags);
2269 list_add_tail(&evt->node, &sdev->event_list);
2270 schedule_work(&sdev->event_work);
2271 spin_unlock_irqrestore(&sdev->list_lock, flags);
2272}
2273EXPORT_SYMBOL_GPL(sdev_evt_send);
2274
2275
2276
2277
2278
2279
2280
2281
2282struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type,
2283 gfp_t gfpflags)
2284{
2285 struct scsi_event *evt = kzalloc(sizeof(struct scsi_event), gfpflags);
2286 if (!evt)
2287 return NULL;
2288
2289 evt->evt_type = evt_type;
2290 INIT_LIST_HEAD(&evt->node);
2291
2292
2293 switch (evt_type) {
2294 case SDEV_EVT_MEDIA_CHANGE:
2295 default:
2296
2297 break;
2298 }
2299
2300 return evt;
2301}
2302EXPORT_SYMBOL_GPL(sdev_evt_alloc);
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312void sdev_evt_send_simple(struct scsi_device *sdev,
2313 enum scsi_device_event evt_type, gfp_t gfpflags)
2314{
2315 struct scsi_event *evt = sdev_evt_alloc(evt_type, gfpflags);
2316 if (!evt) {
2317 sdev_printk(KERN_ERR, sdev, "event %d eaten due to OOM\n",
2318 evt_type);
2319 return;
2320 }
2321
2322 sdev_evt_send(sdev, evt);
2323}
2324EXPORT_SYMBOL_GPL(sdev_evt_send_simple);
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341int
2342scsi_device_quiesce(struct scsi_device *sdev)
2343{
2344 int err = scsi_device_set_state(sdev, SDEV_QUIESCE);
2345 if (err)
2346 return err;
2347
2348 scsi_run_queue(sdev->request_queue);
2349 while (sdev->device_busy) {
2350 msleep_interruptible(200);
2351 scsi_run_queue(sdev->request_queue);
2352 }
2353 return 0;
2354}
2355EXPORT_SYMBOL(scsi_device_quiesce);
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366void scsi_device_resume(struct scsi_device *sdev)
2367{
2368
2369
2370
2371
2372 if (sdev->sdev_state != SDEV_QUIESCE ||
2373 scsi_device_set_state(sdev, SDEV_RUNNING))
2374 return;
2375 scsi_run_queue(sdev->request_queue);
2376}
2377EXPORT_SYMBOL(scsi_device_resume);
2378
2379static void
2380device_quiesce_fn(struct scsi_device *sdev, void *data)
2381{
2382 scsi_device_quiesce(sdev);
2383}
2384
2385void
2386scsi_target_quiesce(struct scsi_target *starget)
2387{
2388 starget_for_each_device(starget, NULL, device_quiesce_fn);
2389}
2390EXPORT_SYMBOL(scsi_target_quiesce);
2391
2392static void
2393device_resume_fn(struct scsi_device *sdev, void *data)
2394{
2395 scsi_device_resume(sdev);
2396}
2397
2398void
2399scsi_target_resume(struct scsi_target *starget)
2400{
2401 starget_for_each_device(starget, NULL, device_resume_fn);
2402}
2403EXPORT_SYMBOL(scsi_target_resume);
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421int
2422scsi_internal_device_block(struct scsi_device *sdev)
2423{
2424 struct request_queue *q = sdev->request_queue;
2425 unsigned long flags;
2426 int err = 0;
2427
2428 err = scsi_device_set_state(sdev, SDEV_BLOCK);
2429 if (err) {
2430 err = scsi_device_set_state(sdev, SDEV_CREATED_BLOCK);
2431
2432 if (err)
2433 return err;
2434 }
2435
2436
2437
2438
2439
2440
2441 spin_lock_irqsave(q->queue_lock, flags);
2442 blk_stop_queue(q);
2443 spin_unlock_irqrestore(q->queue_lock, flags);
2444
2445 return 0;
2446}
2447EXPORT_SYMBOL_GPL(scsi_internal_device_block);
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465int
2466scsi_internal_device_unblock(struct scsi_device *sdev,
2467 enum scsi_device_state new_state)
2468{
2469 struct request_queue *q = sdev->request_queue;
2470 unsigned long flags;
2471
2472
2473
2474
2475
2476 if (sdev->sdev_state == SDEV_BLOCK)
2477 sdev->sdev_state = new_state;
2478 else if (sdev->sdev_state == SDEV_CREATED_BLOCK) {
2479 if (new_state == SDEV_TRANSPORT_OFFLINE ||
2480 new_state == SDEV_OFFLINE)
2481 sdev->sdev_state = new_state;
2482 else
2483 sdev->sdev_state = SDEV_CREATED;
2484 } else if (sdev->sdev_state != SDEV_CANCEL &&
2485 sdev->sdev_state != SDEV_OFFLINE)
2486 return -EINVAL;
2487
2488 spin_lock_irqsave(q->queue_lock, flags);
2489 blk_start_queue(q);
2490 spin_unlock_irqrestore(q->queue_lock, flags);
2491
2492 return 0;
2493}
2494EXPORT_SYMBOL_GPL(scsi_internal_device_unblock);
2495
2496static void
2497device_block(struct scsi_device *sdev, void *data)
2498{
2499 scsi_internal_device_block(sdev);
2500}
2501
2502static int
2503target_block(struct device *dev, void *data)
2504{
2505 if (scsi_is_target_device(dev))
2506 starget_for_each_device(to_scsi_target(dev), NULL,
2507 device_block);
2508 return 0;
2509}
2510
2511void
2512scsi_target_block(struct device *dev)
2513{
2514 if (scsi_is_target_device(dev))
2515 starget_for_each_device(to_scsi_target(dev), NULL,
2516 device_block);
2517 else
2518 device_for_each_child(dev, NULL, target_block);
2519}
2520EXPORT_SYMBOL_GPL(scsi_target_block);
2521
2522static void
2523device_unblock(struct scsi_device *sdev, void *data)
2524{
2525 scsi_internal_device_unblock(sdev, *(enum scsi_device_state *)data);
2526}
2527
2528static int
2529target_unblock(struct device *dev, void *data)
2530{
2531 if (scsi_is_target_device(dev))
2532 starget_for_each_device(to_scsi_target(dev), data,
2533 device_unblock);
2534 return 0;
2535}
2536
2537void
2538scsi_target_unblock(struct device *dev, enum scsi_device_state new_state)
2539{
2540 if (scsi_is_target_device(dev))
2541 starget_for_each_device(to_scsi_target(dev), &new_state,
2542 device_unblock);
2543 else
2544 device_for_each_child(dev, &new_state, target_unblock);
2545}
2546EXPORT_SYMBOL_GPL(scsi_target_unblock);
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557void *scsi_kmap_atomic_sg(struct scatterlist *sgl, int sg_count,
2558 size_t *offset, size_t *len)
2559{
2560 int i;
2561 size_t sg_len = 0, len_complete = 0;
2562 struct scatterlist *sg;
2563 struct page *page;
2564
2565 WARN_ON(!irqs_disabled());
2566
2567 for_each_sg(sgl, sg, sg_count, i) {
2568 len_complete = sg_len;
2569 sg_len += sg->length;
2570 if (sg_len > *offset)
2571 break;
2572 }
2573
2574 if (unlikely(i == sg_count)) {
2575 printk(KERN_ERR "%s: Bytes in sg: %zu, requested offset %zu, "
2576 "elements %d\n",
2577 __func__, sg_len, *offset, sg_count);
2578 WARN_ON(1);
2579 return NULL;
2580 }
2581
2582
2583 *offset = *offset - len_complete + sg->offset;
2584
2585
2586 page = nth_page(sg_page(sg), (*offset >> PAGE_SHIFT));
2587 *offset &= ~PAGE_MASK;
2588
2589
2590 sg_len = PAGE_SIZE - *offset;
2591 if (*len > sg_len)
2592 *len = sg_len;
2593
2594 return kmap_atomic(page);
2595}
2596EXPORT_SYMBOL(scsi_kmap_atomic_sg);
2597
2598
2599
2600
2601
2602void scsi_kunmap_atomic_sg(void *virt)
2603{
2604 kunmap_atomic(virt);
2605}
2606EXPORT_SYMBOL(scsi_kunmap_atomic_sg);
2607