Re: [PATCH 1/2] ceph: use ceph_mdsc_build_path instead of clone_dentry_name

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2019-04-30 at 07:22 -0400, Jeff Layton wrote:
> While it may be slightly more efficient, it's probably not worthwhile to
> optimize for the case that clone_dentry_name handles. We can get the
> same result by just calling ceph_mdsc_build_path when the parent isn't
> locked, with less code duplication.
> 
> Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> ---
>  fs/ceph/mds_client.c | 41 +++--------------------------------------
>  1 file changed, 3 insertions(+), 38 deletions(-)
> 
> diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
> index 74cb3078ea63..e8245df09691 100644
> --- a/fs/ceph/mds_client.c
> +++ b/fs/ceph/mds_client.c
> @@ -2170,55 +2170,20 @@ char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *pbase,
>  	return path;
>  }
>  
> -/* Duplicate the dentry->d_name.name safely */
> -static int clone_dentry_name(struct dentry *dentry, const char **ppath,
> -			     int *ppathlen)
> -{
> -	u32 len;
> -	char *name;
> -retry:
> -	len = READ_ONCE(dentry->d_name.len);
> -	name = kmalloc(len + 1, GFP_NOFS);
> -	if (!name)
> -		return -ENOMEM;
> -
> -	spin_lock(&dentry->d_lock);
> -	if (dentry->d_name.len != len) {
> -		spin_unlock(&dentry->d_lock);
> -		kfree(name);
> -		goto retry;
> -	}
> -	memcpy(name, dentry->d_name.name, len);
> -	spin_unlock(&dentry->d_lock);
> -
> -	name[len] = '\0';
> -	*ppath = name;
> -	*ppathlen = len;
> -	return 0;
> -}
> -
>  static int build_dentry_path(struct dentry *dentry, struct inode *dir,
>  			     const char **ppath, int *ppathlen, u64 *pino,
>  			     bool *pfreepath, bool parent_locked)
>  {
> -	int ret;
>  	char *path;
>  
>  	rcu_read_lock();
>  	if (!dir)
>  		dir = d_inode_rcu(dentry->d_parent);
> -	if (dir && ceph_snap(dir) == CEPH_NOSNAP) {
> +	if (dir && parent_locked && ceph_snap(dir) == CEPH_NOSNAP) {
>  		*pino = ceph_ino(dir);
>  		rcu_read_unlock();
> -		if (parent_locked) {
> -			*ppath = dentry->d_name.name;
> -			*ppathlen = dentry->d_name.len;
> -		} else {
> -			ret = clone_dentry_name(dentry, ppath, ppathlen);
> -			if (ret)
> -				return ret;
> -			*pfreepath = true;
> -		}
> +		*ppath = dentry->d_name.name;
> +		*ppathlen = dentry->d_name.len;
>  		return 0;
>  	}
>  	rcu_read_unlock();

Please ignore this patch -- bad git-send-email command on my part.

Sorry!
-- 
Jeff Layton <jlayton@xxxxxxxxxx>




[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux