Commit ed26cfec authored by Vasu Dev's avatar Vasu Dev Committed by James Bottomley

[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: default avatarVasu Dev <vasu.dev@intel.com>
Tested-by: default avatarRoss Brattain <ross.b.brattain@intel.com>
Signed-off-by: default avatarYi Zou <yi.zou@intel.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent 5c609ff9
...@@ -759,7 +759,6 @@ static void fc_fcp_recv(struct fc_seq *seq, struct fc_frame *fp, void *arg) ...@@ -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, ...@@ -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 { ...@@ -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 { ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment