diff options
Diffstat (limited to 'fs/kernfs/symlink.c')
-rw-r--r-- | fs/kernfs/symlink.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/kernfs/symlink.c b/fs/kernfs/symlink.c index db272528ab5b..ffae8579045d 100644 --- a/fs/kernfs/symlink.c +++ b/fs/kernfs/symlink.c | |||
@@ -112,10 +112,15 @@ static int kernfs_getlink(struct dentry *dentry, char *path) | |||
112 | return error; | 112 | return error; |
113 | } | 113 | } |
114 | 114 | ||
115 | static const char *kernfs_iop_follow_link(struct dentry *dentry, void **cookie) | 115 | static const char *kernfs_iop_get_link(struct dentry *dentry, |
116 | struct inode *inode, void **cookie) | ||
116 | { | 117 | { |
117 | int error = -ENOMEM; | 118 | int error = -ENOMEM; |
118 | unsigned long page = get_zeroed_page(GFP_KERNEL); | 119 | unsigned long page; |
120 | |||
121 | if (!dentry) | ||
122 | return ERR_PTR(-ECHILD); | ||
123 | page = get_zeroed_page(GFP_KERNEL); | ||
119 | if (!page) | 124 | if (!page) |
120 | return ERR_PTR(-ENOMEM); | 125 | return ERR_PTR(-ENOMEM); |
121 | error = kernfs_getlink(dentry, (char *)page); | 126 | error = kernfs_getlink(dentry, (char *)page); |
@@ -132,7 +137,7 @@ const struct inode_operations kernfs_symlink_iops = { | |||
132 | .getxattr = kernfs_iop_getxattr, | 137 | .getxattr = kernfs_iop_getxattr, |
133 | .listxattr = kernfs_iop_listxattr, | 138 | .listxattr = kernfs_iop_listxattr, |
134 | .readlink = generic_readlink, | 139 | .readlink = generic_readlink, |
135 | .follow_link = kernfs_iop_follow_link, | 140 | .get_link = kernfs_iop_get_link, |
136 | .put_link = free_page_put_link, | 141 | .put_link = free_page_put_link, |
137 | .setattr = kernfs_iop_setattr, | 142 | .setattr = kernfs_iop_setattr, |
138 | .getattr = kernfs_iop_getattr, | 143 | .getattr = kernfs_iop_getattr, |