Re: [PATCH] ceph: add session already open notify support

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

 



On Thu, 2022-05-26 at 14:06 +0800, Xiubo Li wrote:
> If the connection was accidently closed due to the socket issue or
> something else the clients will try to open the opened sessions, the
> MDSes will send the session open reply one more time if the clients
> support the notify feature.
> 
> When the clients retry to open the sessions the s_seq will be 0 as
> default, we need to update it anyway.
> 
> URL: https://tracker.ceph.com/issues/53911
> Signed-off-by: Xiubo Li <xiubli@xxxxxxxxxx>
> ---
>  fs/ceph/mds_client.c | 25 ++++++++++++++++++++-----
>  fs/ceph/mds_client.h |  5 ++++-
>  2 files changed, 24 insertions(+), 6 deletions(-)
> 
> diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
> index 4ced8d1e18ba..3e528b89b77a 100644
> --- a/fs/ceph/mds_client.c
> +++ b/fs/ceph/mds_client.c
> @@ -3569,11 +3569,26 @@ static void handle_session(struct ceph_mds_session *session,
>  	case CEPH_SESSION_OPEN:
>  		if (session->s_state == CEPH_MDS_SESSION_RECONNECTING)
>  			pr_info("mds%d reconnect success\n", session->s_mds);
> -		session->s_state = CEPH_MDS_SESSION_OPEN;
> -		session->s_features = features;
> -		renewed_caps(mdsc, session, 0);
> -		if (test_bit(CEPHFS_FEATURE_METRIC_COLLECT, &session->s_features))
> -			metric_schedule_delayed(&mdsc->metric);
> +
> +		if (session->s_state == CEPH_MDS_SESSION_OPEN) {
> +			pr_info("mds%d already opened\n", session->s_mds);

Does the above pr_info actually help anything? What will the admin do
with this info? I'd probably just skip this since this is sort of
expected to happen from time to time.

> +		} else {
> +			session->s_state = CEPH_MDS_SESSION_OPEN;
> +			session->s_features = features;
> +			renewed_caps(mdsc, session, 0);
> +			if (test_bit(CEPHFS_FEATURE_METRIC_COLLECT,
> +				     &session->s_features))
> +				metric_schedule_delayed(&mdsc->metric);
> +		}
> +
> +		/*
> +		 * The connection maybe broken and the session in client
> +		 * side has been reinitialized, need to update the seq
> +		 * anyway.
> +		 */
> +		if (!session->s_seq && seq)
> +			session->s_seq = seq;
> +
>  		wake = 1;
>  		if (mdsc->stopping)
>  			__close_session(mdsc, session);
> diff --git a/fs/ceph/mds_client.h b/fs/ceph/mds_client.h
> index d8ec2ac93da3..256e3eada6c1 100644
> --- a/fs/ceph/mds_client.h
> +++ b/fs/ceph/mds_client.h
> @@ -29,8 +29,10 @@ enum ceph_feature_type {
>  	CEPHFS_FEATURE_MULTI_RECONNECT,
>  	CEPHFS_FEATURE_DELEG_INO,
>  	CEPHFS_FEATURE_METRIC_COLLECT,
> +	CEPHFS_FEATURE_ALTERNATE_NAME,
> +	CEPHFS_FEATURE_NOTIFY_SESSION_STATE,
>  
> -	CEPHFS_FEATURE_MAX = CEPHFS_FEATURE_METRIC_COLLECT,
> +	CEPHFS_FEATURE_MAX = CEPHFS_FEATURE_NOTIFY_SESSION_STATE,
>  };
>  
>  #define CEPHFS_FEATURES_CLIENT_SUPPORTED {	\
> @@ -41,6 +43,7 @@ enum ceph_feature_type {
>  	CEPHFS_FEATURE_MULTI_RECONNECT,		\
>  	CEPHFS_FEATURE_DELEG_INO,		\
>  	CEPHFS_FEATURE_METRIC_COLLECT,		\
> +	CEPHFS_FEATURE_NOTIFY_SESSION_STATE,	\
>  }
>  
>  /*

The rest looks OK though.
-- 
Jeff Layton <jlayton@xxxxxxxxxx>




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

  Powered by Linux