aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/autofs4/autofs_i.h3
-rw-r--r--fs/autofs4/inode.c32
-rw-r--r--fs/autofs4/root.c6
3 files changed, 15 insertions, 26 deletions
diff --git a/fs/autofs4/autofs_i.h b/fs/autofs4/autofs_i.h
index 8f15162f1672..bfa0c6e542f2 100644
--- a/fs/autofs4/autofs_i.h
+++ b/fs/autofs4/autofs_i.h
@@ -277,7 +277,8 @@ static inline void managed_dentry_clear_managed(struct dentry *dentry)
277/* Initializing function */ 277/* Initializing function */
278 278
279int autofs4_fill_super(struct super_block *, void *, int); 279int autofs4_fill_super(struct super_block *, void *, int);
280struct autofs_info *autofs4_init_ino(struct autofs_info *, struct autofs_sb_info *sbi); 280struct autofs_info *autofs4_new_ino(struct autofs_sb_info *);
281void autofs4_clean_ino(struct autofs_info *);
281 282
282/* Queue management functions */ 283/* Queue management functions */
283 284
diff --git a/fs/autofs4/inode.c b/fs/autofs4/inode.c
index b3f9477c9745..0df0c7c46fa2 100644
--- a/fs/autofs4/inode.c
+++ b/fs/autofs4/inode.c
@@ -22,35 +22,23 @@
22#include "autofs_i.h" 22#include "autofs_i.h"
23#include <linux/module.h> 23#include <linux/module.h>
24 24
25struct autofs_info *autofs4_init_ino(struct autofs_info *ino, 25struct autofs_info *autofs4_new_ino(struct autofs_sb_info *sbi)
26 struct autofs_sb_info *sbi)
27{ 26{
28 int reinit = 1; 27 struct autofs_info *ino = kzalloc(sizeof(*ino), GFP_KERNEL);
29 28 if (ino) {
30 if (ino == NULL) {
31 reinit = 0;
32 ino = kmalloc(sizeof(*ino), GFP_KERNEL);
33 }
34
35 if (ino == NULL)
36 return NULL;
37
38 if (!reinit) {
39 ino->flags = 0;
40 ino->dentry = NULL;
41 INIT_LIST_HEAD(&ino->active); 29 INIT_LIST_HEAD(&ino->active);
42 ino->active_count = 0;
43 INIT_LIST_HEAD(&ino->expiring); 30 INIT_LIST_HEAD(&ino->expiring);
44 atomic_set(&ino->count, 0); 31 ino->last_used = jiffies;
32 ino->sbi = sbi;
45 } 33 }
34 return ino;
35}
46 36
37void autofs4_clean_ino(struct autofs_info *ino)
38{
47 ino->uid = 0; 39 ino->uid = 0;
48 ino->gid = 0; 40 ino->gid = 0;
49 ino->last_used = jiffies; 41 ino->last_used = jiffies;
50
51 ino->sbi = sbi;
52
53 return ino;
54} 42}
55 43
56void autofs4_free_ino(struct autofs_info *ino) 44void autofs4_free_ino(struct autofs_info *ino)
@@ -256,7 +244,7 @@ int autofs4_fill_super(struct super_block *s, void *data, int silent)
256 /* 244 /*
257 * Get the root inode and dentry, but defer checking for errors. 245 * Get the root inode and dentry, but defer checking for errors.
258 */ 246 */
259 ino = autofs4_init_ino(NULL, sbi); 247 ino = autofs4_new_ino(sbi);
260 if (!ino) 248 if (!ino)
261 goto fail_free; 249 goto fail_free;
262 root_inode = autofs4_get_inode(s, S_IFDIR | 0755); 250 root_inode = autofs4_get_inode(s, S_IFDIR | 0755);
diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c
index a5b93e8f49b5..f7c97c084c1f 100644
--- a/fs/autofs4/root.c
+++ b/fs/autofs4/root.c
@@ -508,7 +508,7 @@ static struct dentry *autofs4_lookup(struct inode *dir, struct dentry *dentry, s
508 if (autofs_type_indirect(sbi->type) && IS_ROOT(dentry->d_parent)) 508 if (autofs_type_indirect(sbi->type) && IS_ROOT(dentry->d_parent))
509 __managed_dentry_set_managed(dentry); 509 __managed_dentry_set_managed(dentry);
510 510
511 ino = autofs4_init_ino(NULL, sbi); 511 ino = autofs4_new_ino(sbi);
512 if (!ino) 512 if (!ino)
513 return ERR_PTR(-ENOMEM); 513 return ERR_PTR(-ENOMEM);
514 514
@@ -541,7 +541,7 @@ static int autofs4_dir_symlink(struct inode *dir,
541 541
542 BUG_ON(!ino); 542 BUG_ON(!ino);
543 543
544 autofs4_init_ino(ino, sbi); 544 autofs4_clean_ino(ino);
545 545
546 autofs4_del_active(dentry); 546 autofs4_del_active(dentry);
547 547
@@ -732,7 +732,7 @@ static int autofs4_dir_mkdir(struct inode *dir, struct dentry *dentry, int mode)
732 732
733 BUG_ON(!ino); 733 BUG_ON(!ino);
734 734
735 autofs4_init_ino(ino, sbi); 735 autofs4_clean_ino(ino);
736 736
737 autofs4_del_active(dentry); 737 autofs4_del_active(dentry);
738 738