# HG changeset patch # User Keir Fraser # Date 1244108032 -3600 # Node ID 2fd85e9a1e21854264c3d3d593749db42b6fc03f # Parent a045aa7c4a77b76dd5be30b0e879087eea57e490 blktap2: fix blkback/blktap2 interaction 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 linux-2.6-git: * adjust XEN_BLKBACK_PAGEMAP dependencies * rebase against git-fbbc8527 (wean off of use of the BlkBack pageflag) Signed-off-by: Daniel Stodden diff -r a045aa7c4a77 -r 2fd85e9a1e21 drivers/xen/Kconfig --- a/drivers/xen/Kconfig Thu Jun 04 10:32:57 2009 +0100 +++ b/drivers/xen/Kconfig Thu Jun 04 10:33:52 2009 +0100 @@ -127,6 +127,11 @@ depends on XEN_PCIDEV_BACKEND +config XEN_BLKBACK_PAGEMAP + tristate + depends on XEN_BLKDEV_BACKEND != n && XEN_BLKDEV_TAP != n + default XEN_BLKDEV_BACKEND || XEN_BLKDEV_TAP + config XENFS tristate "Xen filesystem" depends on XEN diff -r a045aa7c4a77 -r 2fd85e9a1e21 drivers/xen/blkback/Makefile --- a/drivers/xen/blkback/Makefile Thu Jun 04 10:32:57 2009 +0100 +++ b/drivers/xen/blkback/Makefile Thu Jun 04 10:33:52 2009 +0100 @@ -1,3 +1,4 @@ obj-$(CONFIG_XEN_BLKDEV_BACKEND) := xen-blkback.o +obj-$(CONFIG_XEN_BLKBACK_PAGEMAP) += blkback-pagemap.o -xen-blkback-y := blkback.o xenbus.o interface.o vbd.o blkback-pagemap.o +xen-blkback-y := blkback.o xenbus.o interface.o vbd.o diff -r a045aa7c4a77 -r 2fd85e9a1e21 drivers/xen/blkback/blkback-pagemap.c --- a/drivers/xen/blkback/blkback-pagemap.c Thu Jun 04 10:32:57 2009 +0100 +++ b/drivers/xen/blkback/blkback-pagemap.c Thu Jun 04 10:33:52 2009 +0100 @@ -1,4 +1,4 @@ -#include "common.h" +#include #include "blkback-pagemap.h" static int blkback_pagemap_size; @@ -22,6 +22,7 @@ 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 @@ entry->busid = busid; entry->gref = gref; } +EXPORT_SYMBOL_GPL(blkback_pagemap_set); void blkback_pagemap_clear(struct page *page) @@ -66,6 +68,7 @@ memset(entry, 0, sizeof(*entry)); } +EXPORT_SYMBOL_GPL(blkback_pagemap_clear); struct blkback_pagemap blkback_pagemap_read(struct page *page) @@ -88,6 +91,8 @@ } EXPORT_SYMBOL(blkback_pagemap_read); +MODULE_LICENSE("Dual BSD/GPL"); + int blkback_pagemap_contains_page(struct page *page) { diff -r a045aa7c4a77 -r 2fd85e9a1e21 drivers/xen/blkback/blkback-pagemap.h --- a/drivers/xen/blkback/blkback-pagemap.h Thu Jun 04 10:32:57 2009 +0100 +++ b/drivers/xen/blkback/blkback-pagemap.h Thu Jun 04 10:33:52 2009 +0100 @@ -1,6 +1,7 @@ #ifndef _BLKBACK_PAGEMAP_H_ #define _BLKBACK_PAGEMAP_H_ +#include #include #include @@ -13,8 +14,23 @@ 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 *); - int blkback_pagemap_contains_page(struct page *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) {} +#define blkback_pagemap_read(_page) ({ BUG(); (struct blkback_pagemap){0}; }) +static inline int blkback_pagemap_contains_page(struct page *page) { return 0; } + +#endif /* CONFIG_XEN_BLKBACK_PAGEMAP */ + #endif diff -r a045aa7c4a77 -r 2fd85e9a1e21 drivers/xen/blkback/common.h --- a/drivers/xen/blkback/common.h Thu Jun 04 10:32:57 2009 +0100 +++ b/drivers/xen/blkback/common.h Thu Jun 04 10:33:52 2009 +0100 @@ -136,8 +136,4 @@ 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__ */ diff -r a045aa7c4a77 -r 2fd85e9a1e21 drivers/xen/blktap/device.c --- a/drivers/xen/blktap/device.c Thu Jun 04 10:32:57 2009 +0100 +++ b/drivers/xen/blktap/device.c Thu Jun 04 10:33:52 2009 +0100 @@ -17,14 +17,7 @@ #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(); -#define blkback_pagemap_contains_page(page) 0 -#endif #if 0 #define DPRINTK_IOCTL(_f, _a...) printk(KERN_ALERT _f, ## _a)