linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: David Howells <dhowells@redhat.com>
To: Trond Myklebust <trond.myklebust@fys.uio.no>
Cc: akpm@osdl.org, nfsv4@linux-nfs.org, linux-kernel@vger.kernel.org,
	torvalds@osdl.org, linux-cachefs@redhat.com,
	linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 14/14] NFS: Use local caching [try #2]
Date: Thu, 09 Aug 2007 19:52:28 +0100	[thread overview]
Message-ID: <21984.1186685548@redhat.com> (raw)
In-Reply-To: <1186683869.6699.136.camel@heimdal.trondhjem.org>

Trond Myklebust <trond.myklebust@fys.uio.no> wrote:

> Dang, that's a lot of inlines... AFAICS, approx half of fs/nfs/fscache.h
> should really be moved into fscache.c.

If you wish.  It seems a shame since a lot of them have only one caller.

> > +	/* we can do this here as the bits are only set with the page lock
> > +	 * held, and our caller is holding that */
> > +	if (!page->private)
> > +		ClearPagePrivate(page);
> 
> Why would PG_private be set at this point?

Looks like I've got a bit more cleaning up to do.  PG_private isn't set by
FS-Cache, so this bit shouldn't be here.

> In any case, please send this and other PagePrivate changes as a
> separate patch. Any changes to the PagePrivate semantics must be made
> easy to debug.

There shouldn't be any.

Note that due to patch #2, PG_fscache causes releasepage() and
invalidatepage() to be called in addition to PG_private.

> > +
> > +	if (!nfs_fscache_release_page(page, gfp))
> > +		return 0;
> 
> This looks _very_ dubious. Why shouldn't I be able to discard a page
> just because fscache isn't done writing it out? I may have very good
> reasons to do so.

Hmmm...  Looking at the truncate routines, I suppose this ought to be okay,
provided the cache retains a reference on the page whilst it's writing it out
(put_page() won't can the page until we release it).

It also seems dubious, though, to release the page when the filesystem is
doing stuff to it, even if it's by proxy in the cache.  I'll have to test
that, but I'm slightly concerned that the netfs could end up releasing its
cookie before the cache has finished with its pages.  On the other hand, with
the new asynchronous stuff I've done, I'm not sure this'll be an actual
problem.

> >  static int nfs_launder_page(struct page *page)
> >  {
> > +	nfs_fscache_invalidate_page(page, page->mapping->host, 0);
> 
> Why? The function of launder_page() is to clean the page, not to
> truncate it.

Okay.

> > @@ -1000,11 +1007,13 @@ static int nfs_update_inode(struct inode *inode, struct nfs_fattr *fattr)
> >  			if (data_stable) {
> >  				inode->i_size = new_isize;
> >  				invalid |= NFS_INO_INVALID_DATA;
> > +				nfs_fscache_attr_changed(inode);
> 
> Can't fscache_attr_changed() call kmalloc(GFP_KERNEL)? You are in a
> spinlocked context here.

Hmmm...  How about I move the call to fscache_attr_changed() to the callers of
nfs_update_inode(), to just after the spinlock is unlocked.  The operation is
going to be asynchronous, so the delay shouldn't matter.

> I'm not too happy about the change to the binary mount interface. As far
> as I'm concerned, the binary interface should really be considered
> frozen, and should not be touched.

I hadn't come across that.  I'll have a look.

> Instead, feel free to update the text-based mount interface (which can
> be found in 2.6.23-rc1 and later). Please put any such mount interface
> changes in a separate patch together with the Kconfig changes.

If you wish, but doesn't that violate the rules of patch division laid down by
Linus and Andrew?

David

  parent reply	other threads:[~2007-08-09 18:52 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-09 16:04 [PATCH 00/14] Permit filesystem local caching [try #2] David Howells
2007-08-09 16:04 ` [PATCH 01/14] FS-Cache: Release page->private after failed readahead " David Howells
2007-08-09 16:04 ` [PATCH 02/14] FS-Cache: Recruit a couple of page flags for cache management " David Howells
2007-08-09 16:04 ` [PATCH 03/14] FS-Cache: Provide an add_wait_queue_tail() function " David Howells
2007-08-09 16:04 ` [PATCH 04/14] FS-Cache: Generic filesystem caching facility " David Howells
2007-08-09 16:05 ` [PATCH 05/14] CacheFiles: Add missing copy_page export for ia64 " David Howells
2007-08-09 16:05 ` [PATCH 06/14] CacheFiles: Add a hook to write a single page of data to an inode " David Howells
2007-08-09 16:05 ` [PATCH 07/14] CacheFiles: Permit the page lock state to be monitored " David Howells
2007-08-09 16:05 ` [PATCH 08/14] CacheFiles: Export things for CacheFiles " David Howells
2007-08-09 16:05 ` [PATCH 09/14] CacheFiles: Permit a process's create SID to be overridden " David Howells
2007-08-09 17:04   ` Casey Schaufler
2007-08-09 18:07     ` David Howells
2007-08-09 18:51       ` Casey Schaufler
2007-08-09 16:05 ` [PATCH 10/14] CacheFiles: Add an act-as SID override in task_security_struct " David Howells
2007-08-09 16:05 ` [PATCH 11/14] CacheFiles: Permit an inode's security ID to be obtained " David Howells
2007-08-09 17:07   ` Casey Schaufler
2007-08-09 17:22     ` Stephen Smalley
2007-08-09 17:59       ` Casey Schaufler
2007-08-09 18:06     ` David Howells
2007-08-09 18:50     ` James Morris
2007-08-09 19:07     ` David Howells
2007-08-09 19:34       ` James Morris
2007-08-09 20:33         ` Casey Schaufler
2007-08-10  9:22           ` David Howells
2007-08-09 18:16   ` James Morris
2007-08-09 18:21   ` David Howells
2007-08-09 18:42     ` James Morris
2007-08-09 16:05 ` [PATCH 12/14] CacheFiles: Get the SID under which the CacheFiles module should operate " David Howells
2007-08-09 16:05 ` [PATCH 13/14] CacheFiles: A cache that backs onto a mounted filesystem " David Howells
2007-08-09 16:05 ` [PATCH 14/14] NFS: Use local caching " David Howells
2007-08-09 18:24   ` Trond Myklebust
2007-08-09 18:52   ` David Howells [this message]
2007-08-09 19:25     ` Trond Myklebust
2007-08-10 14:04     ` David Howells
2007-08-10 16:07       ` Trond Myklebust
2007-08-09 19:15   ` David Howells

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=21984.1186685548@redhat.com \
    --to=dhowells@redhat.com \
    --cc=akpm@osdl.org \
    --cc=linux-cachefs@redhat.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nfsv4@linux-nfs.org \
    --cc=torvalds@osdl.org \
    --cc=trond.myklebust@fys.uio.no \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).