diff options
| author | Jiri Kosina <jkosina@suse.cz> | 2014-11-20 08:42:02 -0500 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.cz> | 2014-11-20 08:42:02 -0500 |
| commit | a02001086bbfb4da35d1228bebc2f1b442db455f (patch) | |
| tree | 62ab47936cef06fd08657ca5b6cd1df98c19be57 /include/scsi | |
| parent | eff264efeeb0898408e8c9df72d8a32621035bed (diff) | |
| parent | fc14f9c1272f62c3e8d01300f52467c0d9af50f9 (diff) | |
Merge Linus' tree to be be to apply submitted patches to newer code than
current trivial.git base
Diffstat (limited to 'include/scsi')
| -rw-r--r-- | include/scsi/iscsi_if.h | 1 | ||||
| -rw-r--r-- | include/scsi/osd_initiator.h | 2 | ||||
| -rw-r--r-- | include/scsi/osd_ore.h | 2 | ||||
| -rw-r--r-- | include/scsi/osd_protocol.h | 4 | ||||
| -rw-r--r-- | include/scsi/osd_sec.h | 2 | ||||
| -rw-r--r-- | include/scsi/osd_sense.h | 2 | ||||
| -rw-r--r-- | include/scsi/osd_types.h | 2 | ||||
| -rw-r--r-- | include/scsi/scsi.h | 3 | ||||
| -rw-r--r-- | include/scsi/scsi_cmnd.h | 36 | ||||
| -rw-r--r-- | include/scsi/scsi_device.h | 1 | ||||
| -rw-r--r-- | include/scsi/scsi_host.h | 6 | ||||
| -rw-r--r-- | include/scsi/scsi_tcq.h | 8 | ||||
| -rw-r--r-- | include/scsi/sg.h | 4 |
13 files changed, 49 insertions, 24 deletions
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h index fd0421c6d40a..95ed9424a11a 100644 --- a/include/scsi/iscsi_if.h +++ b/include/scsi/iscsi_if.h | |||
| @@ -527,6 +527,7 @@ enum iscsi_err { | |||
| 527 | ISCSI_ERR_XMIT_FAILED = ISCSI_ERR_BASE + 19, | 527 | ISCSI_ERR_XMIT_FAILED = ISCSI_ERR_BASE + 19, |
| 528 | ISCSI_ERR_TCP_CONN_CLOSE = ISCSI_ERR_BASE + 20, | 528 | ISCSI_ERR_TCP_CONN_CLOSE = ISCSI_ERR_BASE + 20, |
| 529 | ISCSI_ERR_SCSI_EH_SESSION_RST = ISCSI_ERR_BASE + 21, | 529 | ISCSI_ERR_SCSI_EH_SESSION_RST = ISCSI_ERR_BASE + 21, |
| 530 | ISCSI_ERR_NOP_TIMEDOUT = ISCSI_ERR_BASE + 22, | ||
| 530 | }; | 531 | }; |
| 531 | 532 | ||
| 532 | /* | 533 | /* |
diff --git a/include/scsi/osd_initiator.h b/include/scsi/osd_initiator.h index b2e85fdd2ae0..a09cca829082 100644 --- a/include/scsi/osd_initiator.h +++ b/include/scsi/osd_initiator.h | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
| 5 | * | 5 | * |
| 6 | * Authors: | 6 | * Authors: |
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
| 8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
| 9 | * | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
diff --git a/include/scsi/osd_ore.h b/include/scsi/osd_ore.h index 6ca3265a4dca..7a8d2cd30328 100644 --- a/include/scsi/osd_ore.h +++ b/include/scsi/osd_ore.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Copyright (C) 2011 | 2 | * Copyright (C) 2011 |
| 3 | * Boaz Harrosh <bharrosh@panasas.com> | 3 | * Boaz Harrosh <ooo@electrozaur.com> |
| 4 | * | 4 | * |
| 5 | * Public Declarations of the ORE API | 5 | * Public Declarations of the ORE API |
| 6 | * | 6 | * |
diff --git a/include/scsi/osd_protocol.h b/include/scsi/osd_protocol.h index a2594afe05c7..e0ca835e7bf7 100644 --- a/include/scsi/osd_protocol.h +++ b/include/scsi/osd_protocol.h | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
| 5 | * | 5 | * |
| 6 | * Authors: | 6 | * Authors: |
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
| 8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
| 9 | * | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
| @@ -496,7 +496,7 @@ struct osd_timestamp { | |||
| 496 | */ | 496 | */ |
| 497 | 497 | ||
| 498 | struct osd_key_identifier { | 498 | struct osd_key_identifier { |
| 499 | u8 id[7]; /* if you know why 7 please email bharrosh@panasas.com */ | 499 | u8 id[7]; /* if you know why 7 please email ooo@electrozaur.com */ |
| 500 | } __packed; | 500 | } __packed; |
| 501 | 501 | ||
| 502 | /* for osd_capability.format */ | 502 | /* for osd_capability.format */ |
diff --git a/include/scsi/osd_sec.h b/include/scsi/osd_sec.h index f96151c9c9e8..7abeb0f0db30 100644 --- a/include/scsi/osd_sec.h +++ b/include/scsi/osd_sec.h | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
| 5 | * | 5 | * |
| 6 | * Authors: | 6 | * Authors: |
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
| 8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
| 9 | * | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
diff --git a/include/scsi/osd_sense.h b/include/scsi/osd_sense.h index 91db543a5502..d52aa93a0b2d 100644 --- a/include/scsi/osd_sense.h +++ b/include/scsi/osd_sense.h | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
| 5 | * | 5 | * |
| 6 | * Authors: | 6 | * Authors: |
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
| 8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
| 9 | * | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
diff --git a/include/scsi/osd_types.h b/include/scsi/osd_types.h index bd0be7ed4bcf..48e8a165e136 100644 --- a/include/scsi/osd_types.h +++ b/include/scsi/osd_types.h | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. | 4 | * Copyright (C) 2008 Panasas Inc. All rights reserved. |
| 5 | * | 5 | * |
| 6 | * Authors: | 6 | * Authors: |
| 7 | * Boaz Harrosh <bharrosh@panasas.com> | 7 | * Boaz Harrosh <ooo@electrozaur.com> |
| 8 | * Benny Halevy <bhalevy@panasas.com> | 8 | * Benny Halevy <bhalevy@panasas.com> |
| 9 | * | 9 | * |
| 10 | * This program is free software; you can redistribute it and/or modify | 10 | * This program is free software; you can redistribute it and/or modify |
diff --git a/include/scsi/scsi.h b/include/scsi/scsi.h index e6df23cae7be..d17178e6fcdd 100644 --- a/include/scsi/scsi.h +++ b/include/scsi/scsi.h | |||
| @@ -31,7 +31,7 @@ enum scsi_timeouts { | |||
| 31 | * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit | 31 | * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit |
| 32 | * is totally arbitrary, a setting of 2048 will get you at least 8mb ios. | 32 | * is totally arbitrary, a setting of 2048 will get you at least 8mb ios. |
| 33 | */ | 33 | */ |
| 34 | #ifdef ARCH_HAS_SG_CHAIN | 34 | #ifdef CONFIG_ARCH_HAS_SG_CHAIN |
| 35 | #define SCSI_MAX_SG_CHAIN_SEGMENTS 2048 | 35 | #define SCSI_MAX_SG_CHAIN_SEGMENTS 2048 |
| 36 | #else | 36 | #else |
| 37 | #define SCSI_MAX_SG_CHAIN_SEGMENTS SCSI_MAX_SG_SEGMENTS | 37 | #define SCSI_MAX_SG_CHAIN_SEGMENTS SCSI_MAX_SG_SEGMENTS |
| @@ -333,6 +333,7 @@ static inline int scsi_status_is_good(int status) | |||
| 333 | #define TYPE_RBC 0x0e | 333 | #define TYPE_RBC 0x0e |
| 334 | #define TYPE_OSD 0x11 | 334 | #define TYPE_OSD 0x11 |
| 335 | #define TYPE_ZBC 0x14 | 335 | #define TYPE_ZBC 0x14 |
| 336 | #define TYPE_WLUN 0x1e /* well-known logical unit */ | ||
| 336 | #define TYPE_NO_LUN 0x7f | 337 | #define TYPE_NO_LUN 0x7f |
| 337 | 338 | ||
| 338 | /* SCSI protocols; these are taken from SPC-3 section 7.5 */ | 339 | /* SCSI protocols; these are taken from SPC-3 section 7.5 */ |
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h index 73f349044941..522a5f27f553 100644 --- a/include/scsi/scsi_cmnd.h +++ b/include/scsi/scsi_cmnd.h | |||
| @@ -10,9 +10,10 @@ | |||
| 10 | #include <scsi/scsi_device.h> | 10 | #include <scsi/scsi_device.h> |
| 11 | 11 | ||
| 12 | struct Scsi_Host; | 12 | struct Scsi_Host; |
| 13 | struct scsi_device; | ||
| 14 | struct scsi_driver; | 13 | struct scsi_driver; |
| 15 | 14 | ||
| 15 | #include <scsi/scsi_device.h> | ||
| 16 | |||
| 16 | /* | 17 | /* |
| 17 | * MAX_COMMAND_SIZE is: | 18 | * MAX_COMMAND_SIZE is: |
| 18 | * The longest fixed-length SCSI CDB as per the SCSI standard. | 19 | * The longest fixed-length SCSI CDB as per the SCSI standard. |
| @@ -81,6 +82,7 @@ struct scsi_cmnd { | |||
| 81 | 82 | ||
| 82 | unsigned char prot_op; | 83 | unsigned char prot_op; |
| 83 | unsigned char prot_type; | 84 | unsigned char prot_type; |
| 85 | unsigned char prot_flags; | ||
| 84 | 86 | ||
| 85 | unsigned short cmd_len; | 87 | unsigned short cmd_len; |
| 86 | enum dma_data_direction sc_data_direction; | 88 | enum dma_data_direction sc_data_direction; |
| @@ -252,6 +254,14 @@ static inline unsigned char scsi_get_prot_op(struct scsi_cmnd *scmd) | |||
| 252 | return scmd->prot_op; | 254 | return scmd->prot_op; |
| 253 | } | 255 | } |
| 254 | 256 | ||
| 257 | enum scsi_prot_flags { | ||
| 258 | SCSI_PROT_TRANSFER_PI = 1 << 0, | ||
| 259 | SCSI_PROT_GUARD_CHECK = 1 << 1, | ||
| 260 | SCSI_PROT_REF_CHECK = 1 << 2, | ||
| 261 | SCSI_PROT_REF_INCREMENT = 1 << 3, | ||
| 262 | SCSI_PROT_IP_CHECKSUM = 1 << 4, | ||
| 263 | }; | ||
| 264 | |||
| 255 | /* | 265 | /* |
| 256 | * The controller usually does not know anything about the target it | 266 | * The controller usually does not know anything about the target it |
| 257 | * is communicating with. However, when DIX is enabled the controller | 267 | * is communicating with. However, when DIX is enabled the controller |
| @@ -280,6 +290,17 @@ static inline sector_t scsi_get_lba(struct scsi_cmnd *scmd) | |||
| 280 | return blk_rq_pos(scmd->request); | 290 | return blk_rq_pos(scmd->request); |
| 281 | } | 291 | } |
| 282 | 292 | ||
| 293 | static inline unsigned int scsi_prot_interval(struct scsi_cmnd *scmd) | ||
| 294 | { | ||
| 295 | return scmd->device->sector_size; | ||
| 296 | } | ||
| 297 | |||
| 298 | static inline u32 scsi_prot_ref_tag(struct scsi_cmnd *scmd) | ||
| 299 | { | ||
| 300 | return blk_rq_pos(scmd->request) >> | ||
| 301 | (ilog2(scsi_prot_interval(scmd)) - 9) & 0xffffffff; | ||
| 302 | } | ||
| 303 | |||
| 283 | static inline unsigned scsi_prot_sg_count(struct scsi_cmnd *cmd) | 304 | static inline unsigned scsi_prot_sg_count(struct scsi_cmnd *cmd) |
| 284 | { | 305 | { |
| 285 | return cmd->prot_sdb ? cmd->prot_sdb->table.nents : 0; | 306 | return cmd->prot_sdb ? cmd->prot_sdb->table.nents : 0; |
| @@ -316,17 +337,12 @@ static inline void set_driver_byte(struct scsi_cmnd *cmd, char status) | |||
| 316 | static inline unsigned scsi_transfer_length(struct scsi_cmnd *scmd) | 337 | static inline unsigned scsi_transfer_length(struct scsi_cmnd *scmd) |
| 317 | { | 338 | { |
| 318 | unsigned int xfer_len = scsi_out(scmd)->length; | 339 | unsigned int xfer_len = scsi_out(scmd)->length; |
| 319 | unsigned int prot_op = scsi_get_prot_op(scmd); | 340 | unsigned int prot_interval = scsi_prot_interval(scmd); |
| 320 | unsigned int sector_size = scmd->device->sector_size; | ||
| 321 | 341 | ||
| 322 | switch (prot_op) { | 342 | if (scmd->prot_flags & SCSI_PROT_TRANSFER_PI) |
| 323 | case SCSI_PROT_NORMAL: | 343 | xfer_len += (xfer_len >> ilog2(prot_interval)) * 8; |
| 324 | case SCSI_PROT_WRITE_STRIP: | ||
| 325 | case SCSI_PROT_READ_INSERT: | ||
| 326 | return xfer_len; | ||
| 327 | } | ||
| 328 | 344 | ||
| 329 | return xfer_len + (xfer_len >> ilog2(sector_size)) * 8; | 345 | return xfer_len; |
| 330 | } | 346 | } |
| 331 | 347 | ||
| 332 | #endif /* _SCSI_SCSI_CMND_H */ | 348 | #endif /* _SCSI_SCSI_CMND_H */ |
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h index 1a0d1842962e..27ecee73bd72 100644 --- a/include/scsi/scsi_device.h +++ b/include/scsi/scsi_device.h | |||
| @@ -174,6 +174,7 @@ struct scsi_device { | |||
| 174 | unsigned wce_default_on:1; /* Cache is ON by default */ | 174 | unsigned wce_default_on:1; /* Cache is ON by default */ |
| 175 | unsigned no_dif:1; /* T10 PI (DIF) should be disabled */ | 175 | unsigned no_dif:1; /* T10 PI (DIF) should be disabled */ |
| 176 | unsigned broken_fua:1; /* Don't set FUA bit */ | 176 | unsigned broken_fua:1; /* Don't set FUA bit */ |
| 177 | unsigned lun_in_cdb:1; /* Store LUN bits in CDB[1] */ | ||
| 177 | 178 | ||
| 178 | atomic_t disk_events_disable_depth; /* disable depth for disk events */ | 179 | atomic_t disk_events_disable_depth; /* disable depth for disk events */ |
| 179 | 180 | ||
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h index b286b5787c85..00859c288bee 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h | |||
| @@ -606,7 +606,7 @@ struct Scsi_Host { | |||
| 606 | /* | 606 | /* |
| 607 | * These three parameters can be used to allow for wide scsi, | 607 | * These three parameters can be used to allow for wide scsi, |
| 608 | * and for host adapters that support multiple busses | 608 | * and for host adapters that support multiple busses |
| 609 | * The first two should be set to 1 more than the actual max id | 609 | * The last two should be set to 1 more than the actual max id |
| 610 | * or lun (e.g. 8 for SCSI parallel systems). | 610 | * or lun (e.g. 8 for SCSI parallel systems). |
| 611 | */ | 611 | */ |
| 612 | unsigned int max_channel; | 612 | unsigned int max_channel; |
| @@ -680,6 +680,7 @@ struct Scsi_Host { | |||
| 680 | unsigned no_write_same:1; | 680 | unsigned no_write_same:1; |
| 681 | 681 | ||
| 682 | unsigned use_blk_mq:1; | 682 | unsigned use_blk_mq:1; |
| 683 | unsigned use_cmd_list:1; | ||
| 683 | 684 | ||
| 684 | /* | 685 | /* |
| 685 | * Optional work queue to be utilized by the transport | 686 | * Optional work queue to be utilized by the transport |
| @@ -692,6 +693,9 @@ struct Scsi_Host { | |||
| 692 | */ | 693 | */ |
| 693 | struct workqueue_struct *tmf_work_q; | 694 | struct workqueue_struct *tmf_work_q; |
| 694 | 695 | ||
| 696 | /* The transport requires the LUN bits NOT to be stored in CDB[1] */ | ||
| 697 | unsigned no_scsi2_lun_in_cdb:1; | ||
| 698 | |||
| 695 | /* | 699 | /* |
| 696 | * Value host_blocked counts down from | 700 | * Value host_blocked counts down from |
| 697 | */ | 701 | */ |
diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h index cdcc90b07ecb..56ed843969ca 100644 --- a/include/scsi/scsi_tcq.h +++ b/include/scsi/scsi_tcq.h | |||
| @@ -67,8 +67,9 @@ static inline void scsi_activate_tcq(struct scsi_device *sdev, int depth) | |||
| 67 | if (!sdev->tagged_supported) | 67 | if (!sdev->tagged_supported) |
| 68 | return; | 68 | return; |
| 69 | 69 | ||
| 70 | if (!shost_use_blk_mq(sdev->host) && | 70 | if (shost_use_blk_mq(sdev->host)) |
| 71 | blk_queue_tagged(sdev->request_queue)) | 71 | queue_flag_set_unlocked(QUEUE_FLAG_QUEUED, sdev->request_queue); |
| 72 | else if (!blk_queue_tagged(sdev->request_queue)) | ||
| 72 | blk_queue_init_tags(sdev->request_queue, depth, | 73 | blk_queue_init_tags(sdev->request_queue, depth, |
| 73 | sdev->host->bqt); | 74 | sdev->host->bqt); |
| 74 | 75 | ||
| @@ -81,8 +82,7 @@ static inline void scsi_activate_tcq(struct scsi_device *sdev, int depth) | |||
| 81 | **/ | 82 | **/ |
| 82 | static inline void scsi_deactivate_tcq(struct scsi_device *sdev, int depth) | 83 | static inline void scsi_deactivate_tcq(struct scsi_device *sdev, int depth) |
| 83 | { | 84 | { |
| 84 | if (!shost_use_blk_mq(sdev->host) && | 85 | if (blk_queue_tagged(sdev->request_queue)) |
| 85 | blk_queue_tagged(sdev->request_queue)) | ||
| 86 | blk_queue_free_tags(sdev->request_queue); | 86 | blk_queue_free_tags(sdev->request_queue); |
| 87 | scsi_adjust_queue_depth(sdev, 0, depth); | 87 | scsi_adjust_queue_depth(sdev, 0, depth); |
| 88 | } | 88 | } |
diff --git a/include/scsi/sg.h b/include/scsi/sg.h index 9859355a7cf9..750e5db7c6bf 100644 --- a/include/scsi/sg.h +++ b/include/scsi/sg.h | |||
| @@ -86,7 +86,9 @@ typedef struct sg_io_hdr | |||
| 86 | #define SG_FLAG_MMAP_IO 4 /* request memory mapped IO */ | 86 | #define SG_FLAG_MMAP_IO 4 /* request memory mapped IO */ |
| 87 | #define SG_FLAG_NO_DXFER 0x10000 /* no transfer of kernel buffers to/from */ | 87 | #define SG_FLAG_NO_DXFER 0x10000 /* no transfer of kernel buffers to/from */ |
| 88 | /* user space (debug indirect IO) */ | 88 | /* user space (debug indirect IO) */ |
| 89 | #define SG_FLAG_Q_AT_TAIL 0x10 /* default is Q_AT_HEAD */ | 89 | /* defaults:: for sg driver: Q_AT_HEAD; for block layer: Q_AT_TAIL */ |
| 90 | #define SG_FLAG_Q_AT_TAIL 0x10 | ||
| 91 | #define SG_FLAG_Q_AT_HEAD 0x20 | ||
| 90 | 92 | ||
| 91 | /* following 'info' values are "or"-ed together */ | 93 | /* following 'info' values are "or"-ed together */ |
| 92 | #define SG_INFO_OK_MASK 0x1 | 94 | #define SG_INFO_OK_MASK 0x1 |
