Blob Blame History Raw
Subject: adjust xen build after addition of pv-ops' blktap2
From: jbeulich@novell.com
Patch-mainline: n/a

--- head.orig/drivers/xen/Kconfig	2012-02-08 11:27:15.000000000 +0100
+++ head/drivers/xen/Kconfig	2011-11-03 11:58:46.000000000 +0100
@@ -76,6 +76,18 @@ 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.
 
+choice
+	prompt "Select blktap2 driver"
+	depends on XEN_BLKDEV_TAP2=y
+
+config XEN_BLKDEV_TAP2_LEGACY
+	bool "legacy"
+
+config XEN_BLKDEV_TAP2_NEW
+	bool "'new'"
+
+endchoice
+
 config XEN_BLKBACK_PAGEMAP
 	tristate
 	depends on XEN_BLKDEV_BACKEND != n && XEN_BLKDEV_TAP2 != n
--- head.orig/drivers/xen/Makefile	2011-01-31 15:14:12.000000000 +0100
+++ head/drivers/xen/Makefile	2011-10-19 10:32:29.000000000 +0200
@@ -8,7 +8,9 @@ obj-y	+= util.o
 obj-$(CONFIG_XEN_BALLOON)		+= balloon/
 obj-$(CONFIG_XEN_BLKDEV_BACKEND)	+= blkback/
 obj-$(CONFIG_XEN_BLKDEV_TAP)		+= blktap/
-obj-$(CONFIG_XEN_BLKDEV_TAP2)		+= blktap2/
+obj-$(filter m,$(CONFIG_XEN_BLKDEV_TAP2)) += blktap2/ blktap2-new/
+obj-$(CONFIG_XEN_BLKDEV_TAP2_LEGACY)	+= blktap2/
+obj-$(CONFIG_XEN_BLKDEV_TAP2_NEW)	+= blktap2-new/
 obj-$(CONFIG_XEN_NETDEV_BACKEND)	+= netback/
 obj-$(CONFIG_XEN_TPMDEV_BACKEND)	+= tpmback/
 obj-$(CONFIG_XEN_BLKDEV_FRONTEND)	+= blkfront/
--- head.orig/drivers/xen/blktap2-new/Makefile	2011-02-24 13:49:49.000000000 +0100
+++ head/drivers/xen/blktap2-new/Makefile	2011-09-12 12:26:01.000000000 +0200
@@ -1,3 +1,4 @@
-obj-$(CONFIG_XEN_BLKDEV_TAP) := blktap.o
+obj-$(CONFIG_XEN_BLKDEV_TAP2) := xen-blktap.o
 
-blktap-objs := control.o ring.o device.o request.o sysfs.o
+xen-blktap-y := control.o ring.o device.o request.o
+xen-blktap-$(CONFIG_SYSFS) += sysfs.o
--- head.orig/drivers/xen/blktap2-new/blktap.h	2011-02-24 13:49:49.000000000 +0100
+++ head/drivers/xen/blktap2-new/blktap.h	2012-05-31 10:58:55.000000000 +0200
@@ -6,6 +6,7 @@
 #include <linux/cdev.h>
 #include <linux/init.h>
 #include <linux/scatterlist.h>
+#include <xen/barrier.h>
 #include <xen/blkif.h>
 
 extern int blktap_debug_level;
@@ -24,6 +25,8 @@ extern int blktap_device_major;
 #define BTWARN(_f, _a...)            BTPRINTK(0, KERN_WARNING, 0, _f, ##_a)
 #define BTERR(_f, _a...)             BTPRINTK(0, KERN_ERR, 0, _f, ##_a)
 
+#define BLKTAP2_DEV_DIR "xen/blktap-2/"
+
 #define MAX_BLKTAP_DEVICE            1024
 
 #define BLKTAP_DEVICE                4
