Whamcloud - gitweb
add lookup() method in md_dir_operations
[fs/lustre-release.git] / lustre / include / linux / lustre_fid.h
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  *
4  *  Copyright (C) 2006 Cluster File Systems, Inc.
5  *
6  *   This file is part of Lustre, http://www.lustre.org.
7  *
8  *   Lustre is free software; you can redistribute it and/or
9  *   modify it under the terms of version 2 of the GNU General Public
10  *   License as published by the Free Software Foundation.
11  *
12  *   Lustre is distributed in the hope that it will be useful,
13  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *   GNU General Public License for more details.
16  *
17  *   You should have received a copy of the GNU General Public License
18  *   along with Lustre; if not, write to the Free Software
19  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  *
21  */
22
23 #ifndef __LINUX_FID_H
24 #define __LINUX_FID_H
25
26 /*
27  * struct lu_fid
28  */
29 #include <linux/lustre_idl.h>
30
31 #include <libcfs/list.h>
32 #include <libcfs/kp30.h>
33
34 struct lu_context;
35 struct lu_seq_mgr_ops {
36         int (*smo_read) (struct lu_context *, void *opaque, __u64 *);
37         int (*smo_write) (struct lu_context *, void *opaque, __u64 *);
38 };
39
40 struct lu_seq_mgr {
41         /* seq management fields */
42         struct semaphore       m_seq_sem;
43         /* each MDS has own range of seqs ended with this value
44          * if it is overflowed the new one should be got from master node */
45         __u64                  m_seq_last;
46         /* last allocated seq */
47         __u64                  m_seq;
48         /* ops related stuff */
49         void                  *m_opaque;
50         struct lu_seq_mgr_ops *m_ops;
51 };
52
53 /* init/fini methods */
54 struct lu_seq_mgr *seq_mgr_init(struct lu_seq_mgr_ops *, void *);
55 void seq_mgr_fini(struct lu_seq_mgr *);
56
57 /* seq management methods */
58 int seq_mgr_setup(struct lu_context *, struct lu_seq_mgr *);
59 int seq_mgr_read(struct lu_context *, struct lu_seq_mgr *);
60 int seq_mgr_write(struct lu_context *, struct lu_seq_mgr *);
61 int seq_mgr_alloc(struct lu_context *, struct lu_seq_mgr *, __u64 *);
62 int seq_mgr_range_alloc(struct lu_context *, struct lu_seq_mgr *, __u64 *);
63 struct lu_site;
64 #if 0
65 int fid_is_local(struct lu_site *site, const struct lu_fid *fid);
66 #else
67 static inline int fid_is_local(struct lu_site *site, const struct lu_fid *fid)
68 {
69         return 1;
70 }
71 #endif
72
73 void fid_to_le(struct lu_fid *dst, const struct lu_fid *src);
74
75 /*
76  * fld (fid location database) interface.
77  */
78 struct fld_info {
79         void *fi_container;
80 };
81 struct fld {
82         struct proc_dir_entry   *fld_proc_entry;
83         struct ptlrpc_service   *fld_service;
84         struct dt_device        *fld_dt;
85         struct fld_info         *fld_info;
86 };
87
88 int  fld_server_init(struct fld *fld, struct dt_device *dt);
89 void fld_server_fini(struct fld *fld);
90
91
92 #endif /* __LINUX_OBD_CLASS_H */