Commit 292c5ee802e9b969b84ee671a5e3001d94230f5b

Authored by Al Viro
1 parent c0bcc9d552

autofs4: keep symlink body in inode->i_private

gets rid of all ->free()/->u.symlink machinery in autofs; we simply
keep symlink bodies in inode->i_private and free them in ->evict_inode().

Acked-by: Ian Kent <raven@themaw.net>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Showing 4 changed files with 9 additions and 28 deletions Side-by-side Diff

fs/autofs4/autofs_i.h
... ... @@ -91,11 +91,6 @@
91 91  
92 92 mode_t mode;
93 93 size_t size;
94   -
95   - void (*free)(struct autofs_info *);
96   - union {
97   - const char *symlink;
98   - } u;
99 94 };
100 95  
101 96 #define AUTOFS_INF_EXPIRING (1<<0) /* dentry is in the process of expiring */
... ... @@ -22,14 +22,6 @@
22 22 #include "autofs_i.h"
23 23 #include <linux/module.h>
24 24  
25   -static void ino_lnkfree(struct autofs_info *ino)
26   -{
27   - if (ino->u.symlink) {
28   - kfree(ino->u.symlink);
29   - ino->u.symlink = NULL;
30   - }
31   -}
32   -
33 25 struct autofs_info *autofs4_init_ino(struct autofs_info *ino,
34 26 struct autofs_sb_info *sbi, mode_t mode)
35 27 {
... ... @@ -60,16 +52,6 @@
60 52  
61 53 ino->sbi = sbi;
62 54  
63   - if (reinit && ino->free)
64   - (ino->free)(ino);
65   -
66   - memset(&ino->u, 0, sizeof(ino->u));
67   -
68   - ino->free = NULL;
69   -
70   - if (S_ISLNK(mode))
71   - ino->free = ino_lnkfree;
72   -
73 55 return ino;
74 56 }
75 57  
... ... @@ -79,8 +61,6 @@
79 61 ino->dentry->d_fsdata = NULL;
80 62 ino->dentry = NULL;
81 63 }
82   - if (ino->free)
83   - (ino->free)(ino);
84 64 kfree(ino);
85 65 }
86 66  
87 67  
... ... @@ -136,9 +116,16 @@
136 116 return 0;
137 117 }
138 118  
  119 +static void autofs4_evict_inode(struct inode *inode)
  120 +{
  121 + end_writeback(inode);
  122 + kfree(inode->i_private);
  123 +}
  124 +
139 125 static const struct super_operations autofs4_sops = {
140 126 .statfs = simple_statfs,
141 127 .show_options = autofs4_show_options,
  128 + .evict_inode = autofs4_evict_inode,
142 129 };
143 130  
144 131 enum {Opt_err, Opt_fd, Opt_uid, Opt_gid, Opt_pgrp, Opt_minproto, Opt_maxproto,
... ... @@ -561,6 +561,7 @@
561 561 kfree(ino);
562 562 return -ENOMEM;
563 563 }
  564 + inode->i_private = cp;
564 565 d_add(dentry, inode);
565 566  
566 567 dentry->d_fsdata = ino;
... ... @@ -570,7 +571,6 @@
570 571 if (p_ino && dentry->d_parent != dentry)
571 572 atomic_inc(&p_ino->count);
572 573  
573   - ino->u.symlink = cp;
574 574 dir->i_mtime = CURRENT_TIME;
575 575  
576 576 return 0;
fs/autofs4/symlink.c
... ... @@ -14,8 +14,7 @@
14 14  
15 15 static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
16 16 {
17   - struct autofs_info *ino = autofs4_dentry_ino(dentry);
18   - nd_set_link(nd, (char *)ino->u.symlink);
  17 + nd_set_link(nd, dentry->d_inode->i_private);
19 18 return NULL;
20 19 }
21 20