From: David Howells <dhowells@redhat.com>
To: viro@ZenIV.linux.org.uk
Cc: dhowells@redhat.com, nfsv4@linux-nfs.org,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: [PATCH 30/43] NFS: Register NFS for caching and retrieve the top-level index [ver #46]
Date: Thu, 02 Apr 2009 00:05:56 +0100 [thread overview]
Message-ID: <20090401230556.28177.74947.stgit@warthog.procyon.org.uk> (raw)
In-Reply-To: <20090401230321.28177.12010.stgit@warthog.procyon.org.uk>
Register NFS for caching and retrieve the top-level cache index object cookie.
Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Steve Dickson <steved@redhat.com>
Acked-by: Trond Myklebust <Trond.Myklebust@netapp.com>
---
fs/nfs/Makefile | 1 +
fs/nfs/fscache-index.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++++
fs/nfs/fscache.h | 35 ++++++++++++++++++++++++++++++++++
fs/nfs/inode.c | 8 ++++++++
4 files changed, 93 insertions(+), 0 deletions(-)
create mode 100644 fs/nfs/fscache-index.c
create mode 100644 fs/nfs/fscache.h
diff --git a/fs/nfs/Makefile b/fs/nfs/Makefile
index ac6170c..0e0bb6c 100644
--- a/fs/nfs/Makefile
+++ b/fs/nfs/Makefile
@@ -15,3 +15,4 @@ nfs-$(CONFIG_NFS_V4) += nfs4proc.o nfs4xdr.o nfs4state.o nfs4renewd.o \
callback.o callback_xdr.o callback_proc.o \
nfs4namespace.o
nfs-$(CONFIG_SYSCTL) += sysctl.o
+nfs-$(CONFIG_NFS_FSCACHE) += fscache-index.o
diff --git a/fs/nfs/fscache-index.c b/fs/nfs/fscache-index.c
new file mode 100644
index 0000000..6d5bb5c
--- /dev/null
+++ b/fs/nfs/fscache-index.c
@@ -0,0 +1,49 @@
+/* NFS FS-Cache index structure definition
+ *
+ * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public Licence
+ * as published by the Free Software Foundation; either version
+ * 2 of the Licence, or (at your option) any later version.
+ */
+
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/mm.h>
+#include <linux/nfs_fs.h>
+#include <linux/nfs_fs_sb.h>
+#include <linux/in6.h>
+
+#include "internal.h"
+#include "fscache.h"
+
+#define NFSDBG_FACILITY NFSDBG_FSCACHE
+
+/*
+ * Define the NFS filesystem for FS-Cache. Upon registration FS-Cache sticks
+ * the cookie for the top-level index object for NFS into here. The top-level
+ * index can than have other cache objects inserted into it.
+ */
+struct fscache_netfs nfs_fscache_netfs = {
+ .name = "nfs",
+ .version = 0,
+};
+
+/*
+ * Register NFS for caching
+ */
+int nfs_fscache_register(void)
+{
+ return fscache_register_netfs(&nfs_fscache_netfs);
+}
+
+/*
+ * Unregister NFS for caching
+ */
+void nfs_fscache_unregister(void)
+{
+ fscache_unregister_netfs(&nfs_fscache_netfs);
+}
diff --git a/fs/nfs/fscache.h b/fs/nfs/fscache.h
new file mode 100644
index 0000000..ccfcdc5
--- /dev/null
+++ b/fs/nfs/fscache.h
@@ -0,0 +1,35 @@
+/* NFS filesystem cache interface definitions
+ *
+ * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public Licence
+ * as published by the Free Software Foundation; either version
+ * 2 of the Licence, or (at your option) any later version.
+ */
+
+#ifndef _NFS_FSCACHE_H
+#define _NFS_FSCACHE_H
+
+#include <linux/nfs_fs.h>
+#include <linux/nfs_mount.h>
+#include <linux/nfs4_mount.h>
+#include <linux/fscache.h>
+
+#ifdef CONFIG_NFS_FSCACHE
+
+/*
+ * fscache-index.c
+ */
+extern struct fscache_netfs nfs_fscache_netfs;
+
+extern int nfs_fscache_register(void);
+extern void nfs_fscache_unregister(void);
+
+#else /* CONFIG_NFS_FSCACHE */
+static inline int nfs_fscache_register(void) { return 0; }
+static inline void nfs_fscache_unregister(void) {}
+
+#endif /* CONFIG_NFS_FSCACHE */
+#endif /* _NFS_FSCACHE_H */
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index a834d1d..cd29f41 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -46,6 +46,7 @@
#include "delegation.h"
#include "iostat.h"
#include "internal.h"
+#include "fscache.h"
#define NFSDBG_FACILITY NFSDBG_VFS
@@ -1436,6 +1437,10 @@ static int __init init_nfs_fs(void)
{
int err;
+ err = nfs_fscache_register();
+ if (err < 0)
+ goto out7;
+
err = nfsiod_start();
if (err)
goto out6;
@@ -1488,6 +1493,8 @@ out4:
out5:
nfsiod_stop();
out6:
+ nfs_fscache_unregister();
+out7:
return err;
}
@@ -1498,6 +1505,7 @@ static void __exit exit_nfs_fs(void)
nfs_destroy_readpagecache();
nfs_destroy_inodecache();
nfs_destroy_nfspagecache();
+ nfs_fscache_unregister();
#ifdef CONFIG_PROC_FS
rpc_proc_unregister("nfs");
#endif
next prev parent reply other threads:[~2009-04-01 23:06 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-01 23:03 [PATCH 00/43] Permit filesystem local caching [ver #46] David Howells
2009-04-01 23:03 ` [PATCH 01/43] Create a dynamically sized pool of threads for doing very slow work items " David Howells
2009-04-01 23:03 ` [PATCH 02/43] Make slow-work thread pool actually dynamic " David Howells
2009-04-01 23:03 ` [PATCH 03/43] Make the slow work pool configurable " David Howells
2009-04-01 23:03 ` [PATCH 04/43] Document the slow work thread pool " David Howells
2009-04-01 23:03 ` [PATCH 05/43] FS-Cache: Release page->private after failed readahead " David Howells
2009-04-02 13:51 ` Nick Piggin
2009-04-02 14:21 ` David Howells
2009-04-02 17:17 ` Rik van Riel
2009-04-01 23:03 ` [PATCH 06/43] FS-Cache: Recruit a couple of page flags for cache management " David Howells
2009-04-02 13:55 ` Nick Piggin
2009-04-02 14:36 ` David Howells
2009-04-02 15:25 ` Nick Piggin
2009-04-02 15:51 ` David Howells
2009-04-02 16:15 ` Nick Piggin
2009-04-02 16:53 ` Nick Piggin
2009-04-02 17:09 ` David Howells
2009-04-02 17:31 ` Nick Piggin
2009-04-02 17:40 ` David Howells
2009-04-02 18:14 ` Nick Piggin
2009-04-02 19:19 ` Trond Myklebust
2009-04-03 1:11 ` David Howells
2009-04-02 16:48 ` What I mean by a 'netfs' when dealing with FS-Cache David Howells
2009-04-02 17:06 ` David Howells
2009-04-02 18:23 ` [PATCH 06/43] FS-Cache: Recruit a couple of page flags for cache management [ver #46] Rik van Riel
2009-04-01 23:03 ` [PATCH 07/43] FS-Cache: Add the FS-Cache netfs API and documentation " David Howells
2009-04-01 23:04 ` [PATCH 08/43] FS-Cache: Add the FS-Cache cache backend " David Howells
2009-04-01 23:04 ` [PATCH 09/43] FS-Cache: Add main configuration option, module entry points and debugging " David Howells
2009-04-01 23:04 ` [PATCH 10/43] FS-Cache: Add use of /proc and presentation of statistics " David Howells
2009-04-01 23:04 ` [PATCH 11/43] FS-Cache: Root index definition " David Howells
2009-04-01 23:04 ` [PATCH 12/43] FS-Cache: Add cache tag handling " David Howells
2009-04-01 23:04 ` [PATCH 13/43] FS-Cache: Add cache management " David Howells
2009-04-01 23:04 ` [PATCH 14/43] FS-Cache: Provide a slab for cookie allocation " David Howells
2009-04-01 23:04 ` [PATCH 15/43] FS-Cache: Add netfs registration " David Howells
2009-04-01 23:04 ` [PATCH 16/43] FS-Cache: Bit waiting helpers " David Howells
2009-04-01 23:04 ` [PATCH 17/43] FS-Cache: Object management state machine " David Howells
2009-04-01 23:04 ` [PATCH 18/43] FS-Cache: Implement the cookie management part of the netfs API " David Howells
2009-04-01 23:04 ` [PATCH 19/43] FS-Cache: Add and document asynchronous operation handling " David Howells
2009-04-01 23:05 ` [PATCH 20/43] FS-Cache: Implement data I/O part of netfs API " David Howells
2009-04-01 23:05 ` [PATCH 21/43] CacheFiles: Be consistent about the use of mapping vs file->f_mapping in Ext3 " David Howells
2009-04-02 18:52 ` Rik van Riel
2009-04-01 23:05 ` [PATCH 22/43] CacheFiles: Add a hook to write a single page of data to an inode " David Howells
2009-04-02 14:00 ` Nick Piggin
2009-04-02 14:55 ` David Howells
2009-04-02 15:32 ` Nick Piggin
2009-04-02 16:37 ` Christoph Hellwig
2009-04-02 16:47 ` Nick Piggin
2009-04-02 16:55 ` Christoph Hellwig
2009-04-02 17:07 ` Nick Piggin
2009-04-02 17:26 ` Jan Kara
2009-04-02 17:22 ` David Howells
2009-04-02 18:18 ` David Howells
2009-04-02 22:44 ` David Howells
2009-04-03 13:41 ` David Howells
2009-04-02 16:02 ` David Howells
2009-04-02 15:32 ` Peter Staubach
2009-04-02 16:03 ` David Howells
2009-04-02 18:48 ` Rik van Riel
2009-04-01 23:05 ` [PATCH 23/43] CacheFiles: Permit the page lock state to be monitored " David Howells
2009-04-02 15:37 ` Nick Piggin
2009-04-02 16:14 ` David Howells
2009-04-02 16:35 ` Nick Piggin
2009-04-02 17:05 ` David Howells
2009-04-02 18:03 ` Nick Piggin
2009-04-02 18:51 ` Rik van Riel
2009-04-01 23:05 ` [PATCH 24/43] CacheFiles: Export things for CacheFiles " David Howells
2009-04-02 18:53 ` Rik van Riel
2009-04-01 23:05 ` [PATCH 25/43] CacheFiles: A cache that backs onto a mounted filesystem " David Howells
2009-04-01 23:05 ` [PATCH 26/43] FS-Cache: Make kAFS use FS-Cache " David Howells
2009-04-01 23:05 ` [PATCH 27/43] NFS: Add comment banners to some NFS functions " David Howells
2009-04-01 23:05 ` [PATCH 28/43] NFS: Add FS-Cache option bit and debug bit " David Howells
2009-04-01 23:05 ` [PATCH 29/43] NFS: Permit local filesystem caching to be enabled for NFS " David Howells
2009-04-01 23:05 ` David Howells [this message]
2009-04-01 23:06 ` [PATCH 31/43] NFS: Define and create server-level objects " David Howells
2009-04-01 23:06 ` [PATCH 32/43] NFS: Define and create superblock-level " David Howells
2009-04-01 23:06 ` [PATCH 33/43] NFS: Define and create inode-level cache " David Howells
2009-04-01 23:06 ` [PATCH 34/43] NFS: Use local disk inode cache " David Howells
2009-04-01 23:06 ` [PATCH 35/43] NFS: Invalidate FsCache page flags when cache removed " David Howells
2009-04-01 23:06 ` [PATCH 36/43] NFS: Add some new I/O counters for FS-Cache doing things for NFS " David Howells
2009-04-01 23:06 ` [PATCH 37/43] NFS: FS-Cache page management " David Howells
2009-04-01 23:06 ` [PATCH 38/43] NFS: Add read context retention for FS-Cache to call back with " David Howells
2009-04-01 23:06 ` [PATCH 39/43] NFS: nfs_readpage_async() needs to be accessible as a fallback for local caching " David Howells
2009-04-01 23:06 ` [PATCH 40/43] NFS: Read pages from FS-Cache into an NFS inode " David Howells
2009-04-01 23:06 ` [PATCH 41/43] NFS: Store pages from an NFS inode into a local cache " David Howells
2009-04-01 23:06 ` [PATCH 42/43] NFS: Display local caching state " David Howells
2009-04-01 23:07 ` [PATCH 43/43] NFS: Add mount options to enable local caching on NFS " 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=20090401230556.28177.74947.stgit@warthog.procyon.org.uk \
--to=dhowells@redhat.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nfsv4@linux-nfs.org \
--cc=viro@ZenIV.linux.org.uk \
/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).