X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flustre_nodemap.h;h=2e0cf6b85f18ef29cb35b27b3f1e7c3175e95744;hb=d68d56c00e7788a445f94b6e099f7f8b9e259bae;hp=94bb0d796bd0f5aa5e7c912ec9d92778327ec58a;hpb=4642f30970c8737f31d63c75eeda2cff15c68a77;p=fs%2Flustre-release.git diff --git a/lustre/include/lustre_nodemap.h b/lustre/include/lustre_nodemap.h index 94bb0d7..2e0cf6b 100644 --- a/lustre/include/lustre_nodemap.h +++ b/lustre/include/lustre_nodemap.h @@ -32,6 +32,21 @@ #define LUSTRE_NODEMAP_DEFAULT_ID 0 +/** enums containing the types of ids contained in a nodemap + * kept so other modules (mgs, mdt, etc) can define the type + * of search easily + */ + +enum nodemap_id_type { + NODEMAP_UID, + NODEMAP_GID, +}; + +enum nodemap_tree_type { + NODEMAP_FS_TO_CLIENT, + NODEMAP_CLIENT_TO_FS, +}; + /** The nodemap id 0 will be the default nodemap. It will have a configuration * set by the MGS, but no ranges will be allowed as all NIDs that do not map * will be added to the default nodemap @@ -56,31 +71,46 @@ struct lu_nodemap { gid_t nm_squash_gid; /* NID range list */ struct list_head nm_ranges; + /* lock for idmap red/black trees */ + rwlock_t nm_idmap_lock; /* UID map keyed by local UID */ - struct rb_root nm_local_to_remote_uidmap; + struct rb_root nm_fs_to_client_uidmap; /* UID map keyed by remote UID */ - struct rb_root nm_remote_to_local_uidmap; + struct rb_root nm_client_to_fs_uidmap; /* GID map keyed by local UID */ - struct rb_root nm_local_to_remote_gidmap; + struct rb_root nm_fs_to_client_gidmap; /* GID map keyed by remote UID */ - struct rb_root nm_remote_to_local_gidmap; + struct rb_root nm_client_to_fs_gidmap; /* proc directory entry */ struct proc_dir_entry *nm_proc_entry; /* attached client members of this nodemap */ - struct list_head nm_exports; + cfs_hash_t *nm_member_hash; /* access by nodemap name */ - cfs_hlist_node_t nm_hash; + struct hlist_node nm_hash; }; +void nodemap_activate(const bool value); int nodemap_add(const char *nodemap_name); int nodemap_del(const char *nodemap_name); struct lu_nodemap *nodemap_classify_nid(lnet_nid_t nid); +int nodemap_add_member(lnet_nid_t nid, struct obd_export *exp); +void nodemap_del_member(struct obd_export *exp); int nodemap_parse_range(const char *range_string, lnet_nid_t range[2]); +int nodemap_parse_idmap(char *idmap_string, __u32 idmap[2]); int nodemap_add_range(const char *name, const lnet_nid_t nid[2]); int nodemap_del_range(const char *name, const lnet_nid_t nid[2]); int nodemap_set_allow_root(const char *name, bool allow_root); int nodemap_set_trust_client_ids(const char *name, bool trust_client_ids); int nodemap_set_squash_uid(const char *name, uid_t uid); int nodemap_set_squash_gid(const char *name, gid_t gid); - -#endif +bool nodemap_can_setquota(const struct lu_nodemap *nodemap); +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]); +__u32 nodemap_map_id(struct lu_nodemap *nodemap, + enum nodemap_id_type id_type, + enum nodemap_tree_type tree_type, __u32 id); +ssize_t nodemap_map_acl(struct lu_nodemap *nodemap, void *buf, size_t size, + enum nodemap_tree_type tree_type); +#endif /* _LUSTRE_NODEMAP_H */