| From 77adddc8f8df5a15b6410475f687247e125c08d4 Mon Sep 17 00:00:00 2001 |
| From: David Howells <dhowells@redhat.com> |
| Date: Sat, 11 Apr 2020 08:50:45 +0100 |
| Subject: [PATCH] afs: Fix afs_d_validate() to set the right directory version |
| |
| commit 40fc81027f892284ce31f8b6de1e497f5b47e71f upstream. |
| |
| If a dentry's version is somewhere between invalid_before and the current |
| directory version, we should be setting it forward to the current version, |
| not backwards to the invalid_before version. Note that we're only doing |
| this at all because dentry::d_fsdata isn't large enough on a 32-bit system. |
| |
| Fix this by using a separate variable for invalid_before so that we don't |
| accidentally clobber the current dir version. |
| |
| Fixes: a4ff7401fbfa ("afs: Keep track of invalid-before version for dentry coherency") |
| Signed-off-by: David Howells <dhowells@redhat.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/afs/dir.c b/fs/afs/dir.c |
| index 047de45bfcce..4e2bc3d78fc5 100644 |
| --- a/fs/afs/dir.c |
| +++ b/fs/afs/dir.c |
| @@ -981,7 +981,7 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags) |
| struct dentry *parent; |
| struct inode *inode; |
| struct key *key; |
| - afs_dataversion_t dir_version; |
| + afs_dataversion_t dir_version, invalid_before; |
| long de_version; |
| int ret; |
| |
| @@ -1033,8 +1033,8 @@ static int afs_d_revalidate(struct dentry *dentry, unsigned int flags) |
| if (de_version == (long)dir_version) |
| goto out_valid_noupdate; |
| |
| - dir_version = dir->invalid_before; |
| - if (de_version - (long)dir_version >= 0) |
| + invalid_before = dir->invalid_before; |
| + if (de_version - (long)invalid_before >= 0) |
| goto out_valid; |
| |
| _debug("dir modified"); |
| -- |
| 2.7.4 |
| |