]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
xen/blkback: Make optional features be really optional.
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Wed, 14 Mar 2012 17:04:00 +0000 (13:04 -0400)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Thu, 19 Apr 2012 21:54:22 +0000 (17:54 -0400)
They were using the xenbus_dev_fatal() function which would
change the state of the connection immediately. Which is not
what we want when we advertise optional features.

So make 'feature-discard','feature-barrier','feature-flush-cache'
optional.

[upstream git commit 3389bb8]
Suggested-by: Jan Beulich <JBeulich@suse.com>
[v1: Made the discard function void and static]
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Conflicts:

drivers/block/xen-blkback/xenbus.c

drivers/block/xen-blkback/xenbus.c

index 8be3d31fc32738c968f6a401bf2d26ab23933ac5..6c8dde8ce31674167e53546e6c0e06eb8de9afbe 100644 (file)
@@ -381,12 +381,12 @@ int xen_blkbk_flush_diskcache(struct xenbus_transaction xbt,
        err = xenbus_printf(xbt, dev->nodename, "feature-flush-cache",
                            "%d", state);
        if (err)
-               xenbus_dev_fatal(dev, err, "writing feature-flush-cache");
+               dev_warn(&dev->dev, "writing feature-flush-cache (%d)", err);
 
        return err;
 }
 
-int xen_blkbk_discard(struct xenbus_transaction xbt, struct backend_info *be)
+static void xen_blkbk_discard(struct xenbus_transaction xbt, struct backend_info *be)
 {
        struct xenbus_device *dev = be->dev;
        struct xen_blkif *blkif = be->blkif;
@@ -408,16 +408,14 @@ int xen_blkbk_discard(struct xenbus_transaction xbt, struct backend_info *be)
                                        "discard-granularity", "%u",
                                        q->limits.discard_granularity);
                                if (err) {
-                                       xenbus_dev_fatal(dev, err,
-                                               "writing discard-granularity");
+                                       dev_warn(&dev->dev, "writing discard-granularity (%d)", err);
                                        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");
+                                       dev_warn(&dev->dev, "writing discard-alignment (%d)", err);
                                        goto kfree;
                                }
                                state = 1;
@@ -428,25 +426,22 @@ int xen_blkbk_discard(struct xenbus_transaction xbt, struct backend_info *be)
                                "discard-secure", "%d",
                                blkif->vbd.discard_secure);
                        if (err) {
-                               xenbus_dev_fatal(dev, err,
-                                       "writting discard-secure");
+                               dev_warn(dev-dev, "writing discard-secure (%d)", err);
                                goto kfree;
                        }
                }
        } else {
                err = PTR_ERR(type);
-               xenbus_dev_fatal(dev, err, "reading type");
-               goto out;
+               dev_warn(&dev->dev, "reading type (%d)", err);
+               return;
        }
 
        err = xenbus_printf(xbt, dev->nodename, "feature-discard",
                            "%d", state);
        if (err)
-               xenbus_dev_fatal(dev, err, "writing feature-discard");
+               dev_warn(&dev->dev, "writing feature-discard (%d)", err);
 kfree:
        kfree(type);
-out:
-       return err;
 }
 int xen_blkbk_barrier(struct xenbus_transaction xbt,
                      struct backend_info *be, int state)
@@ -457,7 +452,7 @@ int xen_blkbk_barrier(struct xenbus_transaction xbt,
        err = xenbus_printf(xbt, dev->nodename, "feature-barrier",
                            "%d", state);
        if (err)
-               xenbus_dev_fatal(dev, err, "writing feature-barrier");
+               dev_warn(&dev->dev, "writing feature-barrier (%d)", err);
 
        return err;
 }
@@ -689,14 +684,12 @@ again:
                return;
        }
 
-       err = xen_blkbk_flush_diskcache(xbt, be, be->blkif->vbd.flush_support);
-       if (err)
-               goto abort;
+       /* If we can't advertise it is OK. */
+       xen_blkbk_flush_diskcache(xbt, be, be->blkif->vbd.flush_support);
 
-       err = xen_blkbk_discard(xbt, be);
+       xen_blkbk_discard(xbt, be);
 
-       /* If we can't advertise it is OK. */
-       err = xen_blkbk_barrier(xbt, be, be->blkif->vbd.flush_support);
+       xen_blkbk_barrier(xbt, be, be->blkif->vbd.flush_support);
 
        err = xenbus_printf(xbt, dev->nodename, "sectors", "%llu",
                            (unsigned long long)vbd_sz(&be->blkif->vbd));