#define FC_SRB_READ            (1 << 1)
 #define FC_SRB_WRITE           (1 << 0)
 
-/*
- * The SCp.ptr should be tested and set under the scsi_pkt_queue lock
- */
-#define CMD_SP(Cmnd)               ((struct fc_fcp_pkt *)(Cmnd)->SCp.ptr)
-#define CMD_ENTRY_STATUS(Cmnd)     ((Cmnd)->SCp.have_data_in)
-#define CMD_COMPL_STATUS(Cmnd)     ((Cmnd)->SCp.this_residual)
-#define CMD_SCSI_STATUS(Cmnd)      ((Cmnd)->SCp.Status)
-#define CMD_RESID_LEN(Cmnd)        ((Cmnd)->SCp.buffers_residual)
+static struct libfc_cmd_priv *libfc_priv(struct scsi_cmnd *cmd)
+{
+       return scsi_cmd_priv(cmd);
+}
 
 /**
  * struct fc_fcp_internal - FCP layer internal data
        unsigned long flags;
        int rc;
 
-       fsp->cmd->SCp.ptr = (char *)fsp;
+       libfc_priv(fsp->cmd)->fsp = fsp;
        fsp->cdb_cmd.fc_dl = htonl(fsp->data_len);
        fsp->cdb_cmd.fc_flags = fsp->req_flags & ~FCP_CFL_LEN_MASK;
 
        rc = lport->tt.fcp_cmd_send(lport, fsp, fc_fcp_recv);
        if (unlikely(rc)) {
                spin_lock_irqsave(&si->scsi_queue_lock, flags);
-               fsp->cmd->SCp.ptr = NULL;
+               libfc_priv(fsp->cmd)->fsp = NULL;
                list_del(&fsp->list);
                spin_unlock_irqrestore(&si->scsi_queue_lock, flags);
        }
                fc_fcp_can_queue_ramp_up(lport);
 
        sc_cmd = fsp->cmd;
-       CMD_SCSI_STATUS(sc_cmd) = fsp->cdb_status;
+       libfc_priv(sc_cmd)->status = fsp->cdb_status;
        switch (fsp->status_code) {
        case FC_COMPLETE:
                if (fsp->cdb_status == 0) {
                         */
                        sc_cmd->result = DID_OK << 16;
                        if (fsp->scsi_resid)
-                               CMD_RESID_LEN(sc_cmd) = fsp->scsi_resid;
+                               libfc_priv(sc_cmd)->resid_len = fsp->scsi_resid;
                } else {
                        /*
                         * transport level I/O was ok but scsi
                         */
                        FC_FCP_DBG(fsp, "Returning DID_ERROR to scsi-ml "
                                   "due to FC_DATA_UNDRUN (scsi)\n");
-                       CMD_RESID_LEN(sc_cmd) = fsp->scsi_resid;
+                       libfc_priv(sc_cmd)->resid_len = fsp->scsi_resid;
                        sc_cmd->result = (DID_ERROR << 16) | fsp->cdb_status;
                }
                break;
 
        spin_lock_irqsave(&si->scsi_queue_lock, flags);
        list_del(&fsp->list);
-       sc_cmd->SCp.ptr = NULL;
+       libfc_priv(sc_cmd)->fsp = NULL;
        spin_unlock_irqrestore(&si->scsi_queue_lock, flags);
        scsi_done(sc_cmd);
 
 
        si = fc_get_scsi_internal(lport);
        spin_lock_irqsave(&si->scsi_queue_lock, flags);
-       fsp = CMD_SP(sc_cmd);
+       fsp = libfc_priv(sc_cmd)->fsp;
        if (!fsp) {
                /* command completed while scsi eh was setting up */
                spin_unlock_irqrestore(&si->scsi_queue_lock, flags);