[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:
Vasu Dev 2011-09-27 21:37:57 -07:00 committed by James Bottomley
parent 5c609ff937
commit ed26cfece6
2 changed files with 21 additions and 30 deletions

View File

@ -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 */

View File

@ -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