[S390] cio: remove registered flag from ccw_device_private
authorSebastian Ott <sebott@linux.vnet.ibm.com>
Mon, 7 Dec 2009 11:51:33 +0000 (12:51 +0100)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Mon, 7 Dec 2009 11:51:32 +0000 (12:51 +0100)
We used to maintain a "registered" flag in our ccw_device_private
structure. This patch removes the "registered" flag and converts
all users of it to device_is_registered which has the exact same
meaning.

Note: The usage the atomic operation test_and_clear_bit is replaced
by the non-atomic if (device_is_registered()) device_del(). This
will not do harm, since we serialize calls to ccw_device_unregister
with a single-threaded workqueue.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/device.c
drivers/s390/cio/io_sch.h

index e24b9b1d1022493a559adf9673afee12922da1bc..f4401ede768a60ba558b3c133274a950b3115145 100644 (file)
@@ -303,7 +303,7 @@ 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 (device_is_registered(&cdev->dev)) {
                device_del(&cdev->dev);
                /* Release reference from device_initialize(). */
                put_device(&cdev->dev);
@@ -640,12 +640,7 @@ static int ccw_device_register(struct ccw_device *cdev)
                           cdev->private->dev_id.devno);
        if (ret)
                return ret;
-       ret = device_add(dev);
-       if (ret)
-               return ret;
-
-       set_bit(1, &cdev->private->registered);
-       return ret;
+       return device_add(dev);
 }
 
 static int match_dev_id(struct device *dev, void *data)
@@ -669,7 +664,7 @@ static void ccw_device_do_unbind_bind(struct ccw_device *cdev)
 {
        int ret;
 
-       if (test_bit(1, &cdev->private->registered)) {
+       if (device_is_registered(&cdev->dev)) {
                device_release_driver(&cdev->dev);
                ret = device_attach(&cdev->dev);
                WARN_ON(ret == -ENODEV);
index 0559479073cc2acfd9cc7c73e03927f9548631df..ca1063d6b50557bcb34a508aaab15e8797c719dd 100644 (file)
@@ -145,7 +145,6 @@ struct ccw_device_private {
        struct subchannel *sch;
        int state;              /* device state */
        atomic_t onoff;
-       unsigned long registered;
        struct ccw_dev_id dev_id;       /* device id */
        struct subchannel_id schid;     /* subchannel number */
        struct ccw_request req;         /* internal I/O request */