summaryrefslogtreecommitdiffstats
path: root/fs/autofs/root.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2019-09-17 23:31:27 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2019-09-17 23:31:27 -0400
commit850d71acd52cd331474116fbd60cf8b3f3ded93e (patch)
treea4e4412794927eb053a440769510c453d046c43d /fs/autofs/root.c
parentc3aed16680cd0c0e5abf1bfc0dc1338e6a41b29f (diff)
downloadlinux-850d71acd52cd331474116fbd60cf8b3f3ded93e.tar.gz
linux-850d71acd52cd331474116fbd60cf8b3f3ded93e.tar.bz2
linux-850d71acd52cd331474116fbd60cf8b3f3ded93e.zip
autofs: don't bother with atomics for ino->count
All writers are serialized on inode->i_rwsem. So are the readers outside of expire.c. And the readers in expire.c are in the code that really doesn't care about narrow races - it's looking for expiry candidates and its callers have to cope with the possibility of a good candidate becoming busy right under them. No point bothering with atomic operations - just use int and mark the non-serialized readers with READ_ONCE(). Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/autofs/root.c')
-rw-r--r--fs/autofs/root.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/fs/autofs/root.c b/fs/autofs/root.c
index ae1d112b6f64..5aaa1732bf1e 100644
--- a/fs/autofs/root.c
+++ b/fs/autofs/root.c
@@ -569,9 +569,9 @@ static int autofs_dir_symlink(struct inode *dir,
d_add(dentry, inode);
dget(dentry);
- atomic_inc(&ino->count);
+ ino->count++;
p_ino = autofs_dentry_ino(dentry->d_parent);
- atomic_inc(&p_ino->count);
+ p_ino->count++;
dir->i_mtime = current_time(dir);
@@ -609,9 +609,9 @@ static int autofs_dir_unlink(struct inode *dir, struct dentry *dentry)
if (sbi->flags & AUTOFS_SBI_CATATONIC)
return -EACCES;
- atomic_dec(&ino->count);
+ ino->count--;
p_ino = autofs_dentry_ino(dentry->d_parent);
- atomic_dec(&p_ino->count);
+ p_ino->count--;
dput(ino->dentry);
d_inode(dentry)->i_size = 0;
@@ -669,7 +669,7 @@ static void autofs_clear_leaf_automount_flags(struct dentry *dentry)
/* only consider parents below dentrys in the root */
if (IS_ROOT(parent->d_parent))
return;
- if (atomic_read(&autofs_dentry_ino(parent)->count) == 2)
+ if (autofs_dentry_ino(parent)->count == 2)
managed_dentry_set_managed(parent);
}
@@ -691,7 +691,7 @@ static int autofs_dir_rmdir(struct inode *dir, struct dentry *dentry)
if (sbi->flags & AUTOFS_SBI_CATATONIC)
return -EACCES;
- if (atomic_read(&ino->count) != 1)
+ if (ino->count != 1)
return -ENOTEMPTY;
spin_lock(&sbi->lookup_lock);
@@ -702,9 +702,9 @@ static int autofs_dir_rmdir(struct inode *dir, struct dentry *dentry)
if (sbi->version < 5)
autofs_clear_leaf_automount_flags(dentry);
- atomic_dec(&ino->count);
+ ino->count--;
p_ino = autofs_dentry_ino(dentry->d_parent);
- atomic_dec(&p_ino->count);
+ p_ino->count--;
dput(ino->dentry);
d_inode(dentry)->i_size = 0;
clear_nlink(d_inode(dentry));
@@ -750,9 +750,9 @@ static int autofs_dir_mkdir(struct inode *dir,
autofs_set_leaf_automount_flags(dentry);
dget(dentry);
- atomic_inc(&ino->count);
+ ino->count++;
p_ino = autofs_dentry_ino(dentry->d_parent);
- atomic_inc(&p_ino->count);
+ p_ino->count++;
inc_nlink(dir);
dir->i_mtime = current_time(dir);