int err = 0;
        int status = BLKIF_RSP_OKAY;
        struct block_device *bdev = blkif->vbd.bdev;
+       unsigned long secure;
 
        blkif->st_ds_req++;
 
        xen_blkif_get(blkif);
-       if (blkif->blk_backend_type == BLKIF_BACKEND_PHY ||
-           blkif->blk_backend_type == BLKIF_BACKEND_FILE) {
-               unsigned long secure = (blkif->vbd.discard_secure &&
-                       (req->u.discard.flag & BLKIF_DISCARD_SECURE)) ?
-                       BLKDEV_DISCARD_SECURE : 0;
-               err = blkdev_issue_discard(bdev,
-                               req->u.discard.sector_number,
-                               req->u.discard.nr_sectors,
-                               GFP_KERNEL, secure);
-       } else
-               err = -EOPNOTSUPP;
+       secure = (blkif->vbd.discard_secure &&
+                (req->u.discard.flag & BLKIF_DISCARD_SECURE)) ?
+                BLKDEV_DISCARD_SECURE : 0;
+
+       err = blkdev_issue_discard(bdev, req->u.discard.sector_number,
+                                  req->u.discard.nr_sectors,
+                                  GFP_KERNEL, secure);
 
        if (err == -EOPNOTSUPP) {
                pr_debug(DRV_PFX "discard op failed, not supported\n");
 
 {
        struct xenbus_device *dev = be->dev;
        struct xen_blkif *blkif = be->blkif;
-       char *type;
        int err;
        int state = 0;
+       struct block_device *bdev = be->blkif->vbd.bdev;
+       struct request_queue *q = bdev_get_queue(bdev);
 
-       type = xenbus_read(XBT_NIL, dev->nodename, "type", NULL);
-       if (!IS_ERR(type)) {
-               if (strncmp(type, "file", 4) == 0) {
-                       state = 1;
-                       blkif->blk_backend_type = BLKIF_BACKEND_FILE;
+       if (blk_queue_discard(q)) {
+               err = xenbus_printf(xbt, dev->nodename,
+                       "discard-granularity", "%u",
+                       q->limits.discard_granularity);
+               if (err) {
+                       xenbus_dev_fatal(dev, err,
+                               "writing discard-granularity");
+                       goto out;
+               }
+               err = xenbus_printf(xbt, dev->nodename,
+                       "discard-alignment", "%u",
+                       q->limits.discard_alignment);
+               if (err) {
+                       xenbus_dev_fatal(dev, err,
+                               "writing discard-alignment");
+                       goto out;
                }
-               if (strncmp(type, "phy", 3) == 0) {
-                       struct block_device *bdev = be->blkif->vbd.bdev;
-                       struct request_queue *q = bdev_get_queue(bdev);
-                       if (blk_queue_discard(q)) {
-                               err = xenbus_printf(xbt, dev->nodename,
-                                       "discard-granularity", "%u",
-                                       q->limits.discard_granularity);
-                               if (err) {
-                                       xenbus_dev_fatal(dev, err,
-                                               "writing discard-granularity");
-                                       goto kfree;
-                               }
-                               err = xenbus_printf(xbt, dev->nodename,
-                                       "discard-alignment", "%u",
-                                       q->limits.discard_alignment);
-                               if (err) {
-                                       xenbus_dev_fatal(dev, err,
-                                               "writing discard-alignment");
-                                       goto kfree;
-                               }
-                               state = 1;
-                               blkif->blk_backend_type = BLKIF_BACKEND_PHY;
-                       }
-                       /* Optional. */
-                       err = xenbus_printf(xbt, dev->nodename,
-                               "discard-secure", "%d",
-                               blkif->vbd.discard_secure);
-                       if (err) {
-                               xenbus_dev_fatal(dev, err,
+               state = 1;
+               /* Optional. */
+               err = xenbus_printf(xbt, dev->nodename,
+                                   "discard-secure", "%d",
+                                   blkif->vbd.discard_secure);
+               if (err) {
+                       xenbus_dev_fatal(dev, err,
                                        "writting discard-secure");
-                               goto kfree;
-                       }
+                       goto out;
                }
-       } else {
-               err = PTR_ERR(type);
-               xenbus_dev_fatal(dev, err, "reading type");
-               goto out;
        }
-
        err = xenbus_printf(xbt, dev->nodename, "feature-discard",
                            "%d", state);
        if (err)
                xenbus_dev_fatal(dev, err, "writing feature-discard");
-kfree:
-       kfree(type);
 out:
        return err;
 }