12f2dc053404febedc9c273452d9d518fb31fde72Sage Weil#ifndef _FS_CEPH_MDSMAP_H
22f2dc053404febedc9c273452d9d518fb31fde72Sage Weil#define _FS_CEPH_MDSMAP_H
32f2dc053404febedc9c273452d9d518fb31fde72Sage Weil
4187f1882b5b0748b3c4c22274663fdb372ac0452Paul Gortmaker#include <linux/bug.h>
5a1ce39288e6fbefdd8d607021d02384eb4a20b99David Howells#include <linux/ceph/types.h>
62f2dc053404febedc9c273452d9d518fb31fde72Sage Weil
72f2dc053404febedc9c273452d9d518fb31fde72Sage Weil/*
82f2dc053404febedc9c273452d9d518fb31fde72Sage Weil * mds map - describe servers in the mds cluster.
92f2dc053404febedc9c273452d9d518fb31fde72Sage Weil *
102f2dc053404febedc9c273452d9d518fb31fde72Sage Weil * we limit fields to those the client actually xcares about
112f2dc053404febedc9c273452d9d518fb31fde72Sage Weil */
122f2dc053404febedc9c273452d9d518fb31fde72Sage Weilstruct ceph_mds_info {
1394045e115ee72aee3b17295791da07078f2f778cSage Weil	u64 global_id;
142f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	struct ceph_entity_addr addr;
152f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	s32 state;
162f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	int num_export_targets;
170deb01c9998f8112c5e478e3fe3a930131abbc0aSage Weil	bool laggy;
182f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	u32 *export_targets;
192f2dc053404febedc9c273452d9d518fb31fde72Sage Weil};
202f2dc053404febedc9c273452d9d518fb31fde72Sage Weil
212f2dc053404febedc9c273452d9d518fb31fde72Sage Weilstruct ceph_mdsmap {
222f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	u32 m_epoch, m_client_epoch, m_last_failure;
232f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	u32 m_root;
242f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	u32 m_session_timeout;          /* seconds */
252f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	u32 m_session_autoclose;        /* seconds */
262f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	u64 m_max_file_size;
272f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	u32 m_max_mds;                  /* size of m_addr, m_state arrays */
282f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	struct ceph_mds_info *m_info;
292f2dc053404febedc9c273452d9d518fb31fde72Sage Weil
302f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	/* which object pools file data can be stored in */
312f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	int m_num_data_pg_pools;
324f6a7e5ee1393ec4b243b39dac9f36992d161540Sage Weil	u64 *m_data_pg_pools;
334f6a7e5ee1393ec4b243b39dac9f36992d161540Sage Weil	u64 m_cas_pg_pool;
342f2dc053404febedc9c273452d9d518fb31fde72Sage Weil};
352f2dc053404febedc9c273452d9d518fb31fde72Sage Weil
362f2dc053404febedc9c273452d9d518fb31fde72Sage Weilstatic inline struct ceph_entity_addr *
372f2dc053404febedc9c273452d9d518fb31fde72Sage Weilceph_mdsmap_get_addr(struct ceph_mdsmap *m, int w)
382f2dc053404febedc9c273452d9d518fb31fde72Sage Weil{
392f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	if (w >= m->m_max_mds)
402f2dc053404febedc9c273452d9d518fb31fde72Sage Weil		return NULL;
412f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	return &m->m_info[w].addr;
422f2dc053404febedc9c273452d9d518fb31fde72Sage Weil}
432f2dc053404febedc9c273452d9d518fb31fde72Sage Weil
442f2dc053404febedc9c273452d9d518fb31fde72Sage Weilstatic inline int ceph_mdsmap_get_state(struct ceph_mdsmap *m, int w)
452f2dc053404febedc9c273452d9d518fb31fde72Sage Weil{
462f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	BUG_ON(w < 0);
472f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	if (w >= m->m_max_mds)
482f2dc053404febedc9c273452d9d518fb31fde72Sage Weil		return CEPH_MDS_STATE_DNE;
492f2dc053404febedc9c273452d9d518fb31fde72Sage Weil	return m->m_info[w].state;
502f2dc053404febedc9c273452d9d518fb31fde72Sage Weil}
512f2dc053404febedc9c273452d9d518fb31fde72Sage Weil
520deb01c9998f8112c5e478e3fe3a930131abbc0aSage Weilstatic inline bool ceph_mdsmap_is_laggy(struct ceph_mdsmap *m, int w)
530deb01c9998f8112c5e478e3fe3a930131abbc0aSage Weil{
540deb01c9998f8112c5e478e3fe3a930131abbc0aSage Weil	if (w >= 0 && w < m->m_max_mds)
550deb01c9998f8112c5e478e3fe3a930131abbc0aSage Weil		return m->m_info[w].laggy;
560deb01c9998f8112c5e478e3fe3a930131abbc0aSage Weil	return false;
570deb01c9998f8112c5e478e3fe3a930131abbc0aSage Weil}
580deb01c9998f8112c5e478e3fe3a930131abbc0aSage Weil
592f2dc053404febedc9c273452d9d518fb31fde72Sage Weilextern int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m);
602f2dc053404febedc9c273452d9d518fb31fde72Sage Weilextern struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end);
612f2dc053404febedc9c273452d9d518fb31fde72Sage Weilextern void ceph_mdsmap_destroy(struct ceph_mdsmap *m);
622f2dc053404febedc9c273452d9d518fb31fde72Sage Weil
632f2dc053404febedc9c273452d9d518fb31fde72Sage Weil#endif
64