Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752131AbYJTPAS (ORCPT ); Mon, 20 Oct 2008 11:00:18 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750895AbYJTPAB (ORCPT ); Mon, 20 Oct 2008 11:00:01 -0400 Received: from smtp1.linux-foundation.org ([140.211.169.13]:60834 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751209AbYJTPAA (ORCPT ); Mon, 20 Oct 2008 11:00:00 -0400 Message-ID: <48FC9CCC.3040006@linux-foundation.org> Date: Mon, 20 Oct 2008 09:59:24 -0500 From: Christoph Lameter User-Agent: Thunderbird 2.0.0.17 (Windows/20080914) MIME-Version: 1.0 To: Miklos Szeredi CC: penberg@cs.helsinki.fi, nickpiggin@yahoo.com.au, hugh@veritas.com, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, akpm@linux-foundation.org Subject: Re: SLUB defrag pull request? References: <1223883004.31587.15.camel@penberg-laptop> <1223883164.31587.16.camel@penberg-laptop> <200810132354.30789.nickpiggin@yahoo.com.au> <48F378C6.7030206@linux-foundation.org> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1599 Lines: 37 Miklos Szeredi wrote: > >>> It should be the other way round: first make sure nothing is >>> referencing the inode, and _then_ start cleaning it up with >>> appropriate locks held. See prune_icache(). The code was initially taken from prune_icache. >> kick_inodes() only works on inodes that first have undergone >> get_inodes() where we establish a refcount under inode_lock(). The final >> cleanup in kick_inodes() is done under iprune_mutex. You are looking at >> the loop that does writeback and invalidates attached dentries. This can >> fail for various reasons. > > Yes, but I'm not at all sure that calling remove_inode_buffers() or > invalidate_mapping_pages() is OK on a live inode. They should be done > after checking the refcount, just like prune_icache() does. Dont we do the same on a truncate? > Also, while d_invalidate() is not actually wrong here, because you > check S_ISDIR(), but it's still the wrong function to use. You really > just want to shrink the children. Invalidation means: the filesystem > found out that the cached inode is invalid, so we want to throw it > away. In the future it might actually be able to do it for > directories as well, but currently it cannot because of possible > mounts on the dentry. Thats the same issue as with the dentries. The new function could deal with both situations? -- 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/