summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorXiubo Li <xiubli@redhat.com>2019-11-26 07:24:21 -0500
committerIlya Dryomov <idryomov@gmail.com>2020-01-27 16:53:39 +0100
commit4d7ace02ba5c6ef1f8eeb32a86fef7c528bd7f36 (patch)
tree3fba3723f15ecba9f21dc00492d91adec9cfdd28 /include/linux
parentd80865bff5201cc56bc247989ebbab6169b3a101 (diff)
ceph: fix mdsmap cluster available check based on laggy number
In case the max_mds > 1 in MDS cluster and there is no any standby MDS and all the max_mds MDSs are in up:active state, if one of the up:active MDSs is dead, the m->m_num_laggy in kclient will be 1. Then the mount will fail without considering other healthy MDSs. There manybe some MDSs still "in" the cluster but not in up:active state, we will ignore them. Only when all the up:active MDSs in the cluster are laggy will treat the cluster as not be available. In case decreasing the max_mds, the cluster will not stop the extra up:active MDSs immediately and there will be a latency. During it the up:active MDS number will be larger than the max_mds, so later the m_info memories will 100% be reallocated. Here will pick out the up:active MDSs as the m_num_mds and allocate the needed memories once. Signed-off-by: Xiubo Li <xiubli@redhat.com> Reviewed-by: Jeff Layton <jlayton@kernel.org> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/ceph/mdsmap.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/ceph/mdsmap.h b/include/linux/ceph/mdsmap.h
index 0067d767c9ae..3a66f4f926ce 100644
--- a/include/linux/ceph/mdsmap.h
+++ b/include/linux/ceph/mdsmap.h
@@ -25,8 +25,9 @@ struct ceph_mdsmap {
u32 m_session_timeout; /* seconds */
u32 m_session_autoclose; /* seconds */
u64 m_max_file_size;
- u32 m_max_mds; /* size of m_addr, m_state arrays */
- int m_num_mds;
+ u32 m_max_mds; /* expected up:active mds number */
+ int m_num_active_mds; /* actual up:active mds number */
+ int m_num_mds; /* size of m_info array */
struct ceph_mds_info *m_info;
/* which object pools file data can be stored in */