diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-19 16:24:03 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-09-19 16:24:03 -0700 |
commit | 9824b8f11373b0df806c135a342da9319ef1d893 (patch) | |
tree | fb07079ecc7058e3947261aab57d1138c0a9e41c /drivers | |
parent | ab048fb1aafff7883a6bbe62b5354fbc2fa5597c (diff) | |
parent | 9adb8c1d4f0ac78b3469e377ce5f8a846cbaedaf (diff) | |
download | op-kernel-dev-9824b8f11373b0df806c135a342da9319ef1d893.zip op-kernel-dev-9824b8f11373b0df806c135a342da9319ef1d893.tar.gz |
Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6
* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6:
[S390] cio: fix orb initialization in cio_start_key
[S390] cio: Fix driver_data handling for ccwgroup devices.
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/s390/cio/ccwgroup.c | 4 | ||||
-rw-r--r-- | drivers/s390/cio/cio.c | 1 |
2 files changed, 4 insertions, 1 deletions
diff --git a/drivers/s390/cio/ccwgroup.c b/drivers/s390/cio/ccwgroup.c index e0ce65f..9a50f24 100644 --- a/drivers/s390/cio/ccwgroup.c +++ b/drivers/s390/cio/ccwgroup.c @@ -113,7 +113,8 @@ ccwgroup_release (struct device *dev) for (i = 0; i < gdev->count; i++) { if (gdev->cdev[i]) { - dev_set_drvdata(&gdev->cdev[i]->dev, NULL); + if (dev_get_drvdata(&gdev->cdev[i]->dev) == gdev) + dev_set_drvdata(&gdev->cdev[i]->dev, NULL); put_device(&gdev->cdev[i]->dev); } } @@ -296,6 +297,7 @@ error: if (dev_get_drvdata(&gdev->cdev[i]->dev) == gdev) dev_set_drvdata(&gdev->cdev[i]->dev, NULL); put_device(&gdev->cdev[i]->dev); + gdev->cdev[i] = NULL; } mutex_unlock(&gdev->reg_mutex); put_device(&gdev->dev); diff --git a/drivers/s390/cio/cio.c b/drivers/s390/cio/cio.c index 5954b90..326f4cc 100644 --- a/drivers/s390/cio/cio.c +++ b/drivers/s390/cio/cio.c @@ -174,6 +174,7 @@ cio_start_key (struct subchannel *sch, /* subchannel structure */ CIO_TRACE_EVENT(4, sch->dev.bus_id); orb = &to_io_private(sch)->orb; + memset(orb, 0, sizeof(union orb)); /* sch is always under 2G. */ orb->cmd.intparm = (u32)(addr_t)sch; orb->cmd.fmt = 1; |