vserver 2.0 rc7
[linux-2.6.git] / drivers / s390 / cio / device_pgid.c
index 7a80801..0adac8a 100644 (file)
@@ -156,7 +156,9 @@ ccw_device_sense_pgid_irq(struct ccw_device *cdev, enum dev_event dev_event)
        if (ccw_device_accumulate_and_sense(cdev, irb) != 0)
                return;
        sch = to_subchannel(cdev->dev.parent);
-       switch (__ccw_device_check_sense_pgid(cdev)) {
+       ret = __ccw_device_check_sense_pgid(cdev);
+       memset(&cdev->private->irb, 0, sizeof(struct irb));
+       switch (ret) {
        /* 0, -ETIME, -EOPNOTSUPP, -EAGAIN, -EACCES or -EUSERS */
        case 0:                 /* Sense Path Group ID successful. */
                if (cdev->private->pgid.inf.ps.state1 == SNID_STATE1_RESET)
@@ -307,6 +309,7 @@ ccw_device_verify_irq(struct ccw_device *cdev, enum dev_event dev_event)
 {
        struct subchannel *sch;
        struct irb *irb;
+       int ret;
 
        irb = (struct irb *) __LC_IRB;
        /* Retry set pgid for cc=1. */
@@ -319,7 +322,9 @@ ccw_device_verify_irq(struct ccw_device *cdev, enum dev_event dev_event)
        if (ccw_device_accumulate_and_sense(cdev, irb) != 0)
                return;
        sch = to_subchannel(cdev->dev.parent);
-       switch (__ccw_device_check_pgid(cdev)) {
+       ret = __ccw_device_check_pgid(cdev);
+       memset(&cdev->private->irb, 0, sizeof(struct irb));
+       switch (ret) {
        /* 0, -ETIME, -EAGAIN, -EOPNOTSUPP or -EACCES */
        case 0:
                /* Establish or Resign Path Group done. Update vpm. */
@@ -405,6 +410,7 @@ ccw_device_disband_irq(struct ccw_device *cdev, enum dev_event dev_event)
                return;
        sch = to_subchannel(cdev->dev.parent);
        ret = __ccw_device_check_pgid(cdev);
+       memset(&cdev->private->irb, 0, sizeof(struct irb));
        switch (ret) {
        /* 0, -ETIME, -EAGAIN, -EOPNOTSUPP or -EACCES */
        case 0:                 /* disband successful. */