From e056bfb3e959675cc1436b89f56eafcca16e5383 Mon Sep 17 00:00:00 2001 From: Sebastian Ott Date: Fri, 11 Sep 2009 10:28:26 +0200 Subject: [PATCH] --- yaml --- r: 157439 b: refs/heads/master c: 3b554a14f4bdf754ba9d2f64c2b6edf8dafe93b9 h: refs/heads/master i: 157437: ee356e34e2c7ded10dc59ea92b7b129f94cfbeb3 157435: 801e98db353ba66d93fdc13265fe9bc37babb557 157431: 88e459c25e99e8860d462855aa7d463e8d40b381 157423: 64938e87c68072ce790e9d462cd38400f1ca95e5 157407: 264d8e78cba2fec20327150db6a02d6520cfacd7 157375: 288a5c43cd108e083d8ea180372d308e2eb155ce 157311: a73562f22c3563ca81e62962a7d6dfecd007ffc2 157183: c641daace804f499690a95d81781ae6f1b769295 v: v3 --- [refs] | 2 +- trunk/drivers/s390/cio/device.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 00252ca35425..30081eed9048 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6ee4fec6be06f7d138860b37cba58982cc3ccb16 +refs/heads/master: 3b554a14f4bdf754ba9d2f64c2b6edf8dafe93b9 diff --git a/trunk/drivers/s390/cio/device.c b/trunk/drivers/s390/cio/device.c index 6b770f8c0a89..345a61f45a5a 100644 --- a/trunk/drivers/s390/cio/device.c +++ b/trunk/drivers/s390/cio/device.c @@ -307,8 +307,11 @@ int ccw_device_is_orphan(struct ccw_device *cdev) static void ccw_device_unregister(struct ccw_device *cdev) { - if (test_and_clear_bit(1, &cdev->private->registered)) + if (test_and_clear_bit(1, &cdev->private->registered)) { device_del(&cdev->dev); + /* Release reference from device_initialize(). */ + put_device(&cdev->dev); + } } static void ccw_device_remove_orphan_cb(struct work_struct *work) @@ -319,7 +322,6 @@ static void ccw_device_remove_orphan_cb(struct work_struct *work) priv = container_of(work, struct ccw_device_private, kick_work); cdev = priv->cdev; ccw_device_unregister(cdev); - put_device(&cdev->dev); /* Release cdev reference for workqueue processing. */ put_device(&cdev->dev); } @@ -1358,7 +1360,6 @@ io_subchannel_remove (struct subchannel *sch) cdev->private->state = DEV_STATE_NOT_OPER; spin_unlock_irqrestore(cdev->ccwlock, flags); ccw_device_unregister(cdev); - put_device(&cdev->dev); kfree(sch->private); sysfs_remove_group(&sch->dev.kobj, &io_subchannel_attr_group); return 0;