]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
hostfs: Use __getname() in follow_link
authorRichard Weinberger <richard@nod.at>
Tue, 3 Mar 2015 22:55:49 +0000 (23:55 +0100)
committerRichard Weinberger <richard@nod.at>
Thu, 26 Mar 2015 22:27:50 +0000 (23:27 +0100)
Be consistent with all other functions in hostfs and just
use __getname().

Signed-off-by: Richard Weinberger <richard@nod.at>
fs/hostfs/hostfs_kern.c

index 7260f162db41ca445192c1130b46f40cd242edb3..c60d886230efedeff9cbad1996bd6f5b4d3f662a 100644 (file)
@@ -142,21 +142,19 @@ static char *follow_link(char *link)
        int len, n;
        char *name, *resolved, *end;
 
-       len = 64;
-       while (1) {
+       name = __getname();
+       if (!name) {
                n = -ENOMEM;
-               name = kmalloc(len, GFP_KERNEL);
-               if (name == NULL)
-                       goto out;
-
-               n = hostfs_do_readlink(link, name, len);
-               if (n < len)
-                       break;
-               len *= 2;
-               kfree(name);
+               goto out_free;
        }
+
+       n = hostfs_do_readlink(link, name, PATH_MAX);
        if (n < 0)
                goto out_free;
+       else if (n == PATH_MAX) {
+               n = -E2BIG;
+               goto out_free;
+       }
 
        if (*name == '/')
                return name;
@@ -175,13 +173,12 @@ static char *follow_link(char *link)
        }
 
        sprintf(resolved, "%s%s", link, name);
-       kfree(name);
+       __putname(name);
        kfree(link);
        return resolved;
 
  out_free:
-       kfree(name);
- out:
+       __putname(name);
        return ERR_PTR(n);
 }