mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
ceph: add session already open notify support
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. Link: https://tracker.ceph.com/issues/53911 Signed-off-by: Xiubo Li <xiubli@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
4868e537fa
commit
300e42a2e7
2 changed files with 24 additions and 6 deletions
|
@ -3540,11 +3540,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_notice("mds%d is already opened\n", session->s_mds);
|
||||
} 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);
|
||||
|
|
|
@ -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, \
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue