Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 46075
b: refs/heads/master
c: c79ba78
h: refs/heads/master
i:
  46073: 013d743
  46071: e7250a7
v: v3
  • Loading branch information
Trond Myklebust authored and Trond Myklebust committed Feb 3, 2007
1 parent ecf02d3 commit c8401bc
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ef75c7974b383769ae5741cf930b8aa4dcaef395
refs/heads/master: c79ba787c11e767ffaf8d723923afda99ba6c63c
19 changes: 14 additions & 5 deletions trunk/fs/nfs/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -637,7 +637,7 @@ int nfs_fsync_dir(struct file *filp, struct dentry *dentry, int datasync)
* In the case it has, we assume that the dentries are untrustworthy
* and may need to be looked up again.
*/
static inline int nfs_check_verifier(struct inode *dir, struct dentry *dentry)
static int nfs_check_verifier(struct inode *dir, struct dentry *dentry)
{
if (IS_ROOT(dentry))
return 1;
Expand All @@ -652,6 +652,12 @@ static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf)
dentry->d_fsdata = (void *)verf;
}

static void nfs_refresh_verifier(struct dentry * dentry, unsigned long verf)
{
if (time_after(verf, (unsigned long)dentry->d_fsdata))
nfs_set_verifier(dentry, verf);
}

/*
* Whenever an NFS operation succeeds, we know that the dentry
* is valid, so we update the revalidation timestamp.
Expand Down Expand Up @@ -785,7 +791,7 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
goto out_bad;

nfs_renew_times(dentry);
nfs_set_verifier(dentry, verifier);
nfs_refresh_verifier(dentry, verifier);
out_valid:
unlock_kernel();
dput(parent);
Expand Down Expand Up @@ -1085,7 +1091,7 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
verifier = nfs_save_change_attribute(dir);
ret = nfs4_open_revalidate(dir, dentry, openflags, nd);
if (!ret)
nfs_set_verifier(dentry, verifier);
nfs_refresh_verifier(dentry, verifier);
unlock_kernel();
out:
dput(parent);
Expand Down Expand Up @@ -1159,10 +1165,13 @@ static struct dentry *nfs_readdir_lookup(nfs_readdir_descriptor_t *desc)
dentry = alias;
}

out_renew:
nfs_renew_times(dentry);
nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
return dentry;
out_renew:
nfs_renew_times(dentry);
nfs_refresh_verifier(dentry, nfs_save_change_attribute(dir));
return dentry;
}

/*
Expand Down Expand Up @@ -1700,7 +1709,7 @@ static int nfs_rename(struct inode *old_dir, struct dentry *old_dentry,
if (!error) {
d_move(old_dentry, new_dentry);
nfs_renew_times(new_dentry);
nfs_set_verifier(new_dentry, nfs_save_change_attribute(new_dir));
nfs_refresh_verifier(new_dentry, nfs_save_change_attribute(new_dir));
}

/* new dentry created? */
Expand Down

0 comments on commit c8401bc

Please sign in to comment.