aac_fib_complete(fibptr);
                return 0;
        }
-       scsicmd->SCp.phase = AAC_OWNER_MIDLEVEL;
+       aac_priv(scsicmd)->owner = AAC_OWNER_MIDLEVEL;
        device = scsicmd->device;
        if (unlikely(!device)) {
                dprintk((KERN_WARNING "aac_valid_context: scsi device corrupt\n"));
 
        aac_fib_init(cmd_fibcontext);
        dinfo = (struct aac_get_name *) fib_data(cmd_fibcontext);
-       scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+       aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
 
        dinfo->command = cpu_to_le32(VM_ContainerConfig);
        dinfo->type = cpu_to_le32(CT_READ_NAME);
 {
        struct fsa_dev_info *fsa_dev_ptr;
        int (*callback)(struct scsi_cmnd *);
-       struct scsi_cmnd * scsicmd = (struct scsi_cmnd *)context;
+       struct scsi_cmnd *scsicmd = context;
+       struct aac_cmd_priv *cmd_priv = aac_priv(scsicmd);
        int i;
 
 
        if (!aac_valid_context(scsicmd, fibptr))
                return;
 
-       scsicmd->SCp.Status = 0;
+       cmd_priv->status = 0;
        fsa_dev_ptr = fibptr->dev->fsa_dev;
        if (fsa_dev_ptr) {
                struct aac_mount * dresp = (struct aac_mount *) fib_data(fibptr);
                }
                if ((fsa_dev_ptr->valid & 1) == 0)
                        fsa_dev_ptr->valid = 0;
-               scsicmd->SCp.Status = le32_to_cpu(dresp->count);
+               cmd_priv->status = le32_to_cpu(dresp->count);
        }
        aac_fib_complete(fibptr);
        aac_fib_free(fibptr);
-       callback = (int (*)(struct scsi_cmnd *))(scsicmd->SCp.ptr);
-       scsicmd->SCp.ptr = NULL;
+       callback = cmd_priv->callback;
+       cmd_priv->callback = NULL;
        (*callback)(scsicmd);
        return;
 }
 
        dinfo->count = cpu_to_le32(scmd_id(scsicmd));
        dinfo->type = cpu_to_le32(FT_FILESYS);
