Skip to contentSkip to conversation

xen device driver updates [resend]

PATCH In review Jeremy Fitzhardinge 3 participants 18 messages May 31, 2008 – Jun 1, 2008

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 xen device driver updates [resend]

Hi,

[ Repost spelling Jeff's email addr properly. ]

This is a series of cleanups to xen-blkfront, xen-netfront and xenbus. They're mostly changes imported from the linux-2.6.18-xen repo because they looked like they would be useful.

Thanks,
J

 drivers/block/xen-blkfront.c       |   48 ++++++++++++++++++++++++++---
 drivers/net/xen-netfront.c         |    4 +-
 drivers/xen/xenbus/xenbus_client.c |    2 -
 drivers/xen/xenbus/xenbus_xs.c     |   10 +++---
 4 files changed, 52 insertions(+), 12 deletions(-)
#1 lore raw

PATCH 1/1 xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront

From: Christian Limpach <[email protected]>

Return 0 instead of -EINVAL if the blkfront device is a cdrom, i.e. had the VDISK_CDROM attribute. This allows udev's cdrom_id to correctly detect the device as a cdrom device.

[ Add blkif_ioctl, and CDROMMULTISESSION ]

[ linux-2.6.18-xen changeset d2bd9af846b5 ]

---
 drivers/block/xen-blkfront.c |   36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)
drivers/block/xen-blkfront.c +36 -0
@@ -38,6 +38,7 @@
 #include <linux/interrupt.h>
 #include <linux/blkdev.h>
 #include <linux/hdreg.h>
+#include <linux/cdrom.h>
 #include <linux/module.h>
 
 #include <xen/xenbus.h>
@@ -150,6 +151,40 @@
 	hg->cylinders = cylinders;
 	if ((sector_t)(hg->cylinders + 1) * hg->heads * hg->sectors < nsect)
 		hg->cylinders = 0xffff;
+	return 0;
+}
+
+int blkif_ioctl(struct inode *inode, struct file *filep,
+		unsigned command, unsigned long argument)
+{
+	struct blkfront_info *info =
+		inode->i_bdev->bd_disk->private_data;
+	int i;
+
+	dev_dbg(&info->xbdev->dev, "command: 0x%x, argument: 0x%lx\n",
+		command, (long)argument);
+
+	switch (command) {
+	case CDROMMULTISESSION:
+		dev_dbg(&info->xbdev->dev, "FIXME: support multisession CDs later\n");
+		for (i = 0; i < sizeof(struct cdrom_multisession); i++)
+			if (put_user(0, (char __user *)(argument + i)))
+				return -EFAULT;
+		return 0;
+
+	case CDROM_GET_CAPABILITY: {
+		struct gendisk *gd = info->gd;
+		if (gd->flags & GENHD_FL_CD)
+			return 0;
+		return -EINVAL;
+	}
+
+	default:
+		/*printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n",
+		  command);*/
+		return -EINVAL; /* same return as native Linux */
+	}
+
 	return 0;
 }
 
@@ -974,6 +1009,7 @@
 	.open = blkif_open,
 	.release = blkif_release,
 	.getgeo = blkif_getgeo,
+	.ioctl = blkif_ioctl,
 };
 
 
#2 lore raw

