From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753746AbZEQPeH (ORCPT ); Sun, 17 May 2009 11:34:07 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751349AbZEQPdx (ORCPT ); Sun, 17 May 2009 11:33:53 -0400 Received: from cantor.suse.de ([195.135.220.2]:35680 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751442AbZEQPdx (ORCPT ); Sun, 17 May 2009 11:33:53 -0400 Date: Sun, 17 May 2009 08:33:46 -0700 From: Greg KH To: Linus Torvalds Cc: Kay Sievers , "Rafael J. Wysocki" , Linux Kernel Mailing List , Adrian Bunk , Andrew Morton , Natalie Protasevich Subject: Re: 2.6.30-rc6: Reported regressions from 2.6.29 Message-ID: <20090517153346.GA1536@suse.de> References: <_AjETDMbIoL.A.DcH.RYzDKB@chimera> <1242522109.2635.6.camel@poy> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.19 (2009-01-05) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, May 16, 2009 at 07:13:59PM -0700, Linus Torvalds wrote: > > > On Sun, 17 May 2009, Kay Sievers wrote: > > > > This makes the oops in the driver-core, caused by the rtc driver > > unregister, go away. The original issue is also fixed in the rtc driver > > itself. > > I don't think this is sufficient. > > > --- a/drivers/base/driver.c > > +++ b/drivers/base/driver.c > > @@ -257,6 +257,8 @@ EXPORT_SYMBOL_GPL(driver_register); > > */ > > void driver_unregister(struct device_driver *drv) > > { > > + if (!drv || !drv->p) > > + return; > > driver_remove_groups(drv, drv->groups); > > bus_remove_driver(drv); > > } > > Ok, fine so far, but look at "driver_register()". > > It will set drv->p, but then not unset it if it fails! (For a certain > class of failures) > > So for a certain failure pattern, drv->p will point to some stale value. > Should we not clear drv->p in the "out_unregister" patch? > > To confuse the thing more, there are actually "half-way failures" that > _succeed_ in driver registration, but then return an error code. See that > whole > > > kobject_uevent(&priv->kobj, KOBJ_ADD); > return error; > > case in the "success" path driver_register(). We may return an error > despite the fact that we actually attached the driver to bus, but > "add_bind_files()" failed. A caller would be understandable very unhappy. > > So I suspect we should do something like the appended (in addition to your > patch). Comments? That looks good. I'll add the WARN_ON that Ingo pointed out, and merge this with Kay's patch. Give me a few hours to wake up... thanks, greg k-h