From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jamie Lokier Subject: Re: which dentry a page belongs to Date: Fri, 23 Apr 2004 18:37:19 +0100 Sender: linux-fsdevel-owner@vger.kernel.org Message-ID: <20040423173719.GB7335@mail.shareable.org> References: <1082732223.1943.11.camel@zaphod> <20040423151458.GC6300@mail.shareable.org> <1082734938.1943.26.camel@zaphod> <20040423173738.A3812@infradead.org> <1082739174.1943.49.camel@zaphod> <20040423180130.A4255@infradead.org> <1082740707.1943.61.camel@zaphod> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Christoph Hellwig , linux-fsdevel@vger.kernel.org Return-path: Received: from mail.shareable.org ([81.29.64.88]:35494 "EHLO mail.shareable.org") by vger.kernel.org with ESMTP id S264894AbUDWRha (ORCPT ); Fri, 23 Apr 2004 13:37:30 -0400 To: Shaya Potter Content-Disposition: inline In-Reply-To: <1082740707.1943.61.camel@zaphod> List-Id: linux-fsdevel.vger.kernel.org Shaya Potter wrote: > > you can be in writepage with page->mapping->i_mmap{,shared} beeing empty. > > No way in hell you'll ever get to a dentry. > > the question being in what cases will that happen, so I can make a > determination if I care about those cases. (i.e. if the dentry is > deleted, I don't particularly care, as since I am versioning, if it's > already been deleted, don't care) > > i.e. how can I determine where i_mmap{,shared} exist and when does't it? > (in file system page context). If you do mmap, then modify the pages, then munmap or exit, your ->writpage function is sometimes called _after_ that. That means you can get no vmas in i_mmap{,shared} when doing perfectly normal writable shared mappings. Even if you do find vmas, they can easily correspond to the wrong dentries, so you'll operate on the wrong files in your stackable fs. Your problem is that you are trying to use ->writepage for something it doesn't do. You should be using the ->mmap operations of file_operations instead, and do your versioning operation at the time a writable shared mapping is created. (The kernel does not provide a way to track when pages are actually modified through a specific mapping). You can look in generic_file_mmap() to see the condition which tests for a writable shared mapping. Test that, do the versioning operation, and then call generic_file_mmap from your own mmap function to finish the job. -- Jamie