that requests are restarted in the order they were queue. This may happen
 if the driver needs to use blk_queue_invalidate_tags().
 
-Tagging also defines a new request flag, REQ_QUEUED. This is set whenever
-a request is currently tagged. You should not use this flag directly,
-blk_rq_tagged(rq) is the portable way to do so.
-
 3.3 I/O Submission
 
 The routine submit_bio() is used to submit a single io. Higher level i/o
 
        blk_clear_rq_complete(rq);
        trace_block_rq_requeue(q, rq);
 
-       if (blk_rq_tagged(rq))
+       if (rq->cmd_flags & REQ_QUEUED)
                blk_queue_end_tag(q, rq);
 
        BUG_ON(blk_queued_rq(rq));
  */
 void blk_finish_request(struct request *req, int error)
 {
-       if (blk_rq_tagged(req))
+       if (req->cmd_flags & REQ_QUEUED)
                blk_queue_end_tag(req->q, req);
 
        BUG_ON(blk_queued_rq(req));
 
         */
        if(NCR_700_get_depth(SCp->device) != 0
           && (!(hostdata->tag_negotiated & (1<<scmd_id(SCp)))
-              || !blk_rq_tagged(SCp->request))) {
+              || !(SCp->flags & SCMD_TAGGED))) {
                CDEBUG(KERN_ERR, SCp, "has non zero depth %d\n",
                       NCR_700_get_depth(SCp->device));
                return SCSI_MLQUEUE_DEVICE_BUSY;
        printk("53c700: scsi%d, command ", SCp->device->host->host_no);
        scsi_print_command(SCp);
 #endif
-       if(blk_rq_tagged(SCp->request)
+       if ((SCp->flags & SCMD_TAGGED)
           && (hostdata->tag_negotiated &(1<<scmd_id(SCp))) == 0
           && NCR_700_get_tag_neg_state(SCp->device) == NCR_700_START_TAG_NEGOTIATION) {
                scmd_printk(KERN_ERR, SCp, "Enabling Tag Command Queuing\n");
         *
         * FIXME: This will royally screw up on multiple LUN devices
         * */
-       if(!blk_rq_tagged(SCp->request)
+       if (!(SCp->flags & SCMD_TAGGED)
           && (hostdata->tag_negotiated &(1<<scmd_id(SCp)))) {
                scmd_printk(KERN_INFO, SCp, "Disabling Tag Command Queuing\n");
                hostdata->tag_negotiated &= ~(1<<scmd_id(SCp));
 
         * we are storing a full busy target *lun*
         * table in SCB space.
         */
-       if (!blk_rq_tagged(cmd->request)
+       if (!(cmd->flags & SCMD_TAGGED)
            && (ahc->features & AHC_SCB_BTT) == 0) {
                int target_offset;
 
 
                 * we add the dev to the starved list so it eventually gets
                 * a run when a tag is freed.
                 */
-               if (blk_queue_tagged(q) && !blk_rq_tagged(req)) {
+               if (blk_queue_tagged(q) && !(req->cmd_flags & REQ_QUEUED)) {
                        spin_lock_irq(shost->host_lock);
                        if (list_empty(&sdev->starved_entry))
                                list_add_tail(&sdev->starved_entry,
 
                if (!scsi_host_queue_ready(q, shost, sdev))
                        goto host_not_ready;
+       
+               if (sdev->simple_tags)
+                       cmd->flags |= SCMD_TAGGED;
+               else
+                       cmd->flags &= ~SCMD_TAGGED;
 
                /*
                 * Finally, initialize any error handling parameters, and set up
                blk_mq_start_request(req);
        }
 
-       if (blk_queue_tagged(q))
-               req->cmd_flags |= REQ_QUEUED;
+       if (sdev->simple_tags)
+               cmd->flags |= SCMD_TAGGED;
        else
-               req->cmd_flags &= ~REQ_QUEUED;
+               cmd->flags &= ~SCMD_TAGGED;
 
        scsi_init_cmd_errh(cmd);
        cmd->scsi_done = scsi_mq_done;
 
 {
        int tag;
 
-       if (blk_rq_tagged(cmnd->request))
+       if (cmnd->flags & SCMD_TAGGED)
                tag = cmnd->request->tag + 2;
        else
                tag = 1;
 
 /*
  * tag stuff
  */
-#define blk_rq_tagged(rq)              ((rq)->cmd_flags & REQ_QUEUED)
 extern int blk_queue_start_tag(struct request_queue *, struct request *);
 extern struct request *blk_queue_find_tag(struct request_queue *, int);
 extern void blk_queue_end_tag(struct request_queue *, struct request *);
 
        volatile int phase;
 };
 
+/* for scmd->flags */
+#define SCMD_TAGGED            (1 << 0)
+
 struct scsi_cmnd {
        struct scsi_device *device;
        struct list_head list;  /* scsi_cmnd participates in queue lists */
                                         * to be at an address < 16Mb). */
 
        int result;             /* Status code from lower level driver */
+       int flags;              /* Command flags */
 
        unsigned char tag;      /* SCSI-II queued command tag */
 };
 
  **/
 static inline int scsi_populate_tag_msg(struct scsi_cmnd *cmd, char *msg)
 {
-        struct request *req = cmd->request;
-
-        if (blk_rq_tagged(req)) {
+        if (cmd->flags & SCMD_TAGGED) {
                *msg++ = MSG_SIMPLE_TAG;
-               *msg++ = req->tag;
+               *msg++ = cmd->request->tag;
                return 2;
        }