4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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.
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).
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.gnu.org/licenses/gpl-2.0.html
23 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Use is subject to license terms.
26 * Copyright (c) 2011, 2015, Intel Corporation.
29 * This file is part of Lustre, http://www.lustre.org/
30 * Lustre is a trademark of Sun Microsystems, Inc.
41 #include "lustre/lustre_idl.h"
42 #include "../../include/linux/libcfs/libcfs.h"
49 extern const struct dt_index_features fld_index_features
;
50 extern const char fld_index_name
[];
53 * FLD (Fid Location Database) interface.
56 LUSTRE_CLI_FLD_HASH_DHT
= 0,
57 LUSTRE_CLI_FLD_HASH_RRB
60 struct lu_fld_target
{
61 struct list_head ft_chain
;
62 struct obd_export
*ft_exp
;
63 struct lu_server_fld
*ft_srv
;
67 struct lu_server_fld
{
69 * super sequence controller export, needed to forward fld
72 struct obd_export
*lsf_control_exp
;
74 /** Client FLD cache. */
75 struct fld_cache
*lsf_cache
;
77 /** Protect index modifications */
78 struct mutex lsf_lock
;
80 /** Fld service name in form "fld-srv-lustre-MDTXXX" */
81 char lsf_name
[LUSTRE_MDT_MAXNAMELEN
];
85 struct lu_client_fld
{
86 /** Client side debugfs entry. */
87 struct dentry
*lcf_debugfs_entry
;
89 /** List of exports client FLD knows about. */
90 struct list_head lcf_targets
;
92 /** Current hash to be used to chose an export. */
93 struct lu_fld_hash
*lcf_hash
;
98 /** Lock protecting exports list and fld_hash. */
101 /** Client FLD cache. */
102 struct fld_cache
*lcf_cache
;
104 /** Client fld debugfs entry name. */
105 char lcf_name
[LUSTRE_MDT_MAXNAMELEN
];
109 int fld_client_init(struct lu_client_fld
*fld
,
110 const char *prefix
, int hash
);
112 void fld_client_fini(struct lu_client_fld
*fld
);
114 void fld_client_flush(struct lu_client_fld
*fld
);
116 int fld_client_lookup(struct lu_client_fld
*fld
, u64 seq
, u32
*mds
,
117 __u32 flags
, const struct lu_env
*env
);
119 int fld_client_create(struct lu_client_fld
*fld
,
120 struct lu_seq_range
*range
,
121 const struct lu_env
*env
);
123 int fld_client_delete(struct lu_client_fld
*fld
, u64 seq
,
124 const struct lu_env
*env
);
126 int fld_client_add_target(struct lu_client_fld
*fld
,
127 struct lu_fld_target
*tar
);
129 int fld_client_del_target(struct lu_client_fld
*fld
,
132 void fld_client_debugfs_fini(struct lu_client_fld
*fld
);