diff options
author | Richard Weinberger <richard@nod.at> | 2015-03-03 23:55:49 +0100 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2015-03-26 23:27:50 +0100 |
commit | 7c9509924c711d45d7932548d2c632f44f64e7e3 (patch) | |
tree | 9c2f6be2f0622025cd308e990716224e0e7ca5f4 /fs/hostfs | |
parent | c278e81b8a0291f5adce43c4613ad569d76dc384 (diff) | |
download | op-kernel-dev-7c9509924c711d45d7932548d2c632f44f64e7e3.zip op-kernel-dev-7c9509924c711d45d7932548d2c632f44f64e7e3.tar.gz |
hostfs: Use __getname() in follow_link
Be consistent with all other functions in hostfs and just
use __getname().
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'fs/hostfs')
-rw-r--r-- | fs/hostfs/hostfs_kern.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 7260f16..c60d886 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c @@ -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); } |