Re: dev->release = (void (*)(struct device *))kfree;

From: Heiko Carstens (heiko.carstens_at_de.ibm.com)
Date: 10/25/05

  • Next message: colin: ""disable printk" will make console disappear"
    Date:	Tue, 25 Oct 2005 08:44:16 +0200
    To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    
    

    On Tue, Oct 25, 2005 at 02:36:21PM +1000, Benjamin Herrenschmidt wrote:
    > On Mon, 2005-10-24 at 20:10 -0700, Pete Zaitcev wrote:
    > > I seem to recall the discussion about this, but very dimly. Would someone
    > > be so kind to remind me, why the attached patch cannot be used?
    >
    > If your struct device becomes a member of your vmlogrdr_priv structure,
    > then you need to tie the lifetime of that structure to the one of the
    > struct device kobject. Thus, you need to provide a "release" callback
    > that frees your entire vmlogrdr_priv structure and of course not free it
    > yourself (but simply consider it lost after you have called
    > device_unregister).
    >
    > In addition, if you are in the module, you get into funky issues since
    > you must make sure your free routine doesn't "go away" with your module
    > before the object is freed (it may be held a long time in memory by some
    > userland thing opening a sysfs file to it). If you set the owner field
    > of the kobj, your module should be held there (but may become totally
    > un-rmmod'able in some circumstances, how fun...)
    >
    > If you need to keep your vmlogrdr_priv structure around a little while
    > longer after device_unregister(), just increase it's refcount before
    > doing device_unregister() and drop it when you don't need it anymore. It
    > will still be unregistered (removed from the various lists) but the
    > release() callback won't be called until the last user.

    For the same reason I tried several times to _introduce_ the
    "dev->release = (void (*)(struct device *))kfree" stuff in the zfcp device
    driver, but Greg objected every time that it wouldn't be necessary.
    I still disagree with him and that's why the zfcp module doesn't have a
    module_exit function :)

    Heiko
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/


  • Next message: colin: ""disable printk" will make console disappear"

    Relevant Pages