mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
convert autofs
creation/removal is via normal VFS paths; make ->mkdir() and ->symlink() use d_make_persistent(); ->rmdir() and ->unlink() - d_make_discardable() instead of dput() and that's it. d_make_persistent() works for unhashed just fine... Note that only persistent dentries are ever hashed there; unusual absense of ->d_delete() in dentry_operations is due to that - anything that has refcount reach 0 will be unhashed there, so it won't get to checking ->d_delete anyway. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -55,7 +55,7 @@ void autofs_kill_sb(struct super_block *sb)
|
||||
}
|
||||
|
||||
pr_debug("shutting down\n");
|
||||
kill_litter_super(sb);
|
||||
kill_anon_super(sb);
|
||||
if (sbi)
|
||||
kfree_rcu(sbi, rcu);
|
||||
}
|
||||
|
||||
@@ -594,9 +594,8 @@ static int autofs_dir_symlink(struct mnt_idmap *idmap,
|
||||
}
|
||||
inode->i_private = cp;
|
||||
inode->i_size = size;
|
||||
d_add(dentry, inode);
|
||||
|
||||
dget(dentry);
|
||||
d_make_persistent(dentry, inode);
|
||||
p_ino = autofs_dentry_ino(dentry->d_parent);
|
||||
p_ino->count++;
|
||||
|
||||
@@ -627,7 +626,7 @@ static int autofs_dir_unlink(struct inode *dir, struct dentry *dentry)
|
||||
|
||||
p_ino = autofs_dentry_ino(dentry->d_parent);
|
||||
p_ino->count--;
|
||||
dput(dentry);
|
||||
d_make_discardable(dentry);
|
||||
|
||||
d_inode(dentry)->i_size = 0;
|
||||
clear_nlink(d_inode(dentry));
|
||||
@@ -709,7 +708,7 @@ static int autofs_dir_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
|
||||
p_ino = autofs_dentry_ino(dentry->d_parent);
|
||||
p_ino->count--;
|
||||
dput(dentry);
|
||||
d_make_discardable(dentry);
|
||||
d_inode(dentry)->i_size = 0;
|
||||
clear_nlink(d_inode(dentry));
|
||||
|
||||
@@ -739,12 +738,11 @@ static struct dentry *autofs_dir_mkdir(struct mnt_idmap *idmap,
|
||||
inode = autofs_get_inode(dir->i_sb, S_IFDIR | mode);
|
||||
if (!inode)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
d_add(dentry, inode);
|
||||
|
||||
if (sbi->version < 5)
|
||||
autofs_set_leaf_automount_flags(dentry);
|
||||
|
||||
dget(dentry);
|
||||
d_make_persistent(dentry, inode);
|
||||
p_ino = autofs_dentry_ino(dentry->d_parent);
|
||||
p_ino->count++;
|
||||
inc_nlink(dir);
|
||||
|
||||
Reference in New Issue
Block a user