1 /* 2 * GPL HEADER START 3 * 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 only, 8 * as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, but 11 * WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * General Public License version 2 for more details (a copy is included 14 * in the LICENSE file that accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License 17 * version 2 along with this program; If not, see 18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf 19 * 20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 21 * CA 95054 USA or visit www.sun.com if you need additional information or 22 * have any questions. 23 * 24 * GPL HEADER END 25 */ 26 /* 27 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. 28 * Use is subject to license terms. 29 * 30 * Copyright (c) 2011, 2013, Intel Corporation. 31 */ 32 /* 33 * This file is part of Lustre, http://www.lustre.org/ 34 * Lustre is a trademark of Sun Microsystems, Inc. 35 */ 36 37 #ifndef __LINUX_FLD_H 38 #define __LINUX_FLD_H 39 40 /** \defgroup fld fld 41 * 42 * @{ 43 */ 44 45 #include "lustre/lustre_idl.h" 46 #include "../../include/linux/libcfs/libcfs.h" 47 48 struct lu_client_fld; 49 struct lu_server_fld; 50 struct lu_fld_hash; 51 struct fld_cache; 52 53 extern const struct dt_index_features fld_index_features; 54 extern const char fld_index_name[]; 55 56 /* 57 * FLD (Fid Location Database) interface. 58 */ 59 enum { 60 LUSTRE_CLI_FLD_HASH_DHT = 0, 61 LUSTRE_CLI_FLD_HASH_RRB 62 }; 63 64 struct lu_fld_target { 65 struct list_head ft_chain; 66 struct obd_export *ft_exp; 67 struct lu_server_fld *ft_srv; 68 __u64 ft_idx; 69 }; 70 71 struct lu_server_fld { 72 /** 73 * super sequence controller export, needed to forward fld 74 * lookup request. */ 75 struct obd_export *lsf_control_exp; 76 77 /** 78 * Client FLD cache. */ 79 struct fld_cache *lsf_cache; 80 81 /** 82 * Protect index modifications */ 83 struct mutex lsf_lock; 84 85 /** 86 * Fld service name in form "fld-srv-lustre-MDTXXX" */ 87 char lsf_name[LUSTRE_MDT_MAXNAMELEN]; 88 89 }; 90 91 struct lu_client_fld { 92 /** 93 * Client side debugfs entry. */ 94 struct dentry *lcf_debugfs_entry; 95 96 /** 97 * List of exports client FLD knows about. */ 98 struct list_head lcf_targets; 99 100 /** 101 * Current hash to be used to chose an export. */ 102 struct lu_fld_hash *lcf_hash; 103 104 /** 105 * Exports count. */ 106 int lcf_count; 107 108 /** 109 * Lock protecting exports list and fld_hash. */ 110 spinlock_t lcf_lock; 111 112 /** 113 * Client FLD cache. */ 114 struct fld_cache *lcf_cache; 115 116 /** 117 * Client fld debugfs entry name. */ 118 char lcf_name[LUSTRE_MDT_MAXNAMELEN]; 119 120 int lcf_flags; 121 }; 122 123 /* Client methods */ 124 int fld_client_init(struct lu_client_fld *fld, 125 const char *prefix, int hash); 126 127 void fld_client_fini(struct lu_client_fld *fld); 128 129 void fld_client_flush(struct lu_client_fld *fld); 130 131 int fld_client_lookup(struct lu_client_fld *fld, u64 seq, u32 *mds, 132 __u32 flags, const struct lu_env *env); 133 134 int fld_client_create(struct lu_client_fld *fld, 135 struct lu_seq_range *range, 136 const struct lu_env *env); 137 138 int fld_client_delete(struct lu_client_fld *fld, u64 seq, 139 const struct lu_env *env); 140 141 int fld_client_add_target(struct lu_client_fld *fld, 142 struct lu_fld_target *tar); 143 144 int fld_client_del_target(struct lu_client_fld *fld, 145 __u64 idx); 146 147 void fld_client_debugfs_fini(struct lu_client_fld *fld); 148 149 /** @} fld */ 150 151 #endif 152