[SCSI] libfc: cache align struct fc_fcp_pkt fields
Re-arrange its fields to avoid padding and have better cacheline alignments. Removed not used start_time, end_time and last_pkt_time fields. This all reduced this struct size to 448 from 480 and that also reduced one cacheline on x86_64 beside eliminating 8 pads. However kept logical fields together. Signed-off-by: Vasu Dev <vasu.dev@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Yi Zou <yi.zou@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
5c609ff937
commit
ed26cfece6
|
@ -759,7 +759,6 @@ static void fc_fcp_recv(struct fc_seq *seq, struct fc_frame *fp, void *arg)
|
|||
goto out;
|
||||
if (fc_fcp_lock_pkt(fsp))
|
||||
goto out;
|
||||
fsp->last_pkt_time = jiffies;
|
||||
|
||||
if (fh->fh_type == FC_TYPE_BLS) {
|
||||
fc_fcp_abts_resp(fsp, fp);
|
||||
|
@ -1148,7 +1147,6 @@ static int fc_fcp_cmd_send(struct fc_lport *lport, struct fc_fcp_pkt *fsp,
|
|||
rc = -1;
|
||||
goto unlock;
|
||||
}
|
||||
fsp->last_pkt_time = jiffies;
|
||||
fsp->seq_ptr = seq;
|
||||
fc_fcp_pkt_hold(fsp); /* hold for fc_fcp_pkt_destroy */
|
||||
|
||||
|
|
|
@ -281,9 +281,6 @@ struct fc_seq_els_data {
|
|||
* @timer: The command timer
|
||||
* @tm_done: Completion indicator
|
||||
* @wait_for_comp: Indicator to wait for completion of the I/O (in jiffies)
|
||||
* @start_time: Timestamp indicating the start of the I/O (in jiffies)
|
||||
* @end_time: Timestamp indicating the end of the I/O (in jiffies)
|
||||
* @last_pkt_time: Timestamp of the last frame received (in jiffies)
|
||||
* @data_len: The length of the data
|
||||
* @cdb_cmd: The CDB command
|
||||
* @xfer_len: The transfer length
|
||||
|
@ -304,50 +301,46 @@ struct fc_seq_els_data {
|
|||
* @recov_seq: The sequence for REC or SRR
|
||||
*/
|
||||
struct fc_fcp_pkt {
|
||||
/* Housekeeping information */
|
||||
struct fc_lport *lp;
|
||||
u16 state;
|
||||
atomic_t ref_cnt;
|
||||
spinlock_t scsi_pkt_lock;
|
||||
atomic_t ref_cnt;
|
||||
|
||||
/* SCSI command and data transfer information */
|
||||
u32 data_len;
|
||||
|
||||
/* SCSI I/O related information */
|
||||
struct scsi_cmnd *cmd;
|
||||
struct list_head list;
|
||||
|
||||
/* Timeout related information */
|
||||
struct timer_list timer;
|
||||
struct completion tm_done;
|
||||
int wait_for_comp;
|
||||
unsigned long start_time;
|
||||
unsigned long end_time;
|
||||
unsigned long last_pkt_time;
|
||||
|
||||
/* SCSI command and data transfer information */
|
||||
u32 data_len;
|
||||
|
||||
/* Transport related veriables */
|
||||
struct fcp_cmnd cdb_cmd;
|
||||
size_t xfer_len;
|
||||
u16 xfer_ddp;
|
||||
u32 xfer_contig_end;
|
||||
u16 max_payload;
|
||||
/* Housekeeping information */
|
||||
struct fc_lport *lp;
|
||||
u8 state;
|
||||
|
||||
/* SCSI/FCP return status */
|
||||
u32 io_status;
|
||||
u8 cdb_status;
|
||||
u8 status_code;
|
||||
u8 scsi_comp_flags;
|
||||
u32 io_status;
|
||||
u32 req_flags;
|
||||
u32 scsi_resid;
|
||||
|
||||
/* Transport related veriables */
|
||||
size_t xfer_len;
|
||||
struct fcp_cmnd cdb_cmd;
|
||||
u32 xfer_contig_end;
|
||||
u16 max_payload;
|
||||
u16 xfer_ddp;
|
||||
|
||||
/* Associated structures */
|
||||
struct fc_rport *rport;
|
||||
struct fc_seq *seq_ptr;
|
||||
|
||||
/* Error Processing information */
|
||||
u8 recov_retry;
|
||||
/* Timeout/error related information */
|
||||
struct timer_list timer;
|
||||
int wait_for_comp;
|
||||
u32 recov_retry;
|
||||
struct fc_seq *recov_seq;
|
||||
};
|
||||
struct completion tm_done;
|
||||
} ____cacheline_aligned_in_smp;
|
||||
|
||||
/*
|
||||
* Structure and function definitions for managing Fibre Channel Exchanges
|
||||
|
|
Loading…
Reference in New Issue