On Thu, 20 Sep 2007 16:26:15 +0900, Tejun Heo <htejun@gmail.com> wrote:Just browsing through this (I'll review and do some tests later), but you missed drivers/s390/cio/device.c::ccw_device_remove_disconnected(). Following (not event compile tested) patch (which is basically a revert of 59a8a6e227cf0bc42e5be741ebfea97c222ab9ef) should take care of it. Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> --- drivers/s390/cio/device.c | 51 +++++++++------------------------------------- 1 files changed, 10 insertions(+), 41 deletions(-) --- linux-2.6.orig/drivers/s390/cio/device.c +++ linux-2.6/drivers/s390/cio/device.c @@ -288,62 +288,31 @@ static void ccw_device_unregister(struct device_del(&cdev->dev); } -static void ccw_device_remove_orphan_cb(struct device *dev) -{ - struct ccw_device *cdev = to_ccwdev(dev); - - ccw_device_unregister(cdev); - put_device(&cdev->dev); -} - -static void ccw_device_remove_sch_cb(struct device *dev) -{ - struct subchannel *sch; - - sch = to_subchannel(dev); - css_sch_device_unregister(sch); - /* Reset intparm to zeroes. */ - sch->schib.pmcw.intparm = 0; - cio_modify(sch); - put_device(&sch->dev); -} - static void ccw_device_remove_disconnected(struct ccw_device *cdev) { + struct subchannel *sch; unsigned long flags; - int rc; /* * Forced offline in disconnected state means * 'throw away device'. */ if (ccw_device_is_orphan(cdev)) { - /* - * Deregister ccw device. - * Unfortunately, we cannot do this directly from the - * attribute method. - */ + /* Deregister ccw device. */ spin_lock_irqsave(cdev->ccwlock, flags); cdev->private->state = DEV_STATE_NOT_OPER; spin_unlock_irqrestore(cdev->ccwlock, flags); - rc = device_schedule_callback(&cdev->dev, - ccw_device_remove_orphan_cb); - if (rc) - CIO_MSG_EVENT(2, "Couldn't unregister orphan " - "0.%x.%04x\n", - cdev->private->dev_id.ssid, - cdev->private->dev_id.devno); + ccw_device_unregister(cdev); + put_device(&cdev->dev); return; } - /* Deregister subchannel, which will kill the ccw device. */ - rc = device_schedule_callback(cdev->dev.parent, - ccw_device_remove_sch_cb); - if (rc) - CIO_MSG_EVENT(2, "Couldn't unregister disconnected device " - "0.%x.%04x\n", - cdev->private->dev_id.ssid, - cdev->private->dev_id.devno); + sch = to_subchannel(cdev->dev.parent); + css_sch_device_unregister(sch); + /* Reset intparm to zeroes. */ + sch->schib.pmcw.intparm = 0; + cio_modify(sch); + put_device(&sch->dev); } /** -
| Greg KH | [GIT PATCH] driver core patches against 2.6.24 |
| david | Re: Dual-Licensing Linux Kernel with GPL V2 and GPL V3 |
| Eric Paris | [RFC 0/5] [TALPA] Intro to a linux interface for on access scanning |
| Linus Torvalds | Linux 2.6.25-rc4 |
git: | |
| David Miller | [GIT]: Networking |
| Gerrit Renker | [PATCH 13/37] dccp: Deprecate Ack Ratio sysctl |
| Vladimir Ivashchenko | Re: HTB accuracy for high speed |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