Re: [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront

drivers/block/xen-blkfront.c line 180

Quoted 6 lines · Jeremy Fitzhardinge
drivers/block/xen-blkfront.c +6 -0
+	case CDROM_GET_CAPABILITY: {
+		struct gendisk *gd = info->gd;
+		if (gd->flags & GENHD_FL_CD)
+			return 0;
+		return -EINVAL;
+	}

Surely you can come up with a better implementation than this? It's just a bitmask returned to userspace...

Jeff

#3 lore raw

Re: [PATCH 2 of 5] xn/blkfront: Add the CDROM_GET_CAPABILITY ioctl to blkfront

Quoted 10 lines · Jeff Garzik

drivers/block/xen-blkfront.c line 180

Quoted 6 lines · Jeremy Fitzhardinge
drivers/block/xen-blkfront.c +6 -0
+    case CDROM_GET_CAPABILITY: {
+        struct gendisk *gd = info->gd;
+        if (gd->flags & GENHD_FL_CD)
+            return 0;
+        return -EINVAL;
+    }

Surely you can come up with a better implementation than this? It's just a bitmask returned to userspace...

Unfortunately the Xen block driver interface doesn't seem to pass through any capabilities of the underlying CDROM device, so there's not much to return. I suspect this is primarily a hack to make installers a bit happier installing off a Xen VBD rather than because real programs will use this in earnest.

J

#4 lore raw

PATCH 1/1 xen/blkfront: Make sure we don't use bounce buffers, we don't need them

In reply to Jeremy Fitzhardinge

From: Ian Campbell <[email protected]>

[ linux-2.6.18-xen changeset 667228bf8fc5 ]

---
 drivers/block/xen-blkfront.c |    3 +++
 1 file changed, 3 insertions(+)
drivers/block/xen-blkfront.c +3 -0
@@ -324,6 +324,9 @@
 	/* Make sure buffer addresses are sector-aligned. */
 	blk_queue_dma_alignment(rq, 511);
 
+	/* Make sure we don't use bounce buffers. */
+	blk_queue_bounce_limit(rq, BLK_BOUNCE_ANY);
+
 	gd->queue = rq;
 
 	return 0;
#5 lore raw

Re: [PATCH 1 of 5] xen/blkfront: Make sure we don't use bounce buffers, we don't need them

Quoted 14 lines · Jeremy Fitzhardinge

From: Ian Campbell <[email protected]>

[ linux-2.6.18-xen changeset 667228bf8fc5 ]

---
 drivers/block/xen-blkfront.c |    3 +++
 1 file changed, 3 insertions(+)

drivers/block/xen-blkfront.c line 330

Quoted 7 lines
drivers/block/xen-blkfront.c +3 -0
@@ -324,6 +324,9 @@
 	/* Make sure buffer addresses are sector-aligned. */
 	blk_queue_dma_alignment(rq, 511);
 
+	/* Make sure we don't use bounce buffers. */
+	blk_queue_bounce_limit(rq, BLK_BOUNCE_ANY);
+
 	gd->queue = rq;

ACK

#6 lore raw

PATCH 1/1 xen/blkfront: Make sure that the device is fully ready before allowing release

In reply to Jeremy Fitzhardinge

From: Wim Colgate <[email protected]>

[ linux-2.6.18-xen changeset c1c57fea77e9 ]

---
 drivers/block/xen-blkfront.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/block/xen-blkfront.c +1 -1
@@ -997,7 +997,7 @@
 		struct xenbus_device *dev = info->xbdev;
 		enum xenbus_state state = xenbus_read_driver_state(dev->otherend);
 
-		if (state == XenbusStateClosing)
+		if (state == XenbusStateClosing && info->is_ready)
 			blkfront_closing(dev);
 	}
 	return 0;
#7 lore raw

PATCH 1/1 xen/blkfront: add __exit to module_exit() handlers

In reply to Jeremy Fitzhardinge

From: Jan Beulich <[email protected]>

---
 drivers/block/xen-blkfront.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/block/xen-blkfront.c +1 -1
@@ -1045,7 +1045,7 @@
 module_init(xlblk_init);
 
 
-static void xlblk_exit(void)
+static void __exit xlblk_exit(void)
 {
 	return xenbus_unregister_driver(&blkfront);
 }
#8 lore raw

Re: [PATCH 4 of 5] xen/blkfront: add __exit to module_exit() handlers

Quoted 12 lines · Jeremy Fitzhardinge

From: Jan Beulich <[email protected]>

---
 drivers/block/xen-blkfront.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

drivers/block/xen-blkfront.c line 1051

Quoted 8 lines
drivers/block/xen-blkfront.c +1 -1
@@ -1045,7 +1045,7 @@
 module_init(xlblk_init);
 
 
-static void xlblk_exit(void)
+static void __exit xlblk_exit(void)
 {
 	return xenbus_unregister_driver(&blkfront);
 }

ACK

#9 lore raw

PATCH 1/1 xen: Avoid allocations causing swap activity on the resume path

In reply to Jeremy Fitzhardinge

From: Ian Campbell <[email protected]>

Avoid allocations causing swap activity on the resume path by allowing such allocations to access the emergency pools otherwise a save/restore/migration of a guest which is low on memory can deadlock.

[ linux-2.6.18-xen changesets e8b49cfbdac, fdb998e79aba ]

---
 drivers/block/xen-blkfront.c       |    5 +++--
 drivers/net/xen-netfront.c         |    4 ++--
 drivers/xen/xenbus/xenbus_client.c |    2 +-
 drivers/xen/xenbus/xenbus_xs.c     |   10 +++++-----
 4 files changed, 11 insertions(+), 10 deletions(-)
drivers/block/xen-blkfront.c +3 -2
@@ -584,7 +584,7 @@
 
 	info->ring_ref = GRANT_INVALID_REF;
 
-	sring = (struct blkif_sring *)__get_free_page(GFP_KERNEL);
+	sring = (struct blkif_sring *)__get_free_page(GFP_KERNEL | __GFP_HIGH);
 	if (!sring) {
 		xenbus_dev_fatal(dev, -ENOMEM, "allocating shared ring");
 		return -ENOMEM;
@@ -741,7 +741,8 @@
 	int j;
 
 	/* Stage 1: Make a safe copy of the shadow state. */
-	copy = kmalloc(sizeof(info->shadow), GFP_KERNEL);
+	copy = kmalloc(sizeof(info->shadow),
+		       GFP_KERNEL | __GFP_NOFAIL | __GFP_HIGH);
 	if (!copy)
 		return -ENOMEM;
 	memcpy(copy, info->shadow, sizeof(info->shadow));
drivers/net/xen-netfront.c +2 -2
@@ -1324,7 +1324,7 @@
 		goto fail;
 	}
 
-	txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_KERNEL);
+	txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_KERNEL | __GFP_HIGH);
 	if (!txs) {
 		err = -ENOMEM;
 		xenbus_dev_fatal(dev, err, "allocating tx ring page");
@@ -1340,7 +1340,7 @@
 	}
 
 	info->tx_ring_ref = err;
-	rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_KERNEL);
+	rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_KERNEL | __GFP_HIGH);
 	if (!rxs) {
 		err = -ENOMEM;
 		xenbus_dev_fatal(dev, err, "allocating rx ring page");
drivers/xen/xenbus/xenbus_client.c +1 -1
@@ -117,7 +117,7 @@
 	char *path;
 
 	va_start(ap, pathfmt);
-	path = kvasprintf(GFP_KERNEL, pathfmt, ap);
+	path = kvasprintf(GFP_KERNEL | __GFP_HIGH, pathfmt, ap);
 	va_end(ap);
 
 	if (!path) {
drivers/xen/xenbus/xenbus_xs.c +5 -5
@@ -283,9 +283,9 @@
 	char *buffer;
 
 	if (strlen(name) == 0)
-		buffer = kasprintf(GFP_KERNEL, "%s", dir);
+		buffer = kasprintf(GFP_KERNEL | __GFP_HIGH, "%s", dir);
 	else
-		buffer = kasprintf(GFP_KERNEL, "%s/%s", dir, name);
+		buffer = kasprintf(GFP_KERNEL | __GFP_HIGH, "%s/%s", dir, name);
 	return (!buffer) ? ERR_PTR(-ENOMEM) : buffer;
 }
 
@@ -297,7 +297,7 @@
 	*num = count_strings(strings, len);
 
 	/* Transfer to one big alloc for easy freeing. */
-	ret = kmalloc(*num * sizeof(char *) + len, GFP_KERNEL);
+	ret = kmalloc(*num * sizeof(char *) + len, GFP_KERNEL | __GFP_HIGH);
 	if (!ret) {
 		kfree(strings);
 		return ERR_PTR(-ENOMEM);
@@ -751,7 +751,7 @@
 	}
 
 
-	msg = kmalloc(sizeof(*msg), GFP_KERNEL);
+	msg = kmalloc(sizeof(*msg), GFP_KERNEL | __GFP_HIGH);
 	if (msg == NULL) {
 		err = -ENOMEM;
 		goto out;
@@ -763,7 +763,7 @@
 		goto out;
 	}
 
-	body = kmalloc(msg->hdr.len + 1, GFP_KERNEL);
+	body = kmalloc(msg->hdr.len + 1, GFP_KERNEL | __GFP_HIGH);
 	if (body == NULL) {
 		kfree(msg);
 		err = -ENOMEM;
#10 lore raw

Re: [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path

Quoted 12 lines · Jeremy Fitzhardinge

From: Ian Campbell <[email protected]>

Avoid allocations causing swap activity on the resume path by allowing such allocations to access the emergency pools otherwise a save/restore/migration of a guest which is low on memory can deadlock.

[ linux-2.6.18-xen changesets e8b49cfbdac, fdb998e79aba ]

Quoted 6 lines
---
 drivers/block/xen-blkfront.c       |    5 +++--
 drivers/net/xen-netfront.c         |    4 ++--
 drivers/xen/xenbus/xenbus_client.c |    2 +-
 drivers/xen/xenbus/xenbus_xs.c     |   10 +++++-----
 4 files changed, 11 insertions(+), 10 deletions(-)

IMO I am not qualified enough to ACK or NAK this VM-related patch... If others are happy with it, go ahead and merge the xen-netfront.c with that batch.

#11 lore raw

Re: [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path

Quoted 13 lines · Jeff Garzik
Quoted 12 lines · Jeremy Fitzhardinge

From: Ian Campbell <[email protected]>

Avoid allocations causing swap activity on the resume path by allowing such allocations to access the emergency pools otherwise a save/restore/migration of a guest which is low on memory can deadlock.

[ linux-2.6.18-xen changesets e8b49cfbdac, fdb998e79aba ]

Quoted 8 lines
Quoted 6 lines
---
 drivers/block/xen-blkfront.c       |    5 +++--
 drivers/net/xen-netfront.c         |    4 ++--
 drivers/xen/xenbus/xenbus_client.c |    2 +-
 drivers/xen/xenbus/xenbus_xs.c     |   10 +++++-----
 4 files changed, 11 insertions(+), 10 deletions(-)

IMO I am not qualified enough to ACK or NAK this VM-related patch...

Yeah, I'm not quite sure about which GFP_ flags to use in what circumstance. In this case the potential for deadlock exists because this is the code which is reconnecting the virtual devices after a resume, which will probably include its storage (either block device, or some kind of network storage). Should GFP_NOFS also be in there? Something else? Does __GFP_HIGH necessarily mean that it won't try to do IO to push pages out?

Thanks,
J

Patch again for reference:

Subject: xen: Avoid allocations causing swap activity on the resume path

From: Ian Campbell <[email protected]>

Avoid allocations causing swap activity on the resume path by allowing such allocations to access the emergency pools otherwise a save/restore/migration of a guest which is low on memory can deadlock.

[ linux-2.6.18-xen changesets e8b49cfbdac, fdb998e79aba ]

---

drivers/block/xen-blkfront.c       |    5 +++--
drivers/net/xen-netfront.c         |    4 ++--
drivers/xen/xenbus/xenbus_client.c |    2 +-
drivers/xen/xenbus/xenbus_xs.c     |   10 +++++-----
4 files changed, 11 insertions(+), 10 deletions(-)

===================================================================

drivers/block/xen-blkfront.c +0 -0
@@ -584,7 +584,7 @@
 
	info->ring_ref = GRANT_INVALID_REF;

- sring = (struct blkif_sring *)__get_free_page(GFP_KERNEL);

+	sring = (struct blkif_sring *)__get_free_page(GFP_KERNEL | __GFP_HIGH);
	if (!sring) {
		xenbus_dev_fatal(dev, -ENOMEM, "allocating shared ring");
		return -ENOMEM;
@@ -741,7 +741,8 @@
	int j;

	/* Stage 1: Make a safe copy of the shadow state. */
-	copy = kmalloc(sizeof(info->shadow), GFP_KERNEL);
+	copy = kmalloc(sizeof(info->shadow),
+		       GFP_KERNEL | __GFP_NOFAIL | __GFP_HIGH);
	if (!copy)
		return -ENOMEM;
	memcpy(copy, info->shadow, sizeof(info->shadow));

===================================================================

drivers/net/xen-netfront.c +0 -0
@@ -1324,7 +1324,7 @@
		goto fail;
	}

- txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_KERNEL);

+	txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_KERNEL | __GFP_HIGH);
	if (!txs) {
		err = -ENOMEM;
		xenbus_dev_fatal(dev, err, "allocating tx ring page");
@@ -1340,7 +1340,7 @@
	}

	info->tx_ring_ref = err;
-	rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_KERNEL);
+	rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_KERNEL | __GFP_HIGH);
	if (!rxs) {
		err = -ENOMEM;
		xenbus_dev_fatal(dev, err, "allocating rx ring page");

===================================================================

drivers/xen/xenbus/xenbus_client.c +0 -0
@@ -117,7 +117,7 @@
	char *path;

	va_start(ap, pathfmt);
-	path = kvasprintf(GFP_KERNEL, pathfmt, ap);
+	path = kvasprintf(GFP_KERNEL | __GFP_HIGH, pathfmt, ap);
	va_end(ap);

	if (!path) {

===================================================================

drivers/xen/xenbus/xenbus_xs.c +0 -0
@@ -283,9 +283,9 @@
	char *buffer;

	if (strlen(name) == 0)

- buffer = kasprintf(GFP_KERNEL, "%s", dir);
+ buffer = kasprintf(GFP_KERNEL | __GFP_HIGH, "%s", dir);
else
- buffer = kasprintf(GFP_KERNEL, "%s/%s", dir, name);

+		buffer = kasprintf(GFP_KERNEL | __GFP_HIGH, "%s/%s", dir, name);
	return (!buffer) ? ERR_PTR(-ENOMEM) : buffer;
}

@@ -297,7 +297,7 @@

	*num = count_strings(strings, len);

	/* Transfer to one big alloc for easy freeing. */
-	ret = kmalloc(*num * sizeof(char *) + len, GFP_KERNEL);
+	ret = kmalloc(*num * sizeof(char *) + len, GFP_KERNEL | __GFP_HIGH);
	if (!ret) {
		kfree(strings);
		return ERR_PTR(-ENOMEM);
@@ -751,7 +751,7 @@
	}

- msg = kmalloc(sizeof(*msg), GFP_KERNEL);

+	msg = kmalloc(sizeof(*msg), GFP_KERNEL | __GFP_HIGH);
	if (msg == NULL) {
		err = -ENOMEM;
		goto out;
@@ -763,7 +763,7 @@
		goto out;
	}

- body = kmalloc(msg->hdr.len + 1, GFP_KERNEL);

+	body = kmalloc(msg->hdr.len + 1, GFP_KERNEL | __GFP_HIGH);
	if (body == NULL) {
		kfree(msg);
		err = -ENOMEM;
#12 lore raw

Re: [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path

Quoted 2 lines · On Sat, 31 May 2008 10:50:40 +0100 Jeremy Fitzhardinge <[email protected]> wrote:

Does __GFP_HIGH necessarily mean that it won't try to do IO to push pages out?

Nope.

__GFP_FS: may enter filesystems
__GFP_IO: may perform IO

__GFP_IO also means "may do swapout". Even when swap is on a regular file. This is because we do all the fs-related operations up-front during swapon. So at alloc_pages()-time we can go direct-to-disk-blocks.

So I assume for this application you'll need GFP_NOIO. That's still heaps better than GFP_ATOMIC, because it can sleep and wait for kswapd to do stuff, and it can reclaim clean pagecache and clean swapcache.

Whether you should also add __GFP_HIGH to cause the page allocation to bite harder into the page reserves is unclear to me, sorry.

#13 lore raw

Re: [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path

Quoted 10 lines · Andrew Morton
Quoted 2 lines · On Sat, 31 May 2008 10:50:40 +0100 Jeremy Fitzhardinge <[email protected]> wrote:

Does __GFP_HIGH necessarily mean that it won't try to do IO to push pages out?

Nope.

__GFP_FS: may enter filesystems
__GFP_IO: may perform IO

Quoted 8 lines

__GFP_IO also means "may do swapout". Even when swap is on a regular file. This is because we do all the fs-related operations up-front during swapon. So at alloc_pages()-time we can go direct-to-disk-blocks.

So I assume for this application you'll need GFP_NOIO. That's still heaps better than GFP_ATOMIC, because it can sleep and wait for kswapd to do stuff, and it can reclaim clean pagecache and clean swapcache.

OK, I'll respin with GFP_NOIO.

Quoted 3 lines

Whether you should also add __GFP_HIGH to cause the page allocation to bite harder into the page reserves is unclear to me, sorry.

Well, if the allocation fails the machine is dead in the water, because it probably can't go on without its devices. I think it's worth eating to the reserves to avoid that. (I'll have a close look to only add it to allocations which are really unrecoverable if they fail.)

Thanks,
J

#14 lore raw

Re: [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path

Quoted 8 lines · On Sat, 31 May 2008 11:10:18 +0100 Jeremy Fitzhardinge <[email protected]> wrote:
Quoted 3 lines

Whether you should also add __GFP_HIGH to cause the page allocation to bite harder into the page reserves is unclear to me, sorry.

Well, if the allocation fails the machine is dead in the water, because it probably can't go on without its devices. I think it's worth eating to the reserves to avoid that. (I'll have a close look to only add it to allocations which are really unrecoverable if they fail.)

OK.

I don't actually have a clue what you're doing here. Restoring a virtual machine from disk/network or something like that?

It might be appropriate to do a big memory-reclaim before starting the operation, along the lines of suspend-to-disk - go off and allocate (and possible pin) sufficient memroy for the entire operation before actually starting it?

#15 lore raw

Re: [PATCH 5 of 5] xen: Avoid allocations causing swap activity on the resume path

Quoted 7 lines · Andrew Morton
Quoted 4 lines · On Sat, 31 May 2008 11:10:18 +0100 Jeremy Fitzhardinge <[email protected]> wrote:
Quoted 4 lines

Whether you should also add __GFP_HIGH to cause the page allocation to bite harder into the page reserves is unclear to me, sorry.

Quoted 8 lines
Quoted 2 lines

Well, if the allocation fails the machine is dead in the water, because it probably can't go on without its devices. I think it's worth eating to the reserves to avoid that. (I'll have a close look to only add it to allocations which are really unrecoverable if they fail.)

OK.

I don't actually have a clue what you're doing here. Restoring a virtual machine from disk/network or something like that?

More or less. When you suspend the VM it gets disconnected from all its virtual devices. When you resume - which may be after a migration to another machine - it reconnects to all its devices again. These allocations are happening on the reconnection path, and so may happen before there's any underlying device to do IO to (in fact, they've been triggered by something trying to do IO, and the driver notices it has become disconnected and tries to reconnect itself).

Quoted 5 lines

It might be appropriate to do a big memory-reclaim before starting the operation, along the lines of suspend-to-disk - go off and allocate (and possible pin) sufficient memroy for the entire operation before actually starting it?

Not really. Live migration - which is one instance of when this comes into play - is a very lightweight process from the guest VM's perspective, and may cause only ~100ms service interruption. Doing a mass of reclaim/IO would be expensive by comparison.

Also, in general the drivers have to be prepared to deal with a disconnection from their devices at any moment (ie, they may spontaneously disconnect for no apparent reason), so there's no opportunity to prepare for it.

Maybe it would be possible to scurry away some preallocated memory for use if the main allocation fails, but that seems logically equivalent to dipping into the global emergency pool.

J

#16 lore raw
In reply to Jeremy Fitzhardinge
Quoted 8 lines · Jeremy Fitzhardinge

Hi,

[ Repost spelling Jeff's email addr properly. ]

This is a series of cleanups to xen-blkfront, xen-netfront and xenbus. They're mostly changes imported from the linux-2.6.18-xen repo because they looked like they would be useful.

Quoted 8 lines

Thanks,
J

 drivers/block/xen-blkfront.c       |   48 ++++++++++++++++++++++++++---
 drivers/net/xen-netfront.c         |    4 +-
 drivers/xen/xenbus/xenbus_client.c |    2 -
 drivers/xen/xenbus/xenbus_xs.c     |   10 +++---
 4 files changed, 52 insertions(+), 12 deletions(-)

I presume most of these should have been "To: Jens"? The drivers/net/ is really the only thing under my direct purview.

Comments to follow...

Jeff

#17 lore raw
Quoted 1 line · Jeff Garzik

I presume most of these should have been "To: Jens"? The drivers/net/ is really the only thing under my direct purview.

Yep, sure. To be honest, I couldn't remember if you dealt with block patches or not. I knew that between you everything would find a home ;)

J