On Wed, Mar 24, 2021 at 10:01:42AM -0700, Dan Williams wrote: > On Wed, Mar 24, 2021 at 9:52 AM Jason Gunthorpe <jgg@xxxxxxxxxx> wrote: > > > > On Wed, Mar 24, 2021 at 09:13:35AM -0700, Dan Williams wrote: > > > > > Which is just: > > > > > > device_initialize() > > > dev_set_name() > > > > > > ...then the name is set as early as the device is ready to filled in > > > with other details. Just checking for dev_set_name() failures does not > > > move the api forward in my opinion. > > > > This doesn't work either as the release function must be set after > > initialize but before dev_set_name(), otherwise we both can't and must > > call put_device() after something like this fails. > > Ugh, true. > > > > > I can't see an option other than bite the bullet and fix things. > > > > A static tool to look for these special lifetime rules around the > > driver core would be nice. > > It would... it would also trip over the fact the core itself fails to > check for dev_set_name() failures and also relies on !dev_name() as a > check after-the-fact. > > That check is broken if the device was not zeroed on allocate. If it's not zeroed on alloc then you'd probably run into problems much earlier. For example, the dev->init_name chunk would probably crash. if (dev->init_name) { dev_set_name(dev, "%s", dev->init_name); dev->init_name = NULL; } regards, dan carpenter