X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flustre_fld.h;h=102dcfac774806c623b3682beaca767667f0db61;hb=44460570fd21a91002190c8a0620923125135b52;hp=d82b6803b137b0fa939dce54fec9e25f7e62cab0;hpb=e903932500fc08b143467ce5a1c2702df35d8f0f;p=fs%2Flustre-release.git diff --git a/lustre/include/lustre_fld.h b/lustre/include/lustre_fld.h index d82b680..102dcfa 100644 --- a/lustre/include/lustre_fld.h +++ b/lustre/include/lustre_fld.h @@ -1,42 +1,55 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: +/* + * GPL HEADER START * - * Copyright (C) 2006 Cluster File Systems, Inc. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * This file is part of Lustre, http://www.lustre.org. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * Lustre is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * Lustre is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.gnu.org/licenses/gpl-2.0.html * - * You should have received a copy of the GNU General Public License - * along with Lustre; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * GPL HEADER END + */ +/* + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. * + * Copyright (c) 2011, 2015, Intel Corporation. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. */ #ifndef __LINUX_FLD_H #define __LINUX_FLD_H -#include -#include -#include +/** \defgroup fld fld + * + * @{ + */ +#include #include +#include +struct lu_env; struct lu_client_fld; struct lu_server_fld; - -struct fld_stats { - __u64 fst_count; - __u64 fst_cache; - __u64 fst_inflight; -}; +struct lu_fld_hash; +struct fld_cache; +struct thandle; +struct dt_device; +struct dt_object; /* * FLD (Fid Location Database) interface. @@ -46,143 +59,114 @@ enum { LUSTRE_CLI_FLD_HASH_RRB }; -struct lu_server_fld; - struct lu_fld_target { - struct list_head ft_chain; - struct obd_export *ft_exp; - struct lu_server_fld *ft_srv; - __u64 ft_idx; -}; - -typedef int -(*fld_hash_func_t) (struct lu_client_fld *, __u64); - -typedef struct lu_fld_target * -(*fld_scan_func_t) (struct lu_client_fld *, __u64); - -struct lu_fld_hash { - const char *fh_name; - fld_hash_func_t fh_hash_func; - fld_scan_func_t fh_scan_func; -}; - -struct fld_cache_entry { - struct hlist_node fce_list; - struct list_head fce_lru; - mdsno_t fce_mds; - seqno_t fce_seq; - cfs_waitq_t fce_waitq; - __u32 fce_inflight:1, - fce_invalid:1; -}; - -struct fld_cache { - /* - * Cache guard, protects fci_hash mostly because others immutable after - * init is finished. - */ - spinlock_t fci_lock; - - /* Cache shrink threshold */ - int fci_threshold; - - /* Prefered number of cached entries */ - int fci_cache_size; - - /* Current number of cached entries. Protected by @fci_lock */ - int fci_cache_count; - - /* Hash table size (number of collision lists) */ - int fci_hash_size; - - /* Hash table mask */ - int fci_hash_mask; - - /* Hash table for all collision lists */ - struct hlist_head *fci_hash_table; - - /* Lru list */ - struct list_head fci_lru; - - /* Cache statistics. */ - struct fld_stats fci_stat; - - /* Cache name used for debug and messages. */ - char fci_name[80]; + struct list_head ft_chain; + struct obd_export *ft_exp; + struct lu_server_fld *ft_srv; + __u64 ft_idx; }; struct lu_server_fld { - /* Fld dir proc entry. */ - cfs_proc_dir_entry_t *lsf_proc_dir; + /** + * Fld dir debugfs entry. + */ + struct dentry *lsf_debugfs_entry; - /* /fld file object device */ + /** + * /fld file object device */ struct dt_object *lsf_obj; - /* Client FLD cache. */ + /** + * super sequence controller export, needed to forward fld + * lookup request. */ + struct obd_export *lsf_control_exp; + + /** + * Client FLD cache. */ struct fld_cache *lsf_cache; - /* Protect index modifications */ - struct semaphore lsf_sem; + /** + * Protect index modifications */ + struct mutex lsf_lock; - /* Fld service name in form "fld-srv-lustre-MDTXXX" */ + /** + * Fld service name in form "fld-srv-lustre-MDTXXX" */ char lsf_name[80]; -}; -enum { - LUSTRE_FLD_INIT = 1 << 0, - LUSTRE_FLD_RUN = 1 << 1 + int (*lsf_seq_lookup)(const struct lu_env *env, + struct lu_server_fld *fld, u64 seq, + struct lu_seq_range *range); + + /** + * Just reformatted or upgraded, and this flag is being + * used to check whether the local FLDB is needs to be + * synced with global FLDB(in MDT0), and it is only needed + * if the MDT is upgraded from < 2.6 to 2.6, i.e. when the + * local FLDB is being invited */ + unsigned int lsf_new:1; + }; struct lu_client_fld { - /* Client side proc entry. */ - cfs_proc_dir_entry_t *lcf_proc_dir; + /** + * Client side debugfs entry. + */ + struct dentry *lcf_debugfs_entry; - /* List of exports client FLD knows about. */ - struct list_head lcf_targets; + /** + * List of exports client FLD knows about. */ + struct list_head lcf_targets; - /* Current hash to be used to chose an export. */ + /** + * Current hash to be used to chose an export. */ struct lu_fld_hash *lcf_hash; - /* Exports count. */ + /** + * Exports count. */ int lcf_count; - /* Lock protecting exports list and fld_hash. */ - spinlock_t lcf_lock; + /** + * Lock protecting exports list and fld_hash. */ + spinlock_t lcf_lock; - /* Client FLD cache. */ + /** + * Client FLD cache. */ struct fld_cache *lcf_cache; - /* Client fld proc entry name. */ + /** + * Client fld debugfs entry name. + */ char lcf_name[80]; - - const struct lu_context *lcf_ctx; - - int lcf_flags; }; -int fld_query(struct com_thread_info *info); - /* Server methods */ -int fld_server_init(struct lu_server_fld *fld, - struct dt_device *dt, - const char *prefix, - const struct lu_env *env); +int fld_server_init(const struct lu_env *env, struct lu_server_fld *fld, + struct dt_device *dt, const char *prefix, int type); + +void fld_server_fini(const struct lu_env *env, struct lu_server_fld *fld); + +int fld_declare_server_create(const struct lu_env *env, + struct lu_server_fld *fld, + const struct lu_seq_range *range, + struct thandle *th); -void fld_server_fini(struct lu_server_fld *fld, - const struct lu_env *env); +int fld_server_create(const struct lu_env *env, + struct lu_server_fld *fld, + const struct lu_seq_range *add_range, + struct thandle *th); -int fld_server_create(struct lu_server_fld *fld, - const struct lu_env *env, - seqno_t seq, mdsno_t mds); +int fld_insert_entry(const struct lu_env *env, + struct lu_server_fld *fld, + const struct lu_seq_range *range); -int fld_server_delete(struct lu_server_fld *fld, - const struct lu_env *env, - seqno_t seq); +int fld_server_lookup(const struct lu_env *env, struct lu_server_fld *fld, + u64 seq, struct lu_seq_range *range); -int fld_server_lookup(struct lu_server_fld *fld, - const struct lu_env *env, - seqno_t seq, mdsno_t *mds); +int fld_local_lookup(const struct lu_env *env, struct lu_server_fld *fld, + u64 seq, struct lu_seq_range *range); + +int fld_update_from_controller(const struct lu_env *env, + struct lu_server_fld *fld); /* Client methods */ int fld_client_init(struct lu_client_fld *fld, @@ -192,16 +176,14 @@ void fld_client_fini(struct lu_client_fld *fld); void fld_client_flush(struct lu_client_fld *fld); -int fld_client_lookup(struct lu_client_fld *fld, - seqno_t seq, mdsno_t *mds, - const struct lu_env *env); +int fld_client_lookup(struct lu_client_fld *fld, u64 seq, u32 *mds, + __u32 flags, const struct lu_env *env); int fld_client_create(struct lu_client_fld *fld, - seqno_t seq, mdsno_t mds, + struct lu_seq_range *range, const struct lu_env *env); -int fld_client_delete(struct lu_client_fld *fld, - seqno_t seq, +int fld_client_delete(struct lu_client_fld *fld, u64 seq, const struct lu_env *env); int fld_client_add_target(struct lu_client_fld *fld, @@ -210,27 +192,8 @@ int fld_client_add_target(struct lu_client_fld *fld, int fld_client_del_target(struct lu_client_fld *fld, __u64 idx); -/* Cache methods */ -struct fld_cache *fld_cache_init(const char *name, - int hash_size, - int cache_size, - int cache_threshold); - -void fld_cache_fini(struct fld_cache *cache); - -void fld_cache_flush(struct fld_cache *cache); - -int fld_cache_insert(struct fld_cache *cache, - seqno_t seq, mdsno_t mds); - -int fld_cache_insert_inflight(struct fld_cache *cache, - seqno_t seq); - -void fld_cache_delete(struct fld_cache *cache, - seqno_t seq); +void fld_client_debugfs_fini(struct lu_client_fld *fld); -int -fld_cache_lookup(struct fld_cache *cache, - seqno_t seq, mdsno_t *mds); +/** @} fld */ #endif