Re: [PATCH 1/2] ceph: update ceph_dentry_info::lease_session when necessary

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

 



On Thu, 2017-07-06 at 16:02 +0800, Yan, Zheng wrote:
> Current code does not update ceph_dentry_info::lease_session once
> it is set. If auth mds of corresponding dentry changes, dentry lease
> stays in invalid state.
> 
> Signed-off-by: "Yan, Zheng" <zyan@xxxxxxxxxx>
> ---
>  fs/ceph/inode.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
> index 53f23c9..220dfd8 100644
> --- a/fs/ceph/inode.c
> +++ b/fs/ceph/inode.c
> @@ -1016,6 +1016,7 @@ static void update_dentry_lease(struct dentry *dentry,
>  	long unsigned ttl = from_time + (duration * HZ) / 1000;
>  	long unsigned half_ttl = from_time + (duration * HZ / 2) / 1000;
>  	struct inode *dir;
> +	struct ceph_mds_session *old_lease_session = NULL;
>  
>  	/*
>  	 * Make sure dentry's inode matches tgt_vino. NULL tgt_vino means that
> @@ -1051,8 +1052,10 @@ static void update_dentry_lease(struct dentry *dentry,
>  	    time_before(ttl, di->time))
>  		goto out_unlock;  /* we already have a newer lease. */
>  
> -	if (di->lease_session && di->lease_session != session)
> -		goto out_unlock;
> +	if (di->lease_session && di->lease_session != session) {
> +		old_lease_session = di->lease_session;
> +		di->lease_session = NULL;
> +	}
>  
>  	ceph_dentry_lru_touch(dentry);
>  
> @@ -1065,6 +1068,8 @@ static void update_dentry_lease(struct dentry *dentry,
>  	di->time = ttl;
>  out_unlock:
>  	spin_unlock(&dentry->d_lock);
> +	if (old_lease_session)
> +		ceph_put_mds_session(old_lease_session);
>  	return;
>  }
>  

Reviewed-by: Jeff Layton <jlayton@xxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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