From: tytso@mit.edu Subject: Re: [PATCH] ext4: group cache is added in ext4_mb_discard_preallocations() Date: Tue, 6 Apr 2010 14:31:58 -0400 Message-ID: <20100406183158.GK23670@thunk.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-ext4 , Andreas Dilger , Dave Kleikamp , "Aneesh Kumar K. V" To: jing zhang Return-path: Received: from THUNK.ORG ([69.25.196.29]:41069 "EHLO thunker.thunk.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756888Ab0DFScE (ORCPT ); Tue, 6 Apr 2010 14:32:04 -0400 Content-Disposition: inline In-Reply-To: Sender: linux-ext4-owner@vger.kernel.org List-ID: On Tue, Mar 30, 2010 at 08:36:17PM +0800, jing zhang wrote: > --- linux-2.6.32/fs/ext4/mballoc.c 2009-12-03 11:51:22.000000000 +0800 > +++ ext4_mm_leak/mballoc-13.c 2010-03-30 20:28:08.000000000 +0800 > @@ -4183,12 +4183,20 @@ static int ext4_mb_discard_preallocation > ext4_group_t i, ngroups = ext4_get_groups_count(sb); > int ret; > int freed = 0; > + static ext4_group_t grp_cache = 0; This is a problem right there. Remember that there could be multiple file systems mounted so a static variable is fundamentally flawed. In fact, we could have a one filesystem which has more than 3 times the number of groups as another file system. I'll leave it as an exercise to a reader why your patch would be fundamentally flawed in that case. The other thing to note is that this case only gets hit if the file system is so full that we need to empty preallocations. So this means hitting this case is rare, which raises two questions: (1) is it worth it to optimize this case in the first place (is it really that expensive to iterate over all the groups to discard the preallocations); (2) can we test this case well? - Ted