-       scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+       aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
 
        status = aac_fib_send(ContainerCommand,
                          fibptr,
 
 static int _aac_probe_container(struct scsi_cmnd * scsicmd, int (*callback)(struct scsi_cmnd *))
 {
+       struct aac_cmd_priv *cmd_priv = aac_priv(scsicmd);
        struct fib * fibptr;
        int status = -ENOMEM;
 
 
                dinfo->count = cpu_to_le32(scmd_id(scsicmd));
                dinfo->type = cpu_to_le32(FT_FILESYS);
-               scsicmd->SCp.ptr = (char *)callback;
-               scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+               cmd_priv->callback = callback;
+               cmd_priv->owner = AAC_OWNER_FIRMWARE;
 
                status = aac_fib_send(ContainerCommand,
                          fibptr,
                        return 0;
 
                if (status < 0) {
-                       scsicmd->SCp.ptr = NULL;
+                       cmd_priv->callback = NULL;
                        aac_fib_complete(fibptr);
                        aac_fib_free(fibptr);
                }
 int aac_probe_container(struct aac_dev *dev, int cid)
 {
        struct scsi_cmnd *scsicmd = kzalloc(sizeof(*scsicmd), GFP_KERNEL);
+       struct aac_cmd_priv *cmd_priv = aac_priv(scsicmd);
        struct scsi_device *scsidev = kzalloc(sizeof(*scsidev), GFP_KERNEL);
        int status;
 
                while (scsicmd->device == scsidev)
                        schedule();
        kfree(scsidev);
-       status = scsicmd->SCp.Status;
+       status = cmd_priv->status;
        kfree(scsicmd);
        return status;
 }
        dinfo->command = cpu_to_le32(VM_ContainerConfig);
        dinfo->type = cpu_to_le32(CT_CID_TO_32BITS_UID);
        dinfo->cid = cpu_to_le32(scmd_id(scsicmd));
-       scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+       aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
 
        status = aac_fib_send(ContainerCommand,
                  cmd_fibcontext,
         *      Alocate and initialize a Fib
         */
        cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd);
-       scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+       aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
        status = aac_adapter_read(cmd_fibcontext, scsicmd, lba, count);
 
        /*
         *      Allocate and initialize a Fib then setup a BlockWrite command
         */
        cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd);
-       scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+       aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
        status = aac_adapter_write(cmd_fibcontext, scsicmd, lba, count, fua);
 
        /*
        synchronizecmd->cid = cpu_to_le32(scmd_id(scsicmd));
        synchronizecmd->count =
             cpu_to_le32(sizeof(((struct aac_synchronize_reply *)NULL)->data));
-       scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+       aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
 
        /*
         *      Now send the Fib to the adapter
        pmcmd->cid = cpu_to_le32(sdev_id(sdev));
        pmcmd->parm = (scsicmd->cmnd[1] & 1) ?
                cpu_to_le32(CT_PM_UNIT_IMMEDIATE) : 0;
-       scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+       aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
 
        /*
         *      Now send the Fib to the adapter
        aac_fib_complete(fibptr);
 
        if (fibptr->flags & FIB_CONTEXT_FLAG_NATIVE_HBA_TMF)
-               scsicmd->SCp.sent_command = 1;
+               aac_priv(scsicmd)->sent_command = 1;
        else
                aac_scsi_done(scsicmd);
 }
         *      Allocate and initialize a Fib then setup a BlockWrite command
         */
        cmd_fibcontext = aac_fib_alloc_tag(dev, scsicmd);
-       scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+       aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
        status = aac_adapter_scsi(cmd_fibcontext, scsicmd);
 
        /*
        if (!cmd_fibcontext)
                return -1;
 
-       scsicmd->SCp.phase = AAC_OWNER_FIRMWARE;
+       aac_priv(scsicmd)->owner = AAC_OWNER_FIRMWARE;
        status = aac_adapter_hba(cmd_fibcontext, scsicmd);
 
        /*
 
 #include <linux/completion.h>
 #include <linux/pci.h>
 #include <scsi/scsi_host.h>
+#include <scsi/scsi_cmnd.h>
 
 /*------------------------------------------------------------------------------
  *              D E F I N E S
        cancel_delayed_work_sync(&dev->src_reinit_aif_worker);
 }
 
-/* SCp.phase values */
-#define AAC_OWNER_MIDLEVEL     0x101
-#define AAC_OWNER_LOWLEVEL     0x102
-#define AAC_OWNER_ERROR_HANDLER        0x103
-#define AAC_OWNER_FIRMWARE     0x106
+enum aac_cmd_owner {
+       AAC_OWNER_MIDLEVEL      = 0x101,
+       AAC_OWNER_LOWLEVEL      = 0x102,
+       AAC_OWNER_ERROR_HANDLER = 0x103,
+       AAC_OWNER_FIRMWARE      = 0x106,
+};
+
+struct aac_cmd_priv {
+       int                     (*callback)(struct scsi_cmnd *);
+       int                     status;
+       enum aac_cmd_owner      owner;
+       bool                    sent_command;
+};
+
+static inline struct aac_cmd_priv *aac_priv(struct scsi_cmnd *cmd)
+{
+       return scsi_cmd_priv(cmd);
+}
 
 void aac_safw_rescan_worker(struct work_struct *work);
 void aac_src_reinit_aif_worker(struct work_struct *work);
 
 static int aac_queuecommand(struct Scsi_Host *shost,
                            struct scsi_cmnd *cmd)
 {
-       int r = 0;
-       cmd->SCp.phase = AAC_OWNER_LOWLEVEL;
-       r = (aac_scsi_cmd(cmd) ? FAILED : 0);
-       return r;
+       aac_priv(cmd)->owner = AAC_OWNER_LOWLEVEL;
+
+       return aac_scsi_cmd(cmd) ? FAILED : 0;
 }
 
 /**
 {
        struct fib_count_data *fib_count = data;
 
-       switch (scmnd->SCp.phase) {
+       switch (aac_priv(scmnd)->owner) {
        case AAC_OWNER_FIRMWARE:
                fib_count->fwcnt++;
                break;
 
 static int aac_eh_abort(struct scsi_cmnd* cmd)
 {
+       struct aac_cmd_priv *cmd_priv = aac_priv(cmd);
        struct scsi_device * dev = cmd->device;
        struct Scsi_Host * host = dev->host;
        struct aac_dev * aac = (struct aac_dev *)host->hostdata;
                tmf->error_length = cpu_to_le32(FW_ERROR_BUFFER_SIZE);
 
                fib->hbacmd_size = sizeof(*tmf);
-               cmd->SCp.sent_command = 0;
+               cmd_priv->sent_command = 0;
 
                status = aac_hba_send(HBA_IU_TYPE_SCSI_TM_REQ, fib,
                                  (fib_callback) aac_hba_callback,
                }
                /* Wait up to 15 secs for completion */
                for (count = 0; count < 15; ++count) {
-                       if (cmd->SCp.sent_command) {
+                       if (cmd_priv->sent_command) {
                                ret = SUCCESS;
                                break;
                        }
                                (fib->callback_data == cmd)) {
                                        fib->flags |=
                                                FIB_CONTEXT_FLAG_TIMED_OUT;
-                                       cmd->SCp.phase =
+                                       cmd_priv->owner =
                                                AAC_OWNER_ERROR_HANDLER;
                                        ret = SUCCESS;
                                }
                                        (command->device == cmd->device)) {
                                        fib->flags |=
                                                FIB_CONTEXT_FLAG_TIMED_OUT;
-                                       command->SCp.phase =
+                                       aac_priv(command)->owner =
                                                AAC_OWNER_ERROR_HANDLER;
                                        if (command == cmd)
                                                ret = SUCCESS;
                        if (bus >= AAC_MAX_BUSES || cid >= AAC_MAX_TARGETS ||
                            info->devtype != AAC_DEVTYPE_NATIVE_RAW) {
                                fib->flags |= FIB_CONTEXT_FLAG_EH_RESET;
-                               cmd->SCp.phase = AAC_OWNER_ERROR_HANDLER;
+                               aac_priv(cmd)->owner = AAC_OWNER_ERROR_HANDLER;
                        }
                }
        }
 #endif
        .emulated                       = 1,
        .no_write_same                  = 1,
+       .cmd_size                       = sizeof(struct aac_cmd_priv),
 };
 
 static void __aac_shutdown(struct aac_dev * aac)