mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (39 commits) [SCSI] sd: fix compile failure with CONFIG_BLK_DEV_INTEGRITY=n libiscsi: fix locking in iscsi_eh_device_reset libiscsi: check reason why we are stopping iscsi session to determine error value [SCSI] iscsi_tcp: return a descriptive error value during connection errors [SCSI] libiscsi: rename host reset to target reset [SCSI] iscsi class: fix endpoint id handling [SCSI] libiscsi: Support drivers initiating session removal [SCSI] libiscsi: fix data corruption when target has to resend data-in packets [SCSI] sd: Switch kernel printing level for DIF messages [SCSI] sd: Correctly handle all combinations of DIF and DIX [SCSI] sd: Always print actual protection_type [SCSI] sd: Issue correct protection operation [SCSI] scsi_error: fix target reset handling [SCSI] lpfc 8.2.8 v2 : Add statistical reporting control and additional fc vendor events [SCSI] lpfc 8.2.8 v2 : Add sysfs control of target queue depth handling [SCSI] lpfc 8.2.8 v2 : Revert target busy in favor of transport disrupted [SCSI] scsi_dh_alua: remove REQ_NOMERGE [SCSI] lpfc 8.2.8 : update driver version to 8.2.8 [SCSI] lpfc 8.2.8 : Add MSI-X support [SCSI] lpfc 8.2.8 : Update driver to use new Host byte error code DID_TRANSPORT_DISRUPTED ...
This commit is contained in:
commit
ed09441dac
60 changed files with 8003 additions and 1111 deletions
|
|
@ -129,25 +129,30 @@ struct bio {
|
|||
* bit 2 -- barrier
|
||||
* Insert a serialization point in the IO queue, forcing previously
|
||||
* submitted IO to be completed before this oen is issued.
|
||||
* bit 3 -- fail fast, don't want low level driver retries
|
||||
* bit 4 -- synchronous I/O hint: the block layer will unplug immediately
|
||||
* bit 3 -- synchronous I/O hint: the block layer will unplug immediately
|
||||
* Note that this does NOT indicate that the IO itself is sync, just
|
||||
* that the block layer will not postpone issue of this IO by plugging.
|
||||
* bit 5 -- metadata request
|
||||
* bit 4 -- metadata request
|
||||
* Used for tracing to differentiate metadata and data IO. May also
|
||||
* get some preferential treatment in the IO scheduler
|
||||
* bit 6 -- discard sectors
|
||||
* bit 5 -- discard sectors
|
||||
* Informs the lower level device that this range of sectors is no longer
|
||||
* used by the file system and may thus be freed by the device. Used
|
||||
* for flash based storage.
|
||||
* bit 6 -- fail fast device errors
|
||||
* bit 7 -- fail fast transport errors
|
||||
* bit 8 -- fail fast driver errors
|
||||
* Don't want driver retries for any fast fail whatever the reason.
|
||||
*/
|
||||
#define BIO_RW 0 /* Must match RW in req flags (blkdev.h) */
|
||||
#define BIO_RW_AHEAD 1 /* Must match FAILFAST in req flags */
|
||||
#define BIO_RW_BARRIER 2
|
||||
#define BIO_RW_FAILFAST 3
|
||||
#define BIO_RW_SYNC 4
|
||||
#define BIO_RW_META 5
|
||||
#define BIO_RW_DISCARD 6
|
||||
#define BIO_RW_SYNC 3
|
||||
#define BIO_RW_META 4
|
||||
#define BIO_RW_DISCARD 5
|
||||
#define BIO_RW_FAILFAST_DEV 6
|
||||
#define BIO_RW_FAILFAST_TRANSPORT 7
|
||||
#define BIO_RW_FAILFAST_DRIVER 8
|
||||
|
||||
/*
|
||||
* upper 16 bits of bi_rw define the io priority of this bio
|
||||
|
|
@ -174,7 +179,10 @@ struct bio {
|
|||
#define bio_sectors(bio) ((bio)->bi_size >> 9)
|
||||
#define bio_barrier(bio) ((bio)->bi_rw & (1 << BIO_RW_BARRIER))
|
||||
#define bio_sync(bio) ((bio)->bi_rw & (1 << BIO_RW_SYNC))
|
||||
#define bio_failfast(bio) ((bio)->bi_rw & (1 << BIO_RW_FAILFAST))
|
||||
#define bio_failfast_dev(bio) ((bio)->bi_rw & (1 << BIO_RW_FAILFAST_DEV))
|
||||
#define bio_failfast_transport(bio) \
|
||||
((bio)->bi_rw & (1 << BIO_RW_FAILFAST_TRANSPORT))
|
||||
#define bio_failfast_driver(bio) ((bio)->bi_rw & (1 << BIO_RW_FAILFAST_DRIVER))
|
||||
#define bio_rw_ahead(bio) ((bio)->bi_rw & (1 << BIO_RW_AHEAD))
|
||||
#define bio_rw_meta(bio) ((bio)->bi_rw & (1 << BIO_RW_META))
|
||||
#define bio_discard(bio) ((bio)->bi_rw & (1 << BIO_RW_DISCARD))
|
||||
|
|
|
|||
|
|
@ -87,7 +87,9 @@ enum {
|
|||
*/
|
||||
enum rq_flag_bits {
|
||||
__REQ_RW, /* not set, read. set, write */
|
||||
__REQ_FAILFAST, /* no low level driver retries */
|
||||
__REQ_FAILFAST_DEV, /* no driver retries of device errors */
|
||||
__REQ_FAILFAST_TRANSPORT, /* no driver retries of transport errors */
|
||||
__REQ_FAILFAST_DRIVER, /* no driver retries of driver errors */
|
||||
__REQ_DISCARD, /* request to discard sectors */
|
||||
__REQ_SORTED, /* elevator knows about this request */
|
||||
__REQ_SOFTBARRIER, /* may not be passed by ioscheduler */
|
||||
|
|
@ -111,8 +113,10 @@ enum rq_flag_bits {
|
|||
};
|
||||
|
||||
#define REQ_RW (1 << __REQ_RW)
|
||||
#define REQ_FAILFAST_DEV (1 << __REQ_FAILFAST_DEV)
|
||||
#define REQ_FAILFAST_TRANSPORT (1 << __REQ_FAILFAST_TRANSPORT)
|
||||
#define REQ_FAILFAST_DRIVER (1 << __REQ_FAILFAST_DRIVER)
|
||||
#define REQ_DISCARD (1 << __REQ_DISCARD)
|
||||
#define REQ_FAILFAST (1 << __REQ_FAILFAST)
|
||||
#define REQ_SORTED (1 << __REQ_SORTED)
|
||||
#define REQ_SOFTBARRIER (1 << __REQ_SOFTBARRIER)
|
||||
#define REQ_HARDBARRIER (1 << __REQ_HARDBARRIER)
|
||||
|
|
@ -560,7 +564,12 @@ enum {
|
|||
#define blk_special_request(rq) ((rq)->cmd_type == REQ_TYPE_SPECIAL)
|
||||
#define blk_sense_request(rq) ((rq)->cmd_type == REQ_TYPE_SENSE)
|
||||
|
||||
#define blk_noretry_request(rq) ((rq)->cmd_flags & REQ_FAILFAST)
|
||||
#define blk_failfast_dev(rq) ((rq)->cmd_flags & REQ_FAILFAST_DEV)
|
||||
#define blk_failfast_transport(rq) ((rq)->cmd_flags & REQ_FAILFAST_TRANSPORT)
|
||||
#define blk_failfast_driver(rq) ((rq)->cmd_flags & REQ_FAILFAST_DRIVER)
|
||||
#define blk_noretry_request(rq) (blk_failfast_dev(rq) || \
|
||||
blk_failfast_transport(rq) || \
|
||||
blk_failfast_driver(rq))
|
||||
#define blk_rq_started(rq) ((rq)->cmd_flags & REQ_STARTED)
|
||||
|
||||
#define blk_account_rq(rq) (blk_rq_started(rq) && (blk_fs_request(rq) || blk_discard_rq(rq)))
|
||||
|
|
|
|||
|
|
@ -213,6 +213,8 @@ enum iscsi_err {
|
|||
ISCSI_ERR_DATA_DGST = ISCSI_ERR_BASE + 15,
|
||||
ISCSI_ERR_PARAM_NOT_FOUND = ISCSI_ERR_BASE + 16,
|
||||
ISCSI_ERR_NO_SCSI_CMD = ISCSI_ERR_BASE + 17,
|
||||
ISCSI_ERR_INVALID_HOST = ISCSI_ERR_BASE + 18,
|
||||
ISCSI_ERR_XMIT_FAILED = ISCSI_ERR_BASE + 19,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -287,6 +287,11 @@ struct iscsi_session {
|
|||
struct iscsi_pool cmdpool; /* PDU's pool */
|
||||
};
|
||||
|
||||
enum {
|
||||
ISCSI_HOST_SETUP,
|
||||
ISCSI_HOST_REMOVED,
|
||||
};
|
||||
|
||||
struct iscsi_host {
|
||||
char *initiatorname;
|
||||
/* hw address or netdev iscsi connection is bound to */
|
||||
|
|
@ -295,6 +300,12 @@ struct iscsi_host {
|
|||
/* local address */
|
||||
int local_port;
|
||||
char local_address[ISCSI_ADDRESS_BUF_LEN];
|
||||
|
||||
wait_queue_head_t session_removal_wq;
|
||||
/* protects sessions and state */
|
||||
spinlock_t lock;
|
||||
int num_sessions;
|
||||
int state;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -302,7 +313,7 @@ struct iscsi_host {
|
|||
*/
|
||||
extern int iscsi_change_queue_depth(struct scsi_device *sdev, int depth);
|
||||
extern int iscsi_eh_abort(struct scsi_cmnd *sc);
|
||||
extern int iscsi_eh_host_reset(struct scsi_cmnd *sc);
|
||||
extern int iscsi_eh_target_reset(struct scsi_cmnd *sc);
|
||||
extern int iscsi_eh_device_reset(struct scsi_cmnd *sc);
|
||||
extern int iscsi_queuecommand(struct scsi_cmnd *sc,
|
||||
void (*done)(struct scsi_cmnd *));
|
||||
|
|
@ -351,6 +362,8 @@ extern void iscsi_conn_stop(struct iscsi_cls_conn *, int);
|
|||
extern int iscsi_conn_bind(struct iscsi_cls_session *, struct iscsi_cls_conn *,
|
||||
int);
|
||||
extern void iscsi_conn_failure(struct iscsi_conn *conn, enum iscsi_err err);
|
||||
extern void iscsi_session_failure(struct iscsi_cls_session *cls_session,
|
||||
enum iscsi_err err);
|
||||
extern int iscsi_conn_get_param(struct iscsi_cls_conn *cls_conn,
|
||||
enum iscsi_param param, char *buf);
|
||||
extern void iscsi_suspend_tx(struct iscsi_conn *conn);
|
||||
|
|
|
|||
|
|
@ -381,6 +381,11 @@ static inline int scsi_is_wlun(unsigned int lun)
|
|||
#define DID_IMM_RETRY 0x0c /* Retry without decrementing retry count */
|
||||
#define DID_REQUEUE 0x0d /* Requeue command (no immediate retry) also
|
||||
* without decrementing the retry count */
|
||||
#define DID_TRANSPORT_DISRUPTED 0x0e /* Transport error disrupted execution
|
||||
* and the driver blocked the port to
|
||||
* recover the link. Transport class will
|
||||
* retry or fail IO */
|
||||
#define DID_TRANSPORT_FAILFAST 0x0f /* Transport class fastfailed the io */
|
||||
#define DRIVER_OK 0x00 /* Driver status */
|
||||
|
||||
/*
|
||||
|
|
@ -426,6 +431,7 @@ static inline int scsi_is_wlun(unsigned int lun)
|
|||
#define SCSI_MLQUEUE_HOST_BUSY 0x1055
|
||||
#define SCSI_MLQUEUE_DEVICE_BUSY 0x1056
|
||||
#define SCSI_MLQUEUE_EH_RETRY 0x1057
|
||||
#define SCSI_MLQUEUE_TARGET_BUSY 0x1058
|
||||
|
||||
/*
|
||||
* Use these to separate status msg and our bytes
|
||||
|
|
|
|||
|
|
@ -238,6 +238,16 @@ struct scsi_target {
|
|||
* for the device at a time. */
|
||||
unsigned int pdt_1f_for_no_lun; /* PDT = 0x1f */
|
||||
/* means no lun present */
|
||||
/* commands actually active on LLD. protected by host lock. */
|
||||
unsigned int target_busy;
|
||||
/*
|
||||
* LLDs should set this in the slave_alloc host template callout.
|
||||
* If set to zero then there is not limit.
|
||||
*/
|
||||
unsigned int can_queue;
|
||||
unsigned int target_blocked;
|
||||
unsigned int max_target_blocked;
|
||||
#define SCSI_DEFAULT_TARGET_BLOCKED 3
|
||||
|
||||
char scsi_level;
|
||||
struct execute_work ew;
|
||||
|
|
|
|||
|
|
@ -357,6 +357,7 @@ struct fc_rport { /* aka fc_starget_attrs */
|
|||
/* bit field values for struct fc_rport "flags" field: */
|
||||
#define FC_RPORT_DEVLOSS_PENDING 0x01
|
||||
#define FC_RPORT_SCAN_PENDING 0x02
|
||||
#define FC_RPORT_FAST_FAIL_TIMEDOUT 0x03
|
||||
|
||||
#define dev_to_rport(d) \
|
||||
container_of(d, struct fc_rport, dev)
|
||||
|
|
@ -678,12 +679,15 @@ fc_remote_port_chkready(struct fc_rport *rport)
|
|||
if (rport->roles & FC_PORT_ROLE_FCP_TARGET)
|
||||
result = 0;
|
||||
else if (rport->flags & FC_RPORT_DEVLOSS_PENDING)
|
||||
result = DID_IMM_RETRY << 16;
|
||||
result = DID_TRANSPORT_DISRUPTED << 16;
|
||||
else
|
||||
result = DID_NO_CONNECT << 16;
|
||||
break;
|
||||
case FC_PORTSTATE_BLOCKED:
|
||||
result = DID_IMM_RETRY << 16;
|
||||
if (rport->flags & FC_RPORT_FAST_FAIL_TIMEDOUT)
|
||||
result = DID_TRANSPORT_FAILFAST << 16;
|
||||
else
|
||||
result = DID_TRANSPORT_DISRUPTED << 16;
|
||||
break;
|
||||
default:
|
||||
result = DID_NO_CONNECT << 16;
|
||||
|
|
|
|||
|
|
@ -135,7 +135,8 @@ extern int iscsi_unregister_transport(struct iscsi_transport *tt);
|
|||
/*
|
||||
* control plane upcalls
|
||||
*/
|
||||
extern void iscsi_conn_error(struct iscsi_cls_conn *conn, enum iscsi_err error);
|
||||
extern void iscsi_conn_error_event(struct iscsi_cls_conn *conn,
|
||||
enum iscsi_err error);
|
||||
extern int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
|
||||
char *data, uint32_t data_size);
|
||||
|
||||
|
|
@ -207,7 +208,7 @@ extern void iscsi_host_for_each_session(struct Scsi_Host *shost,
|
|||
struct iscsi_endpoint {
|
||||
void *dd_data; /* LLD private data */
|
||||
struct device dev;
|
||||
unsigned int id;
|
||||
uint64_t id;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue