[SCSI] libfc: cache align struct fc_fcp_pkt fields
Vasu Dev [Wed, 28 Sep 2011 04:37:57 +0000 (21:37 -0700)]
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>

drivers/scsi/libfc/fc_fcp.c
include/scsi/libfc.h

index afb63c8..f725d28 100644 (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 */
 
index 7d96829..05e2583 100644 (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