xfs
[Top] [All Lists]

[PATCH 4/6] xfs: use ->readlink to implement the readlink_by_handle ioct

To: xfs@xxxxxxxxxxx
Subject: [PATCH 4/6] xfs: use ->readlink to implement the readlink_by_handle ioctl
From: Christoph Hellwig <hch@xxxxxx>
Date: Thu, 23 Apr 2015 21:07:42 +0200
Cc: viro@xxxxxxxxxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1429816064-10033-1-git-send-email-hch@xxxxxx>
References: <1429816064-10033-1-git-send-email-hch@xxxxxx>
Also drop the now unused readlink_copy export.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
 fs/namei.c         |  1 -
 fs/xfs/xfs_ioctl.c | 19 ++-----------------
 2 files changed, 2 insertions(+), 18 deletions(-)

diff --git a/fs/namei.c b/fs/namei.c
index c83145a..482c6a9 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -4420,7 +4420,6 @@ int readlink_copy(char __user *buffer, int buflen, const 
char *link)
 out:
        return len;
 }
-EXPORT_SYMBOL(readlink_copy);
 
 /*
  * A helper for ->readlink().  This should be used *ONLY* for symlinks that
diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
index 5f4a396..597609e 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -276,7 +276,6 @@ xfs_readlink_by_handle(
 {
        struct dentry           *dentry;
        __u32                   olen;
-       void                    *link;
        int                     error;
 
        if (!capable(CAP_SYS_ADMIN))
@@ -287,7 +286,7 @@ xfs_readlink_by_handle(
                return PTR_ERR(dentry);
 
        /* Restrict this handle operation to symlinks only. */
-       if (!d_is_symlink(dentry)) {
+       if (!dentry->d_inode->i_op->readlink) {
                error = -EINVAL;
                goto out_dput;
        }
@@ -297,21 +296,7 @@ xfs_readlink_by_handle(
                goto out_dput;
        }
 
-       link = kmalloc(MAXPATHLEN+1, GFP_KERNEL);
-       if (!link) {
-               error = -ENOMEM;
-               goto out_dput;
-       }
-
-       error = xfs_readlink(XFS_I(dentry->d_inode), link);
-       if (error)
-               goto out_kfree;
-       error = readlink_copy(hreq->ohandle, olen, link);
-       if (error)
-               goto out_kfree;
-
- out_kfree:
-       kfree(link);
+       error = dentry->d_inode->i_op->readlink(dentry, hreq->ohandle, olen);
  out_dput:
        dput(dentry);
        return error;
-- 
1.9.1

<Prev in Thread] Current Thread [Next in Thread>