Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > fc11cd6e1c513a17304da94a5390f3cd > files > 4217

kernel-2.6.18-194.11.1.el5.src.rpm

From: Chris Lalancette <clalance@redhat.com>
Date: Thu, 17 Jul 2008 17:28:18 +0200
Subject: [xen] blktap: stats error cleanup
Message-id: 487F6512.20303@redhat.com
O-Subject: [RHEL5.3 PATCH 3/7]: Blktap stats error cleanup v2
Bugzilla: 250104
RH-Acked-by: Stephen Tweedie <sct@redhat.com>
RH-Acked-by: Bill Burns <bburns@redhat.com>
RH-Acked-by: Don Dutile <ddutile@redhat.com>

A simple patch to cleanup blktap statistics properly if we hit an error
condition.  From xen-3.1-testing.hg c/s 14044

diff --git a/drivers/xen/blktap/xenbus.c b/drivers/xen/blktap/xenbus.c
index 526ce05..a9a9c2b 100644
--- a/drivers/xen/blktap/xenbus.c
+++ b/drivers/xen/blktap/xenbus.c
@@ -47,6 +47,7 @@ struct backend_info
 	blkif_t *blkif;
 	struct xenbus_watch backend_watch;
 	int xenbus_id;
+	int group_added;
 };
 
 
@@ -150,7 +151,12 @@ static struct attribute_group tapstat_group = {
 
 int xentap_sysfs_addif(struct xenbus_device *dev)
 {
-	return sysfs_create_group(&dev->dev.kobj, &tapstat_group);
+	int err;
+	struct backend_info *be = dev->dev.driver_data;
+	err = sysfs_create_group(&dev->dev.kobj, &tapstat_group);
+	if (!err)
+		be->group_added = 1;
+	return err;
 }
 
 void xentap_sysfs_delif(struct xenbus_device *dev)
@@ -174,7 +180,8 @@ static int blktap_remove(struct xenbus_device *dev)
 		tap_blkif_free(be->blkif);
 		be->blkif = NULL;
 	}
-	xentap_sysfs_delif(be->dev);
+	if (be->group_added)
+		xentap_sysfs_delif(be->dev);
 	kfree(be);
 	dev->dev.driver_data = NULL;
 	return 0;