]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - fs/hostfs/hostfs_kern.c
switch ->get_link() to delayed_call, kill ->put_link()
[mirror_ubuntu-artful-kernel.git] / fs / hostfs / hostfs_kern.c
index 6ce5309ecb7b0a6039dd47556bbd9cd87f473f02..7db524cc85b6bf12358ce2ea1ea7df998b523be0 100644 (file)
@@ -893,12 +893,13 @@ static const struct inode_operations hostfs_dir_iops = {
 };
 
 static const char *hostfs_get_link(struct dentry *dentry,
-                                  struct inode *inode, void **cookie)
+                                  struct inode *inode,
+                                  struct delayed_call *done)
 {
        char *link;
        if (!dentry)
                return ERR_PTR(-ECHILD);
-       link = __getname();
+       link = kmalloc(PATH_MAX, GFP_KERNEL);
        if (link) {
                char *path = dentry_name(dentry);
                int err = -ENOMEM;
@@ -909,25 +910,20 @@ static const char *hostfs_get_link(struct dentry *dentry,
                        __putname(path);
                }
                if (err < 0) {
-                       __putname(link);
+                       kfree(link);
                        return ERR_PTR(err);
                }
        } else {
                return ERR_PTR(-ENOMEM);
        }
 
-       return *cookie = link;
-}
-
-static void hostfs_put_link(struct inode *unused, void *cookie)
-{
-       __putname(cookie);
+       set_delayed_call(done, kfree_link, link);
+       return link;
 }
 
 static const struct inode_operations hostfs_link_iops = {
        .readlink       = generic_readlink,
        .get_link       = hostfs_get_link,
-       .put_link       = hostfs_put_link,
 };
 
 static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)