]> xenbits.xensource.com Git - legacy/linux-2.6.18-xen.git/commitdiff
linux: fix blkback/blktap2 interaction
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 4 Jun 2009 09:33:52 +0000 (10:33 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 4 Jun 2009 09:33:52 +0000 (10:33 +0100)
blkback's page map code needs to be accessible to both blkback and
blktap2, irrespective of whether either or both are modules. The
most immediate solution is to break it out into a separate, library-
like component that doesn't need building if either of the two
consumers is configured off, and that gets built as a module if both
consumers are modules.

Also fix the dummy implementation of blkback_pagemap_read(), since
using BUG() there doesn't compile.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
drivers/xen/Kconfig
drivers/xen/blkback/Makefile
drivers/xen/blkback/blkback-pagemap.c
drivers/xen/blkback/blkback-pagemap.h
drivers/xen/blkback/common.h
drivers/xen/blktap2/device.c

index e9558ddc71db0305ed5891b0bd6a58f91a9e51cd..a153b5a486b6e947ebff87aa5e7d8be5906462fb 100644 (file)
@@ -75,6 +75,11 @@ config XEN_BLKDEV_TAP2
           as files, in memory, or on other hosts across the network.  This 
          driver can safely coexist with the existing blockback driver.
 
+config XEN_BLKBACK_PAGEMAP
+       tristate
+       depends on XEN_BLKDEV_BACKEND != n && XEN_BLKDEV_TAP2 != n
+       default XEN_BLKDEV_BACKEND || XEN_BLKDEV_TAP2
+
 config XEN_NETDEV_BACKEND
        tristate "Network-device backend driver"
         depends on XEN_BACKEND && NET
index 466cdf0d2381d6f8f2f493b0b3a9223c9afda742..48e3e22111eecbc88af6435618b2931ea7dc394c 100644 (file)
@@ -1,3 +1,4 @@
 obj-$(CONFIG_XEN_BLKDEV_BACKEND) := blkbk.o
+obj-$(CONFIG_XEN_BLKBACK_PAGEMAP) += blkback-pagemap.o
 
-blkbk-y        := blkback.o xenbus.o interface.o vbd.o blkback-pagemap.o
+blkbk-y        := blkback.o xenbus.o interface.o vbd.o
index 77550b4ac2889f97f34107481df86c764b088054..f7d16d892293513a473e09564812526ebfc10757 100644 (file)
@@ -1,4 +1,4 @@
-#include "common.h"
+#include <linux/module.h>
 #include "blkback-pagemap.h"
 
 static int blkback_pagemap_size;
@@ -22,6 +22,7 @@ blkback_pagemap_init(int pages)
        blkback_pagemap_size = pages;
        return 0;
 }
+EXPORT_SYMBOL_GPL(blkback_pagemap_init);
 
 void
 blkback_pagemap_set(int idx, struct page *page,
@@ -46,6 +47,7 @@ blkback_pagemap_set(int idx, struct page *page,
        entry->busid = busid;
        entry->gref  = gref;
 }
+EXPORT_SYMBOL_GPL(blkback_pagemap_set);
 
 void
 blkback_pagemap_clear(struct page *page)
@@ -67,6 +69,7 @@ blkback_pagemap_clear(struct page *page)
 
        memset(entry, 0, sizeof(*entry));
 }
+EXPORT_SYMBOL_GPL(blkback_pagemap_clear);
 
 struct blkback_pagemap
 blkback_pagemap_read(struct page *page)
@@ -89,3 +92,5 @@ blkback_pagemap_read(struct page *page)
        return *entry;
 }
 EXPORT_SYMBOL(blkback_pagemap_read);
+
+MODULE_LICENSE("Dual BSD/GPL");
index 5e6809fcd6149e13db7be0bcd7c65dbffa2a2162..0becf22d0f45dffdacdbe596e7d091c16521c387 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef _BLKBACK_PAGEMAP_H_
 #define _BLKBACK_PAGEMAP_H_
 
+#include <linux/mm.h>
 #include <xen/interface/xen.h>
 #include <xen/interface/grant_table.h>
 
@@ -12,6 +13,25 @@ struct blkback_pagemap {
        grant_ref_t      gref;
 };
 
+#if defined(CONFIG_XEN_BLKBACK_PAGEMAP) || defined(CONFIG_XEN_BLKBACK_PAGEMAP_MODULE)
+
+int blkback_pagemap_init(int);
+void blkback_pagemap_set(int, struct page *, domid_t, busid_t, grant_ref_t);
+void blkback_pagemap_clear(struct page *);
 struct blkback_pagemap blkback_pagemap_read(struct page *);
 
+#else /* CONFIG_XEN_BLKBACK_PAGEMAP */
+
+static inline int blkback_pagemap_init(int pages) { return 0; }
+static inline void blkback_pagemap_set(int idx, struct page *page, domid_t dom,
+                                      busid_t bus, grant_ref_t gnt) {}
+static inline void blkback_pagemap_clear(struct page *page) {}
+static inline struct blkback_pagemap blkback_pagemap_read(struct page *page)
+{
+       BUG();
+       return (struct blkback_pagemap){-1, -1, -1};
+}
+
+#endif /* CONFIG_XEN_BLKBACK_PAGEMAP */
+
 #endif
index 709b7a9c4d7d85274ac982f06a4bf55a1c792378..6dff5e7612977d708cd9b6a85d42f0d2d522c335 100644 (file)
@@ -138,8 +138,4 @@ int blkif_schedule(void *arg);
 int blkback_barrier(struct xenbus_transaction xbt,
                    struct backend_info *be, int state);
 
-int blkback_pagemap_init(int);
-void blkback_pagemap_set(int, struct page *, domid_t, busid_t, grant_ref_t);
-void blkback_pagemap_clear(struct page *);
-
 #endif /* __BLKIF__BACKEND__COMMON_H__ */
index 2137b7db585a3505a01697583d683ec04ff4668c..afbdcd545dc83a7c42ca03f390b43c1bcb614c81 100644 (file)
 
 #include "blktap.h"
 
-#if defined(CONFIG_XEN_BLKDEV_BACKEND) || \
-    (defined(CONFIG_XEN_BLKDEV_BACKEND_MODULE) && defined(MODULE))
 #include "../blkback/blkback-pagemap.h"
-#else
-struct blkback_pagemap { };
-#define blkback_pagemap_read(page) BUG();
-#endif
 
 #if 0
 #define DPRINTK_IOCTL(_f, _a...) printk(KERN_ALERT _f, ## _a)