Merge branch 'master' [vanilla Linus master] into libata-dev.git/upstream
Two bits were appended to the end of the bitfield list in struct scsi_device. Resolve that conflict by including both bits. Conflicts: include/scsi/scsi_device.h
This commit is contained in:
@@ -224,7 +224,7 @@ struct fc_rport_priv {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct fcoe_dev_stats - fcoe stats structure
|
||||
* struct fc_stats - fc stats structure
|
||||
* @SecondsSinceLastReset: Seconds since the last reset
|
||||
* @TxFrames: Number of transmitted frames
|
||||
* @TxWords: Number of transmitted words
|
||||
@@ -232,6 +232,9 @@ struct fc_rport_priv {
|
||||
* @RxWords: Number of received words
|
||||
* @ErrorFrames: Number of received error frames
|
||||
* @DumpedFrames: Number of dumped frames
|
||||
* @FcpPktAllocFails: Number of fcp packet allocation failures
|
||||
* @FcpPktAborts: Number of fcp packet aborts
|
||||
* @FcpFrameAllocFails: Number of fcp frame allocation failures
|
||||
* @LinkFailureCount: Number of link failures
|
||||
* @LossOfSignalCount: Number for signal losses
|
||||
* @InvalidTxWordCount: Number of invalid transmitted words
|
||||
@@ -244,7 +247,7 @@ struct fc_rport_priv {
|
||||
* @VLinkFailureCount: Number of virtual link failures
|
||||
* @MissDiscAdvCount: Number of missing FIP discovery advertisement
|
||||
*/
|
||||
struct fcoe_dev_stats {
|
||||
struct fc_stats {
|
||||
u64 SecondsSinceLastReset;
|
||||
u64 TxFrames;
|
||||
u64 TxWords;
|
||||
@@ -252,6 +255,9 @@ struct fcoe_dev_stats {
|
||||
u64 RxWords;
|
||||
u64 ErrorFrames;
|
||||
u64 DumpedFrames;
|
||||
u64 FcpPktAllocFails;
|
||||
u64 FcpPktAborts;
|
||||
u64 FcpFrameAllocFails;
|
||||
u64 LinkFailureCount;
|
||||
u64 LossOfSignalCount;
|
||||
u64 InvalidTxWordCount;
|
||||
@@ -510,7 +516,7 @@ struct libfc_function_template {
|
||||
int (*ddp_done)(struct fc_lport *, u16);
|
||||
/*
|
||||
* Sets up the DDP context for a given exchange id on the given
|
||||
* scatterlist if LLD supports DDP for FCoE target.
|
||||
* scatterlist if LLD supports DDP for target.
|
||||
*
|
||||
* STATUS: OPTIONAL
|
||||
*/
|
||||
@@ -817,8 +823,7 @@ enum fc_lport_event {
|
||||
* @state: Identifies the state
|
||||
* @boot_time: Timestamp indicating when the local port came online
|
||||
* @host_stats: SCSI host statistics
|
||||
* @dev_stats: FCoE device stats (TODO: libfc should not be
|
||||
* FCoE aware)
|
||||
* @stats: FC local port stats (TODO separate libfc LLD stats)
|
||||
* @retry_count: Number of retries in the current state
|
||||
* @port_id: FC Port ID
|
||||
* @wwpn: World Wide Port Name
|
||||
@@ -867,7 +872,7 @@ struct fc_lport {
|
||||
enum fc_lport_state state;
|
||||
unsigned long boot_time;
|
||||
struct fc_host_statistics host_stats;
|
||||
struct fcoe_dev_stats __percpu *dev_stats;
|
||||
struct fc_stats __percpu *stats;
|
||||
u8 retry_count;
|
||||
|
||||
/* Fabric information */
|
||||
@@ -980,8 +985,8 @@ static inline void fc_lport_state_enter(struct fc_lport *lport,
|
||||
*/
|
||||
static inline int fc_lport_init_stats(struct fc_lport *lport)
|
||||
{
|
||||
lport->dev_stats = alloc_percpu(struct fcoe_dev_stats);
|
||||
if (!lport->dev_stats)
|
||||
lport->stats = alloc_percpu(struct fc_stats);
|
||||
if (!lport->stats)
|
||||
return -ENOMEM;
|
||||
return 0;
|
||||
}
|
||||
@@ -992,7 +997,7 @@ static inline int fc_lport_init_stats(struct fc_lport *lport)
|
||||
*/
|
||||
static inline void fc_lport_free_stats(struct fc_lport *lport)
|
||||
{
|
||||
free_percpu(lport->dev_stats);
|
||||
free_percpu(lport->stats);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1116,6 +1121,7 @@ void fc_fill_hdr(struct fc_frame *, const struct fc_frame *,
|
||||
* EXCHANGE MANAGER LAYER
|
||||
*****************************/
|
||||
int fc_exch_init(struct fc_lport *);
|
||||
void fc_exch_update_stats(struct fc_lport *lport);
|
||||
struct fc_exch_mgr_anchor *fc_exch_mgr_add(struct fc_lport *,
|
||||
struct fc_exch_mgr *,
|
||||
bool (*match)(struct fc_frame *));
|
||||
|
@@ -163,20 +163,29 @@ enum ata_command_set {
|
||||
ATAPI_COMMAND_SET = 1,
|
||||
};
|
||||
|
||||
#define ATA_RESP_FIS_SIZE 24
|
||||
|
||||
struct sata_device {
|
||||
enum ata_command_set command_set;
|
||||
struct smp_resp rps_resp; /* report_phy_sata_resp */
|
||||
u8 port_no; /* port number, if this is a PM (Port) */
|
||||
struct list_head children; /* PM Ports if this is a PM */
|
||||
|
||||
struct ata_port *ap;
|
||||
struct ata_host ata_host;
|
||||
struct ata_taskfile tf;
|
||||
u8 fis[ATA_RESP_FIS_SIZE];
|
||||
};
|
||||
|
||||
struct ssp_device {
|
||||
struct list_head eh_list_node; /* pending a user requested eh action */
|
||||
struct scsi_lun reset_lun;
|
||||
};
|
||||
|
||||
enum {
|
||||
SAS_DEV_GONE,
|
||||
SAS_DEV_DESTROY,
|
||||
SAS_DEV_EH_PENDING,
|
||||
SAS_DEV_LU_RESET,
|
||||
SAS_DEV_RESET,
|
||||
};
|
||||
|
||||
struct domain_device {
|
||||
@@ -210,6 +219,7 @@ struct domain_device {
|
||||
union {
|
||||
struct expander_device ex_dev;
|
||||
struct sata_device sata_dev; /* STP & directly attached */
|
||||
struct ssp_device ssp_dev;
|
||||
};
|
||||
|
||||
void *lldd_dev;
|
||||
@@ -384,7 +394,10 @@ struct sas_ha_struct {
|
||||
struct list_head defer_q; /* work queued while draining */
|
||||
struct mutex drain_mutex;
|
||||
unsigned long state;
|
||||
spinlock_t state_lock;
|
||||
spinlock_t lock;
|
||||
int eh_active;
|
||||
wait_queue_head_t eh_wait_q;
|
||||
struct list_head eh_dev_q;
|
||||
|
||||
struct mutex disco_mutex;
|
||||
|
||||
@@ -537,7 +550,7 @@ enum exec_status {
|
||||
*/
|
||||
struct ata_task_resp {
|
||||
u16 frame_len;
|
||||
u8 ending_fis[24]; /* dev to host or data-in */
|
||||
u8 ending_fis[ATA_RESP_FIS_SIZE]; /* dev to host or data-in */
|
||||
};
|
||||
|
||||
#define SAS_STATUS_BUF_SIZE 96
|
||||
@@ -600,10 +613,6 @@ struct sas_task {
|
||||
|
||||
enum sas_protocol task_proto;
|
||||
|
||||
/* Used by the discovery code. */
|
||||
struct timer_list timer;
|
||||
struct completion completion;
|
||||
|
||||
union {
|
||||
struct sas_ata_task ata_task;
|
||||
struct sas_smp_task smp_task;
|
||||
@@ -620,8 +629,15 @@ struct sas_task {
|
||||
|
||||
void *lldd_task; /* for use by LLDDs */
|
||||
void *uldd_task;
|
||||
struct sas_task_slow *slow_task;
|
||||
};
|
||||
|
||||
struct work_struct abort_work;
|
||||
struct sas_task_slow {
|
||||
/* standard/extra infrastructure for slow path commands (SMP and
|
||||
* internal lldd commands
|
||||
*/
|
||||
struct timer_list timer;
|
||||
struct completion completion;
|
||||
};
|
||||
|
||||
#define SAS_TASK_STATE_PENDING 1
|
||||
@@ -631,6 +647,7 @@ struct sas_task {
|
||||
#define SAS_TASK_AT_INITIATOR 16
|
||||
|
||||
extern struct sas_task *sas_alloc_task(gfp_t flags);
|
||||
extern struct sas_task *sas_alloc_slow_task(gfp_t flags);
|
||||
extern void sas_free_task(struct sas_task *task);
|
||||
|
||||
struct sas_domain_function_template {
|
||||
@@ -706,6 +723,7 @@ void sas_unregister_dev(struct asd_sas_port *port, struct domain_device *);
|
||||
void sas_init_dev(struct domain_device *);
|
||||
|
||||
void sas_task_abort(struct sas_task *);
|
||||
int sas_eh_abort_handler(struct scsi_cmnd *cmd);
|
||||
int sas_eh_device_reset_handler(struct scsi_cmnd *cmd);
|
||||
int sas_eh_bus_reset_handler(struct scsi_cmnd *cmd);
|
||||
|
||||
|
@@ -45,6 +45,7 @@ void sas_ata_eh(struct Scsi_Host *shost, struct list_head *work_q,
|
||||
void sas_ata_schedule_reset(struct domain_device *dev);
|
||||
void sas_ata_wait_eh(struct domain_device *dev);
|
||||
void sas_probe_sata(struct asd_sas_port *port);
|
||||
void sas_ata_end_eh(struct ata_port *ap);
|
||||
#else
|
||||
|
||||
|
||||
@@ -85,6 +86,10 @@ static inline int sas_get_ata_info(struct domain_device *dev, struct ex_phy *phy
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void sas_ata_end_eh(struct ata_port *ap)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SAS_ATA_H_ */
|
||||
|
@@ -161,6 +161,8 @@ struct scsi_cmnd;
|
||||
#define MI_REPORT_PRIORITY 0x0e
|
||||
#define MI_REPORT_TIMESTAMP 0x0f
|
||||
#define MI_MANAGEMENT_PROTOCOL_IN 0x10
|
||||
/* value for MI_REPORT_TARGET_PGS ext header */
|
||||
#define MI_EXT_HDR_PARAM_FMT 0x20
|
||||
/* values for maintenance out */
|
||||
#define MO_SET_IDENTIFYING_INFORMATION 0x06
|
||||
#define MO_SET_TARGET_PGS 0x0a
|
||||
|
@@ -134,10 +134,16 @@ struct scsi_cmnd {
|
||||
|
||||
static inline struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd)
|
||||
{
|
||||
struct scsi_driver **sdp;
|
||||
|
||||
if (!cmd->request->rq_disk)
|
||||
return NULL;
|
||||
|
||||
return *(struct scsi_driver **)cmd->request->rq_disk->private_data;
|
||||
sdp = (struct scsi_driver **)cmd->request->rq_disk->private_data;
|
||||
if (!sdp)
|
||||
return NULL;
|
||||
|
||||
return *sdp;
|
||||
}
|
||||
|
||||
extern struct scsi_cmnd *scsi_get_command(struct scsi_device *, gfp_t);
|
||||
|
@@ -42,6 +42,7 @@ enum scsi_device_state {
|
||||
* originate in the mid-layer) */
|
||||
SDEV_OFFLINE, /* Device offlined (by error handling or
|
||||
* user request */
|
||||
SDEV_TRANSPORT_OFFLINE, /* Offlined by transport class error handler */
|
||||
SDEV_BLOCK, /* Device blocked by scsi lld. No
|
||||
* scsi commands from user or midlayer
|
||||
* should be issued to the scsi
|
||||
@@ -154,6 +155,7 @@ struct scsi_device {
|
||||
unsigned try_rc_10_first:1; /* Try READ_CAPACACITY_10 first */
|
||||
unsigned is_visible:1; /* is the device visible in sysfs */
|
||||
unsigned can_power_off:1; /* Device supports runtime power off */
|
||||
unsigned wce_default_on:1; /* Cache is ON by default */
|
||||
|
||||
DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
|
||||
struct list_head event_list; /* asserted events */
|
||||
@@ -374,7 +376,7 @@ extern void scsi_scan_target(struct device *parent, unsigned int channel,
|
||||
unsigned int id, unsigned int lun, int rescan);
|
||||
extern void scsi_target_reap(struct scsi_target *);
|
||||
extern void scsi_target_block(struct device *);
|
||||
extern void scsi_target_unblock(struct device *);
|
||||
extern void scsi_target_unblock(struct device *, enum scsi_device_state);
|
||||
extern void scsi_remove_target(struct device *);
|
||||
extern void int_to_scsilun(unsigned int, struct scsi_lun *);
|
||||
extern int scsilun_to_int(struct scsi_lun *);
|
||||
@@ -422,6 +424,7 @@ static inline unsigned int sdev_id(struct scsi_device *sdev)
|
||||
static inline int scsi_device_online(struct scsi_device *sdev)
|
||||
{
|
||||
return (sdev->sdev_state != SDEV_OFFLINE &&
|
||||
sdev->sdev_state != SDEV_TRANSPORT_OFFLINE &&
|
||||
sdev->sdev_state != SDEV_DEL);
|
||||
}
|
||||
static inline int scsi_device_blocked(struct scsi_device *sdev)
|
||||
|
@@ -60,6 +60,7 @@ extern int scsi_dh_activate(struct request_queue *, activate_complete, void *);
|
||||
extern int scsi_dh_handler_exist(const char *);
|
||||
extern int scsi_dh_attach(struct request_queue *, const char *);
|
||||
extern void scsi_dh_detach(struct request_queue *);
|
||||
extern const char *scsi_dh_attached_handler_name(struct request_queue *, gfp_t);
|
||||
extern int scsi_dh_set_params(struct request_queue *, const char *);
|
||||
#else
|
||||
static inline int scsi_dh_activate(struct request_queue *req,
|
||||
@@ -80,6 +81,11 @@ static inline void scsi_dh_detach(struct request_queue *q)
|
||||
{
|
||||
return;
|
||||
}
|
||||
static inline const char *scsi_dh_attached_handler_name(struct request_queue *q,
|
||||
gfp_t gfp)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
static inline int scsi_dh_set_params(struct request_queue *req, const char *params)
|
||||
{
|
||||
return -SCSI_DH_NOSYS;
|
||||
|
@@ -1,11 +0,0 @@
|
||||
#ifndef _SCSI_SCSI_SCAN_H
|
||||
#define _SCSI_SCSI_SCAN_H
|
||||
|
||||
#ifdef CONFIG_SCSI
|
||||
/* drivers/scsi/scsi_scan.c */
|
||||
extern int scsi_complete_async_scans(void);
|
||||
#else
|
||||
static inline int scsi_complete_async_scans(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#endif /* _SCSI_SCSI_SCAN_H */
|
@@ -426,6 +426,18 @@ struct fc_host_statistics {
|
||||
u64 fcp_control_requests;
|
||||
u64 fcp_input_megabytes;
|
||||
u64 fcp_output_megabytes;
|
||||
u64 fcp_packet_alloc_failures; /* fcp packet allocation failures */
|
||||
u64 fcp_packet_aborts; /* fcp packet aborted */
|
||||
u64 fcp_frame_alloc_failures; /* fcp frame allocation failures */
|
||||
|
||||
/* fc exches statistics */
|
||||
u64 fc_no_free_exch; /* no free exch memory */
|
||||
u64 fc_no_free_exch_xid; /* no free exch id */
|
||||
u64 fc_xid_not_found; /* exch not found for a response */
|
||||
u64 fc_xid_busy; /* exch exist for new a request */
|
||||
u64 fc_seq_not_found; /* seq is not found for exchange */
|
||||
u64 fc_non_bls_resp; /* a non BLS response frame with
|
||||
a sequence responder in new exch */
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user