Commit 292c5ee802e9b969b84ee671a5e3001d94230f5b
1 parent
c0bcc9d552
Exists in
master
and in
4 other branches
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
fs/autofs4/inode.c
... | ... | @@ -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, |
fs/autofs4/root.c
... | ... | @@ -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 |