Re: [PATCH} fix defect with kobject memory leaks during del_gendisk

From: Patrick Mochel
Date: Thu Sep 25 2003 - 12:49:01 EST



> Attached is a patch which fixes a few memory leaks in 2.6.0-test5.
> Comments are welcome as to whether or not this patch is the right
> solution.
>
> I added the ability to linux MD to generate add and remove hotplug calls
> on RAID START and STOPs. To achieve this, I use the del_gendisk call
> which deletes the gendisk, delete the children kobjects, and delete the
> parent (in this case, mdX) kobject.
>
> Unfortunately it appears that del_gendisk uses kobject_del to delete the
> kobject. If the kobject has a ktype release function, it is not called
> in the kobject_del call path, but only in kobject_unregister.
>
> This patch changes the functionality so the release function (in this
> case the block device release function in drivers/block/genhd.c) is
> called by changing the kobject_del to kobject_unregister.

It is not the right thing to do, as Christoph pointed out. Gendisks have a
lifetime longer than the time between add_disk() and del_gendisk(). They
are created before they are added, and the objects may persist longer
after they have been removed from view.

To delete the last reference, the MD layer should be calling put_disk(),
which will trigger release to happen.

Your patch will actually cause other bugs, since the final put_disk() of
other block drivers will now be called on already freed memory.


Pat

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