lkml.org 
[lkml]   [2008]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 40/45] NFS: Add read context retention for FS-Cache to call back with [ver #41]
    Date
    Add read context retention so that FS-Cache can call back into NFS when a read
    operation on the cache fails EIO rather than reading data. This permits NFS to
    then fetch the data from the server instead using the appropriate security
    context.

    Signed-off-by: David Howells <dhowells@redhat.com>
    ---

    fs/nfs/fscache-index.c | 26 ++++++++++++++++++++++++++
    1 files changed, 26 insertions(+), 0 deletions(-)


    diff --git a/fs/nfs/fscache-index.c b/fs/nfs/fscache-index.c
    index a119b56..5b10064 100644
    --- a/fs/nfs/fscache-index.c
    +++ b/fs/nfs/fscache-index.c
    @@ -292,6 +292,30 @@ static void nfs_fscache_inode_now_uncached(void *cookie_netfs_data)
    }

    /*
    + * Get an extra reference on a read context.
    + * - This function can be absent if the completion function doesn't require a
    + * context.
    + * - The read context is passed back to NFS in the event that a data read on the
    + * cache fails with EIO - in which case the server must be contacted to
    + * retrieve the data, which requires the read context for security.
    + */
    +static void nfs_fh_get_context(void *cookie_netfs_data, void *context)
    +{
    + get_nfs_open_context(context);
    +}
    +
    +/*
    + * Release an extra reference on a read context.
    + * - This function can be absent if the completion function doesn't require a
    + * context.
    + */
    +static void nfs_fh_put_context(void *cookie_netfs_data, void *context)
    +{
    + if (context)
    + put_nfs_open_context(context);
    +}
    +
    +/*
    * 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.
    @@ -308,4 +332,6 @@ const struct fscache_cookie_def nfs_fscache_inode_object_def = {
    .get_aux = nfs_fscache_inode_get_aux,
    .check_aux = nfs_fscache_inode_check_aux,
    .now_uncached = nfs_fscache_inode_now_uncached,
    + .get_context = nfs_fh_get_context,
    + .put_context = nfs_fh_put_context,
    };


    \
     
     \ /
      Last update: 2008-11-20 16:01    [W:0.029 / U:0.012 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site