ide: fix refcounting in device drivers
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Wed, 25 Feb 2009 19:28:24 +0000 (20:28 +0100)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Wed, 25 Feb 2009 19:28:24 +0000 (20:28 +0100)
commit8fed43684174b68f04d01d1210fd00536af790df
treedf8d5f87c68526267d0ae320173814ed3f417fd5
parentd3dd7107f4d843d0f01d0f77d49a7c5449130577
ide: fix refcounting in device drivers

During host driver module removal del_gendisk() results in a final
put on drive->gendev and freeing the drive by drive_release_dev().

Convert device drivers from using struct kref to use struct device
so device driver's object holds reference on ->gendev and prevents
drive from prematurely going away.

Also fix ->remove methods to not erroneously drop reference on a
host driver by using only put_device() instead of ide*_put().

Reported-by: Stanislaw Gruszka <stf_xl@wp.pl>
Tested-by: Stanislaw Gruszka <stf_xl@wp.pl>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/ide/ide-cd.c
drivers/ide/ide-cd.h
drivers/ide/ide-gd.c
drivers/ide/ide-gd.h
drivers/ide/ide-tape.c
include/linux/ide.h