> Is it actually caused by additional reference counting on drive->gendev? > IOW if you reverse the patch below instead of applying the previous fix > do things work OK again? > > > Note that there shouldn't be anything fundamentally different from > > ide-pmac here vs. something like pcmcia IDE cards... do you have one of > > these to test with ? > > Nope and I really don't intend to have one. I count on other people > to take some care of support for host drivers that they maintain/use. ;)
Reverting the patch below does the job. Thanks. Ben. > Thanks, > Bart > > diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c > index 4e73aee..8f253e5 100644 > --- a/drivers/ide/ide-cd.c > +++ b/drivers/ide/ide-cd.c > @@ -57,23 +57,29 @@ static DEFINE_MUTEX(idecd_ref_mutex); > #define ide_cd_g(disk) \ > container_of((disk)->private_data, struct cdrom_info, driver) > > +static void ide_cd_release(struct kref *); > + > static struct cdrom_info *ide_cd_get(struct gendisk *disk) > { > struct cdrom_info *cd = NULL; > > mutex_lock(&idecd_ref_mutex); > cd = ide_cd_g(disk); > - if (cd) > + if (cd) { > kref_get(&cd->kref); > + if (ide_device_get(cd->drive)) { > + kref_put(&cd->kref, ide_cd_release); > + cd = NULL; > + } > + } > mutex_unlock(&idecd_ref_mutex); > return cd; > } > > -static void ide_cd_release(struct kref *); > - > static void ide_cd_put(struct cdrom_info *cd) > { > mutex_lock(&idecd_ref_mutex); > + ide_device_put(cd->drive); > kref_put(&cd->kref, ide_cd_release); > mutex_unlock(&idecd_ref_mutex); > } _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev