Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261725AbTIYRpo (ORCPT ); Thu, 25 Sep 2003 13:45:44 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261683AbTIYRgH (ORCPT ); Thu, 25 Sep 2003 13:36:07 -0400 Received: from fw.osdl.org ([65.172.181.6]:54207 "EHLO mail.osdl.org") by vger.kernel.org with ESMTP id S261514AbTIYRa1 (ORCPT ); Thu, 25 Sep 2003 13:30:27 -0400 Date: Thu, 25 Sep 2003 10:26:35 -0700 (PDT) From: Patrick Mochel X-X-Sender: mochel@localhost.localdomain To: Steven Dake cc: linux-kernel@vger.kernel.org Subject: Re: [PATCH} fix defect with kobject memory leaks during del_gendisk In-Reply-To: <1064444526.13033.355.camel@persist.az.mvista.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1602 Lines: 37 > 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/