lkml.org 
[lkml]   [2006]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 05/19] NFS: More page cache revalidation fixups
    -stable review patch.  If anyone has any objections, please let us know.

    ------------------
    From: Trond Myklebust <Trond.Myklebust@netapp.com>

    Whenever the directory changes, we want to make sure that we always
    invalidate its page cache. Fix up update_changeattr() and
    nfs_mark_for_revalidate() so that they do so.

    Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    fs/nfs/nfs4proc.c | 10 +++++-----
    include/linux/nfs_fs.h | 6 +++++-
    2 files changed, 10 insertions(+), 6 deletions(-)

    --- linux-2.6.17.13.orig/fs/nfs/nfs4proc.c
    +++ linux-2.6.17.13/fs/nfs/nfs4proc.c
    @@ -185,15 +185,15 @@ static void renew_lease(const struct nfs
    spin_unlock(&clp->cl_lock);
    }

    -static void update_changeattr(struct inode *inode, struct nfs4_change_info *cinfo)
    +static void update_changeattr(struct inode *dir, struct nfs4_change_info *cinfo)
    {
    - struct nfs_inode *nfsi = NFS_I(inode);
    + struct nfs_inode *nfsi = NFS_I(dir);

    - spin_lock(&inode->i_lock);
    - nfsi->cache_validity |= NFS_INO_INVALID_ATTR;
    + spin_lock(&dir->i_lock);
    + nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_DATA;
    if (cinfo->before == nfsi->change_attr && cinfo->atomic)
    nfsi->change_attr = cinfo->after;
    - spin_unlock(&inode->i_lock);
    + spin_unlock(&dir->i_lock);
    }

    struct nfs4_opendata {
    --- linux-2.6.17.13.orig/include/linux/nfs_fs.h
    +++ linux-2.6.17.13/include/linux/nfs_fs.h
    @@ -234,8 +234,12 @@ static inline int nfs_caches_unstable(st

    static inline void nfs_mark_for_revalidate(struct inode *inode)
    {
    + struct nfs_inode *nfsi = NFS_I(inode);
    +
    spin_lock(&inode->i_lock);
    - NFS_I(inode)->cache_validity |= NFS_INO_INVALID_ATTR | NFS_INO_INVALID_ACCESS;
    + nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_ACCESS;
    + if (S_ISDIR(inode->i_mode))
    + nfsi->cache_validity |= NFS_INO_REVAL_PAGECACHE|NFS_INO_INVALID_DATA;
    spin_unlock(&inode->i_lock);
    }

    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-10-10 19:21    [W:0.021 / U:0.148 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site