From: Dave Wysochanski <[email protected]>

The new FS-Cache netfs API changes the cookie API slightly.

The changes to fscache_acquire_cookie are:
* remove struct fscache_cookie_def
* add 'type' of cookie (was member of fscache_cookie_def)
* add 'name' of cookie (was member of fscache_cookie_def)
* add 'advice' flags (tells cache how to handle object); set to 0
* add 'preferred_cache' tag (if NULL, derive from parent)
* remove 'netfs_data'
* remove 'enable' (See fscache_use_cookie())

The changes to fscache_relinquish_cookie are:
* remove 'aux_data'

Signed-off-by: Dave Wysochanski <[email protected]>
Signed-off-by: David Howells <[email protected]>
cc: Trond Myklebust <[email protected]>
cc: Anna Schumaker <[email protected]>
cc: [email protected]
---

 fs/nfs/fscache-index.c |   68 ------------------------------------------------
 fs/nfs/fscache.c       |   44 ++++++++++++++++++++-----------
 fs/nfs/fscache.h       |    3 --
 3 files changed, 29 insertions(+), 86 deletions(-)

diff --git a/fs/nfs/fscache-index.c b/fs/nfs/fscache-index.c
index 4bd5ce736193..b4fdacd955f3 100644
--- a/fs/nfs/fscache-index.c
+++ b/fs/nfs/fscache-index.c
@@ -44,71 +44,3 @@ void nfs_fscache_unregister(void)
 {
        fscache_unregister_netfs(&nfs_fscache_netfs);
 }
-
-/*
- * Define the server object for FS-Cache.  This is used to describe a server
- * object to fscache_acquire_cookie().  It is keyed by the NFS protocol and
- * server address parameters.
- */
-const struct fscache_cookie_def nfs_fscache_server_index_def = {
-       .name           = "NFS.server",
-       .type           = FSCACHE_COOKIE_TYPE_INDEX,
-};
-
-/*
- * Define the superblock object for FS-Cache.  This is used to describe a
- * superblock object to fscache_acquire_cookie().  It is keyed by all the NFS
- * parameters that might cause a separate superblock.
- */
-const struct fscache_cookie_def nfs_fscache_super_index_def = {
-       .name           = "NFS.super",
-       .type           = FSCACHE_COOKIE_TYPE_INDEX,
-};
-
-/*
- * Consult the netfs about the state of an object
- * - This function can be absent if the index carries no state data
- * - The netfs data from the cookie being used as the target is
- *   presented, as is the auxiliary data
- */
-static
-enum fscache_checkaux nfs_fscache_inode_check_aux(void *cookie_netfs_data,
-                                                 const void *data,
-                                                 uint16_t datalen,
-                                                 loff_t object_size)
-{
-       struct nfs_fscache_inode_auxdata auxdata;
-       struct nfs_inode *nfsi = cookie_netfs_data;
-
-       if (datalen != sizeof(auxdata))
-               return FSCACHE_CHECKAUX_OBSOLETE;
-
-       memset(&auxdata, 0, sizeof(auxdata));
-       auxdata.mtime_sec  = nfsi->vfs_inode.i_mtime.tv_sec;
-       auxdata.mtime_nsec = nfsi->vfs_inode.i_mtime.tv_nsec;
-       auxdata.ctime_sec  = nfsi->vfs_inode.i_ctime.tv_sec;
-       auxdata.ctime_nsec = nfsi->vfs_inode.i_ctime.tv_nsec;
-
-       if (NFS_SERVER(&nfsi->vfs_inode)->nfs_client->rpc_ops->version == 4)
-               auxdata.change_attr = inode_peek_iversion_raw(&nfsi->vfs_inode);
-
-       if (memcmp(data, &auxdata, datalen) != 0)
-               return FSCACHE_CHECKAUX_OBSOLETE;
-
-       return FSCACHE_CHECKAUX_OKAY;
-}
-
-/*
- * Define the inode object for FS-Cache.  This is used to describe an inode
- * object to fscache_acquire_cookie().  It is keyed by the NFS file handle for
- * an inode.
- *
- * Coherency is managed by comparing the copies of i_size, i_mtime and i_ctime
- * held in the cache auxiliary data for the data storage object with those in
- * the inode struct in memory.
- */
-const struct fscache_cookie_def nfs_fscache_inode_object_def = {
-       .name           = "NFS.fh",
-       .type           = FSCACHE_COOKIE_TYPE_DATAFILE,
-       .check_aux      = nfs_fscache_inode_check_aux,
-};
diff --git a/fs/nfs/fscache.c b/fs/nfs/fscache.c
index 68e266a37675..514d50d079a2 100644
--- a/fs/nfs/fscache.c
+++ b/fs/nfs/fscache.c
@@ -81,10 +81,15 @@ void nfs_fscache_get_client_cookie(struct nfs_client *clp)
 
        /* create a cache index for looking up filehandles */
        clp->fscache = fscache_acquire_cookie(nfs_fscache_netfs.primary_index,
-                                             &nfs_fscache_server_index_def,
-                                             &key, len,
-                                             NULL, 0,
-                                             clp, 0, true);
+                                             FSCACHE_COOKIE_TYPE_INDEX,
+                                             "NFS.server",
+                                             0,    /* advice */
+                                             NULL, /* preferred_cache */
+                                             &key, /* index_key */
+                                             len,
+                                             NULL, /* aux_data */
+                                             0,
+                                             0);
        dfprintk(FSCACHE, "NFS: get client cookie (0x%p/0x%p)\n",
                 clp, clp->fscache);
 }
