From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jan Hudec Subject: Re: a problem with dget Date: Wed, 26 Mar 2003 10:23:20 +0100 Sender: linux-fsdevel-owner@vger.kernel.org Message-ID: <20030326092320.GB24147@vagabond> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Received: from bulb by vagabond.cybernet.cz with local (Exim 3.36 #1 (Debian)) id 18y77w-0006VN-00 for ; Wed, 26 Mar 2003 10:23:20 +0100 To: linux-fsdevel@vger.kernel.org Content-Disposition: inline In-Reply-To: List-Id: linux-fsdevel.vger.kernel.org On Tue, Mar 25, 2003 at 06:47:00PM +0200, Nir Tzachar wrote: > hello all. > > i encountered a strange problem, involving the reference count of > dentries. > > first, let me describe my file system (i'll be brief.. ): > im implementing a file system which is supposed to emulate an object > storage device. i use a wrapper like file system (much like wrapfs, > and actually based on it) to store files on an underlying f/s as objects. > > i hope someone can help me, i've been tackling this problem for more than > a week: when i create a file(say "tmp"), all is fine. > the problem arises when i umount and then remount the file system. > after im done with lookup (inode->i_op->lookup), dentry->d_count.counter > ==1, as should be. but, when i enter the unlink function > (inode->i_op->unlink ) its dentry->d_count.counter == 0 . why is that? > nowhere in the vfs code does anyone decreases the counter b4 > inode->i_op->unlink is called . am i right? Isn't that the little confusing semantics of lookup that's biting you? When ->lookup returns non-NULL, real_lookup (the caller) puts the dentry passed to ->lookup. So if you fill it in, you must return NULL and *NOT* the dentry you recieved! > the problem happens every time i try to do a dget an any dentry. Yes, because you need to hold a reference to do dget. ------------------------------------------------------------------------------- Jan 'Bulb' Hudec