@@ -181,10 +184,17 @@ void blktap_ring_unmap_request(struct bl
 void blktap_ring_set_message(struct blktap *, int);
 void blktap_ring_kick_user(struct blktap *);
 
+#ifdef CONFIG_SYSFS
 int blktap_sysfs_init(void);
 void blktap_sysfs_exit(void);
 int blktap_sysfs_create(struct blktap *);
 void blktap_sysfs_destroy(struct blktap *);
+#else
+static inline int blktap_sysfs_init(void) { return 0; }
+static inline void blktap_sysfs_exit(void) {}
+static inline int blktap_sysfs_create(struct blktap *tapdev) { return 0; }
+static inline void blktap_sysfs_destroy(struct blktap *tapdev) {}
+#endif
 
 int blktap_device_init(void);
 void blktap_device_exit(void);
--- head.orig/drivers/xen/blktap2-new/control.c	2011-02-24 13:49:49.000000000 +0100
+++ head/drivers/xen/blktap2-new/control.c	2011-02-24 15:14:41.000000000 +0100
@@ -164,7 +164,7 @@ blktap_control_ioctl(struct inode *inode
 	return -ENOIOCTLCMD;
 }
 
-static struct file_operations blktap_control_file_operations = {
+static const struct file_operations blktap_control_file_operations = {
 	.owner    = THIS_MODULE,
 	.ioctl    = blktap_control_ioctl,
 };
@@ -172,6 +172,7 @@ static struct file_operations blktap_con
 static struct miscdevice blktap_control = {
 	.minor    = MISC_DYNAMIC_MINOR,
 	.name     = "blktap-control",
+	.nodename = BLKTAP2_DEV_DIR "control",
 	.fops     = &blktap_control_file_operations,
 };
 
--- head.orig/drivers/xen/blktap2-new/device.c	2011-08-09 10:31:33.000000000 +0200
+++ head/drivers/xen/blktap2-new/device.c	2012-02-16 11:02:14.000000000 +0100
@@ -95,7 +95,7 @@ blktap_device_ioctl(struct block_device 
 	return 0;
 }
 
-static struct block_device_operations blktap_device_file_operations = {
+static const struct block_device_operations blktap_device_file_operations = {
 	.owner     = THIS_MODULE,
 	.open      = blktap_device_open,
 	.release   = blktap_device_release,
@@ -243,6 +243,8 @@ blktap_device_run_queue(struct blktap *t
 			break;
 
 		if (!blk_fs_request(rq)) {
+			rq->errors = (DID_ERROR << 16) |
+				     (DRIVER_INVALID << 24);
 			__blktap_end_queued_rq(rq, -EOPNOTSUPP);
 			continue;
 		}
@@ -426,6 +428,12 @@ blktap_device_destroy_sync(struct blktap
 		   !blktap_device_try_destroy(tap));
 }
 
+static char *blktap_devnode(struct gendisk *gd, mode_t *mode)
+{
+	return kasprintf(GFP_KERNEL, BLKTAP2_DEV_DIR "tapdev%u",
+			 gd->first_minor);
+}
+
 int
 blktap_device_create(struct blktap *tap, struct blktap_params *params)
 {
@@ -466,6 +474,7 @@ blktap_device_create(struct blktap *tap,
 
 	gd->major = blktap_device_major;
 	gd->first_minor = minor;
+	gd->devnode = blktap_devnode;
 	gd->fops = &blktap_device_file_operations;
 	gd->private_data = tapdev;
 
@@ -484,8 +493,7 @@ blktap_device_create(struct blktap *tap,
 	blktap_device_configure(tap, params);
 	add_disk(gd);
 
-	if (params->name[0])
-		strncpy(tap->name, params->name, sizeof(tap->name)-1);
+	strlcpy(tap->name, params->name, ARRAY_SIZE(tap->name));
 
 	set_bit(BLKTAP_DEVICE, &tap->dev_inuse);
 
--- head.orig/drivers/xen/blktap2-new/ring.c	2011-02-24 13:49:49.000000000 +0100
+++ head/drivers/xen/blktap2-new/ring.c	2011-02-24 15:14:47.000000000 +0100
@@ -435,7 +435,7 @@ static unsigned int blktap_ring_poll(str
 	return 0;
 }
 
-static struct file_operations blktap_ring_file_operations = {
+static const struct file_operations blktap_ring_file_operations = {
 	.owner    = THIS_MODULE,
 	.open     = blktap_ring_open,
 	.release  = blktap_ring_release,
--- head.orig/drivers/xen/blktap2-new/sysfs.c	2011-02-24 13:49:49.000000000 +0100
+++ head/drivers/xen/blktap2-new/sysfs.c	2012-01-24 11:22:07.000000000 +0100
@@ -20,13 +20,13 @@ blktap_sysfs_set_name(struct device *dev
 	if (!tap)
 		return 0;
 
-	if (size >= BLKTAP2_MAX_MESSAGE_LEN)
+	if (size > BLKTAP2_MAX_MESSAGE_LEN)
 		return -ENAMETOOLONG;
 
-	if (strnlen(buf, size) != size)
+	if (strnlen(buf, size) >= size)
 		return -EINVAL;
 
-	strcpy(tap->name, buf);
+	strlcpy(tap->name, buf, size);
 
 	return size;
 }
@@ -160,8 +160,8 @@ blktap_sysfs_store_pool(struct device *d
 
 	return size;
 }
-DEVICE_ATTR(pool, S_IRUSR|S_IWUSR,
-	    blktap_sysfs_show_pool, blktap_sysfs_store_pool);
+static DEVICE_ATTR(pool, S_IRUSR|S_IWUSR,
+		   blktap_sysfs_show_pool, blktap_sysfs_store_pool);
 
 int
 blktap_sysfs_create(struct blktap *tap)
@@ -259,6 +259,12 @@ blktap_sysfs_show_devices(struct class *
 }
 static CLASS_ATTR(devices, S_IRUGO, blktap_sysfs_show_devices, NULL);
 
+static char *blktap_devnode(struct device *dev, mode_t *mode)
+{
+	return kasprintf(GFP_KERNEL, BLKTAP2_DEV_DIR "blktap%u",
+			 MINOR(dev->devt));
+}
+
 void
 blktap_sysfs_exit(void)
 {
@@ -275,6 +281,8 @@ blktap_sysfs_init(void)
 	cls = class_create(THIS_MODULE, "blktap2");
 	if (IS_ERR(cls))
 		err = PTR_ERR(cls);
+	else
+		cls->devnode = blktap_devnode;
 	if (!err)
 		err = class_create_file(cls, &class_attr_verbosity);
 	if (!err)