From mboxrd@z Thu Jan 1 00:00:00 1970 From: marek.belisko@gmail.com (Belisko Marek) Date: Sat, 28 May 2011 18:00:10 +0200 Subject: should failed calls to device_register() always call put_device()? In-Reply-To: References: Message-ID: To: kernelnewbies@lists.kernelnewbies.org List-Id: kernelnewbies.lists.kernelnewbies.org Hi Robert, On Sat, May 28, 2011 at 5:15 PM, Robert P. J. Day wrote: > > ?from drivers/base/core.c, we have the fairly unambiguous advice: > > * NOTE: _Never_ directly free @dev after calling this function, even > * if it returned an error! Always use put_device() to give up the > * reference initialized in this function instead. > */ > int device_register(struct device *dev) > { > ? ? ? ?device_initialize(dev); > ? ? ? ?return device_add(dev); > } > > ?and yet, there appears to be driver code that does exactly that, > such as this snippet from drivers/w1/w1_int.c (line 86): > > ? ? ? ?... snip ... > ? ? ? ?err = device_register(&dev->dev); > ? ? ? ?if (err) { > ? ? ? ? ? ? ? ?printk(KERN_ERR "Failed to register master device. err=%d\n", err); > ? ? ? ? ? ? ? ?memset(dev, 0, sizeof(struct w1_master)); > ? ? ? ? ? ? ? ?kfree(dev); > ? ? ? ? ? ? ? ?dev = NULL; > ? ? ? ?} Free is for allocated dev not for struct device so it is OK. IMO thi snippet should look like: err = device_register(&dev->dev); if (err) { printk(KERN_ERR "Failed to register master device. err=%d\n", err); put_device(&dev->dev); memset(dev, 0, sizeof(struct w1_master)); kfree(dev); dev = NULL; } > > ? ? ? ?return dev; > > ?isn't the above doing just that -- directly freeing the dev > structure without first calling put_device()? ?or am i misreading > something? > > rday > > -- > > ======================================================================== > Robert P. J. Day ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Ottawa, Ontario, CANADA > ? ? ? ? ? ? ? ? ? ? ? ?http://crashcourse.ca > > Twitter: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? http://twitter.com/rpjday > LinkedIn: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? http://ca.linkedin.com/in/rpjday > ======================================================================== > > > _______________________________________________ > Kernelnewbies mailing list > Kernelnewbies at kernelnewbies.org > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > regards, marek -- as simple and primitive as possible ------------------------------------------------- Marek Belisko - OPEN-NANDRA Freelance Developer Ruska Nova Ves 219 | Presov, 08005 Slovak Republic Tel: +421 915 052 184 skype: marekwhite icq: 290551086 web: http://open-nandra.com