Whamcloud - gitweb
LU-7918 mdd: no need to declare attr_set at create
[fs/lustre-release.git] / lustre / include / lustre_nodemap.h
index 53cb965..82931c0 100644 (file)
@@ -91,6 +91,8 @@ struct lu_nodemap {
        /* access by nodemap name */
        struct hlist_node        nm_hash;
        struct nodemap_pde      *nm_pde_data;
+       /* fileset the nodes of this nodemap are restricted to */
+       char                     nm_fileset[PATH_MAX+1];
 
        /* used when loading/unloading nodemaps */
        struct list_head         nm_list;
@@ -123,6 +125,8 @@ int nodemap_add_idmap(const char *name, enum nodemap_id_type id_type,
                      const __u32 map[2]);
 int nodemap_del_idmap(const char *name, enum nodemap_id_type id_type,
                      const __u32 map[2]);
+int nodemap_set_fileset(const char *name, const char *fileset);
+char *nodemap_get_fileset(const struct lu_nodemap *nodemap);
 __u32 nodemap_map_id(struct lu_nodemap *nodemap,
                     enum nodemap_id_type id_type,
                     enum nodemap_tree_type tree_type, __u32 id);
@@ -137,4 +141,49 @@ void nm_config_file_deregister(const struct lu_env *env,
                               struct nm_config_file *ncf);
 struct lu_nodemap *nodemap_get_from_exp(struct obd_export *exp);
 void nodemap_putref(struct lu_nodemap *nodemap);
+
+#ifdef HAVE_SERVER_SUPPORT
+struct nodemap_range_tree {
+       struct interval_node *nmrt_range_interval_root;
+       unsigned int nmrt_range_highest_id;
+};
+
+struct nodemap_config {
+       /* Highest numerical lu_nodemap.nm_id defined */
+       unsigned int nmc_nodemap_highest_id;
+
+       /* Simple flag to determine if nodemaps are active */
+       bool nmc_nodemap_is_active;
+
+       /* Pointer to default nodemap as it is needed more often */
+       struct lu_nodemap *nmc_default_nodemap;
+
+       /**
+        * Lock required to access the range tree.
+        */
+       struct rw_semaphore nmc_range_tree_lock;
+       struct nodemap_range_tree nmc_range_tree;
+
+       /**
+        * Hash keyed on nodemap name containing all
+        * nodemaps
+        */
+       struct cfs_hash *nmc_nodemap_hash;
+};
+
+struct nodemap_config *nodemap_config_alloc(void);
+void nodemap_config_dealloc(struct nodemap_config *config);
+void nodemap_config_set_active(struct nodemap_config *config);
+
+int nodemap_process_idx_pages(struct nodemap_config *config, union lu_page *lip,
+                             struct lu_nodemap **recent_nodemap);
+#else /* disable nodemap processing in MGC of non-servers */
+static inline int nodemap_process_idx_pages(void *config,
+                                           union lu_page *lip,
+                                           struct lu_nodemap **recent_nodemap)
+{ return 0; }
+#endif /* HAVE_SERVER_SUPPORT */
+
+int nodemap_get_config_req(struct obd_device *mgs_obd,
+                          struct ptlrpc_request *req);
 #endif /* _LUSTRE_NODEMAP_H */