@@ -97,7 +102,7 @@ void nfs_fscache_release_client_cookie(struct nfs_client 
*clp)
        dfprintk(FSCACHE, "NFS: releasing client cookie (0x%p/0x%p)\n",
                 clp, clp->fscache);
 
-       fscache_relinquish_cookie(clp->fscache, NULL, false);
+       fscache_relinquish_cookie(clp->fscache, false);
        clp->fscache = NULL;
 }
 
@@ -185,11 +190,15 @@ void nfs_fscache_get_super_cookie(struct super_block *sb, 
const char *uniq, int
 
        /* create a cache index for looking up filehandles */
        nfss->fscache = fscache_acquire_cookie(nfss->nfs_client->fscache,
-                                              &nfs_fscache_super_index_def,
-                                              &key->key,
+                                              FSCACHE_COOKIE_TYPE_INDEX,
+                                              "NFS.super",
+                                              0,    /* advice */
+                                              NULL, /* preferred_cache */
+                                              &key->key,  /* index_key */
                                               sizeof(key->key) + ulen,
-                                              NULL, 0,
-                                              nfss, 0, true);
+                                              NULL, /* aux_data */
+                                              0,
+                                              0);
        dfprintk(FSCACHE, "NFS: get superblock cookie (0x%p/0x%p)\n",
                 nfss, nfss->fscache);
        return;
@@ -213,7 +222,7 @@ void nfs_fscache_release_super_cookie(struct super_block 
*sb)
        dfprintk(FSCACHE, "NFS: releasing superblock cookie (0x%p/0x%p)\n",
                 nfss, nfss->fscache);
 
-       fscache_relinquish_cookie(nfss->fscache, NULL, false);
+       fscache_relinquish_cookie(nfss->fscache, false);
        nfss->fscache = NULL;
 
        if (nfss->fscache_key) {
@@ -254,10 +263,15 @@ void nfs_fscache_init_inode(struct inode *inode)
        nfs_fscache_update_auxdata(&auxdata, nfsi);
 
        nfsi->fscache = fscache_acquire_cookie(NFS_SB(inode->i_sb)->fscache,
-                                              &nfs_fscache_inode_object_def,
-                                              nfsi->fh.data, nfsi->fh.size,
-                                              &auxdata, sizeof(auxdata),
-                                              nfsi, nfsi->vfs_inode.i_size, 
false);
+                                              FSCACHE_COOKIE_TYPE_DATAFILE,
+                                              "NFS.fh",
+                                              0,             /* advice */
+                                              NULL, /* preferred_cache */
+                                              nfsi->fh.data, /* index_key */
+                                              nfsi->fh.size,
+                                              &auxdata,      /* aux_data */
+                                              sizeof(auxdata),
+                                              i_size_read(&nfsi->vfs_inode));
 }
 
 /*
@@ -272,7 +286,7 @@ void nfs_fscache_clear_inode(struct inode *inode)
        dfprintk(FSCACHE, "NFS: clear cookie (0x%p/0x%p)\n", nfsi, cookie);
 
        nfs_fscache_update_auxdata(&auxdata, nfsi);
-       fscache_relinquish_cookie(cookie, &auxdata, false);
+       fscache_relinquish_cookie(cookie, false);
        nfsi->fscache = NULL;
 }
 
diff --git a/fs/nfs/fscache.h b/fs/nfs/fscache.h
index 679055720dae..1e30fcb45665 100644
--- a/fs/nfs/fscache.h
+++ b/fs/nfs/fscache.h
@@ -74,9 +74,6 @@ struct nfs_fscache_inode_auxdata {
  * fscache-index.c
  */
 extern struct fscache_netfs nfs_fscache_netfs;
-extern const struct fscache_cookie_def nfs_fscache_server_index_def;
-extern const struct fscache_cookie_def nfs_fscache_super_index_def;
-extern const struct fscache_cookie_def nfs_fscache_inode_object_def;
 
 extern int nfs_fscache_register(void);
 extern void nfs_fscache_unregister(void);


--
Linux-cachefs mailing list
[email protected]
https://listman.redhat.com/mailman/listinfo/linux-cachefs

Reply via email to