&bio);
        if (!ret && bio) {
                ret = submit_bio_wait(bio);
-               if (ret == -EOPNOTSUPP)
+               if (ret == -EOPNOTSUPP && !(flags & BLKDEV_DISCARD_ZERO))
                        ret = 0;
 +              bio_put(bio);
        }
        blk_finish_plug(&plug);
  
                }
        }
  
 -      if (bio)
 +      if (bio) {
                ret = submit_bio_wait(bio);
-       return ret != -EOPNOTSUPP ? ret : 0;
 +              bio_put(bio);
 +      }
+       return ret;
  }
  EXPORT_SYMBOL(blkdev_issue_write_same);
  
 
  
        dev_dbg(&dev->dev, "blkfront_resume: %s\n", dev->nodename);
  
-                           shadow[j].request->cmd_flags & (REQ_FUA | REQ_SECURE)) {
-                           
 +      bio_list_init(&info->bio_list);
 +      INIT_LIST_HEAD(&info->requests);
 +      for (i = 0; i < info->nr_rings; i++) {
 +              struct blkfront_ring_info *rinfo = &info->rinfo[i];
 +              struct bio_list merge_bio;
 +              struct blk_shadow *shadow = rinfo->shadow;
 +
 +              for (j = 0; j < BLK_RING_SIZE(info); j++) {
 +                      /* Not in use? */
 +                      if (!shadow[j].request)
 +                              continue;
 +
 +                      /*
 +                       * Get the bios in the request so we can re-queue them.
 +                       */
 +                      if (req_op(shadow[i].request) == REQ_OP_FLUSH ||
 +                          req_op(shadow[i].request) == REQ_OP_DISCARD ||
++                          req_op(shadow[i].request) == REQ_OP_SECURE_ERASE ||
++                          shadow[j].request->cmd_flags & REQ_FUA) {
 +                              /*
 +                               * Flush operations don't contain bios, so
 +                               * we need to requeue the whole request
++                               *
++                               * XXX: but this doesn't make any sense for a
++                               * write with the FUA flag set..
 +                               */
 +                              list_add(&shadow[j].request->queuelist, &info->requests);
 +                              continue;
 +                      }
 +                      merge_bio.head = shadow[j].request->bio;
 +                      merge_bio.tail = shadow[j].request->biotail;
 +                      bio_list_merge(&info->bio_list, &merge_bio);
 +                      shadow[j].request->bio = NULL;
 +                      blk_mq_end_request(shadow[j].request, 0);
 +              }
 +      }
 +
        blkif_free(info, info->connected == BLKIF_STATE_CONNECTED);
  
        err = negotiate_mq(info);
 
  
  static void nvme_scan_ns_sequential(struct nvme_ctrl *ctrl, unsigned nn)
  {
-       struct nvme_ns *ns, *next;
        unsigned i;
  
 -      lockdep_assert_held(&ctrl->namespaces_mutex);
 -
        for (i = 1; i <= nn; i++)
                nvme_validate_ns(ctrl, i);
  
 
        dev_info->dcssblk_queue = blk_alloc_queue(GFP_KERNEL);
        dev_info->gd->queue = dev_info->dcssblk_queue;
        dev_info->gd->private_data = dev_info;
-       dev_info->gd->driverfs_dev = &dev_info->dev;
        blk_queue_make_request(dev_info->dcssblk_queue, dcssblk_make_request);
        blk_queue_logical_block_size(dev_info->dcssblk_queue, 4096);
 +      queue_flag_set_unlocked(QUEUE_FLAG_DAX, dev_info->dcssblk_queue);
  
        seg_byte_size = (dev_info->end - dev_info->start + 1);
        set_capacity(dev_info->gd, seg_byte_size >> 9); // size in sectors
 
  #define blk_queue_stackable(q)        \
        test_bit(QUEUE_FLAG_STACKABLE, &(q)->queue_flags)
  #define blk_queue_discard(q)  test_bit(QUEUE_FLAG_DISCARD, &(q)->queue_flags)
- #define blk_queue_secdiscard(q)       (blk_queue_discard(q) && \
-       test_bit(QUEUE_FLAG_SECDISCARD, &(q)->queue_flags))
+ #define blk_queue_secure_erase(q) \
+       (test_bit(QUEUE_FLAG_SECERASE, &(q)->queue_flags))
 +#define blk_queue_dax(q)      test_bit(QUEUE_FLAG_DAX, &(q)->queue_flags)
  
  #define blk_noretry_request(rq) \
        ((rq)->cmd_flags & (REQ_FAILFAST_DEV|REQ_FAILFAST_TRANSPORT| \