summaryrefslogtreecommitdiffstats
path: root/drivers/block/xen-blkfront.c
diff options
context:
space:
mode:
authorLaszlo Ersek <lersek@redhat.com>2011-10-07 21:34:38 +0200
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-10-13 15:48:35 +0200
commit469738e675524b6aa029ecd46bdda3f878b12eff (patch)
tree3eb7ba048443b12adebebff8b76d9b60633c4f49 /drivers/block/xen-blkfront.c
parentxen-blkfront: If no barrier or flush is supported, use invalid operation. (diff)
downloadlinux-469738e675524b6aa029ecd46bdda3f878b12eff.tar.xz
linux-469738e675524b6aa029ecd46bdda3f878b12eff.zip
xen-blkfront: plug device number leak in xlblk_init() error path
... though after a failed xenbus_register_frontend() all may be lost. Acked-by: Ian Campbell <ian.campbell@citrix.com> Signed-off-by: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'drivers/block/xen-blkfront.c')
-rw-r--r--drivers/block/xen-blkfront.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 8bf0cb7b2565..773da7d6491e 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1450,6 +1450,8 @@ static struct xenbus_driver blkfront = {
static int __init xlblk_init(void)
{
+ int ret;
+
if (!xen_domain())
return -ENODEV;
@@ -1459,7 +1461,13 @@ static int __init xlblk_init(void)
return -ENODEV;
}
- return xenbus_register_frontend(&blkfront);
+ ret = xenbus_register_frontend(&blkfront);
+ if (ret) {
+ unregister_blkdev(XENVBD_MAJOR, DEV_NAME);
+ return ret;
+ }
+
+ return 0;
}
module_init(xlblk_init);