[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:

committed by
James Bottomley

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;
|
goto out;
|
||||||
if (fc_fcp_lock_pkt(fsp))
|
if (fc_fcp_lock_pkt(fsp))
|
||||||
goto out;
|
goto out;
|
||||||
fsp->last_pkt_time = jiffies;
|
|
||||||
|
|
||||||
if (fh->fh_type == FC_TYPE_BLS) {
|
if (fh->fh_type == FC_TYPE_BLS) {
|
||||||
fc_fcp_abts_resp(fsp, fp);
|
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;
|
rc = -1;
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
fsp->last_pkt_time = jiffies;
|
|
||||||
fsp->seq_ptr = seq;
|
fsp->seq_ptr = seq;
|
||||||
fc_fcp_pkt_hold(fsp); /* hold for fc_fcp_pkt_destroy */
|
fc_fcp_pkt_hold(fsp); /* hold for fc_fcp_pkt_destroy */
|
||||||
|
|
||||||
|
@@ -281,9 +281,6 @@ struct fc_seq_els_data {
|
|||||||
* @timer: The command timer
|
* @timer: The command timer
|
||||||
* @tm_done: Completion indicator
|
* @tm_done: Completion indicator
|
||||||
* @wait_for_comp: Indicator to wait for completion of the I/O (in jiffies)
|
* @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
|
* @data_len: The length of the data
|
||||||
* @cdb_cmd: The CDB command
|
* @cdb_cmd: The CDB command
|
||||||
* @xfer_len: The transfer length
|
* @xfer_len: The transfer length
|
||||||
@@ -304,50 +301,46 @@ struct fc_seq_els_data {
|
|||||||
* @recov_seq: The sequence for REC or SRR
|
* @recov_seq: The sequence for REC or SRR
|
||||||
*/
|
*/
|
||||||
struct fc_fcp_pkt {
|
struct fc_fcp_pkt {
|
||||||
/* Housekeeping information */
|
|
||||||
struct fc_lport *lp;
|
|
||||||
u16 state;
|
|
||||||
atomic_t ref_cnt;
|
|
||||||
spinlock_t scsi_pkt_lock;
|
spinlock_t scsi_pkt_lock;
|
||||||
|
atomic_t ref_cnt;
|
||||||
|
|
||||||
|
/* SCSI command and data transfer information */
|
||||||
|
u32 data_len;
|
||||||
|
|
||||||
/* SCSI I/O related information */
|
/* SCSI I/O related information */
|
||||||
struct scsi_cmnd *cmd;
|
struct scsi_cmnd *cmd;
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
|
|
||||||
/* Timeout related information */
|
/* Housekeeping information */
|
||||||
struct timer_list timer;
|
struct fc_lport *lp;
|
||||||
struct completion tm_done;
|
u8 state;
|
||||||
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;
|
|
||||||
|
|
||||||
/* SCSI/FCP return status */
|
/* SCSI/FCP return status */
|
||||||
u32 io_status;
|
|
||||||
u8 cdb_status;
|
u8 cdb_status;
|
||||||
u8 status_code;
|
u8 status_code;
|
||||||
u8 scsi_comp_flags;
|
u8 scsi_comp_flags;
|
||||||
|
u32 io_status;
|
||||||
u32 req_flags;
|
u32 req_flags;
|
||||||
u32 scsi_resid;
|
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 */
|
/* Associated structures */
|
||||||
struct fc_rport *rport;
|
struct fc_rport *rport;
|
||||||
struct fc_seq *seq_ptr;
|
struct fc_seq *seq_ptr;
|
||||||
|
|
||||||
/* Error Processing information */
|
/* Timeout/error related information */
|
||||||
u8 recov_retry;
|
struct timer_list timer;
|
||||||
|
int wait_for_comp;
|
||||||
|
u32 recov_retry;
|
||||||
struct fc_seq *recov_seq;
|
struct fc_seq *recov_seq;
|
||||||
};
|
struct completion tm_done;
|
||||||
|
} ____cacheline_aligned_in_smp;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structure and function definitions for managing Fibre Channel Exchanges
|
* Structure and function definitions for managing Fibre Channel Exchanges
|
||||||
|
Reference in New Issue
Block a user