Whamcloud - gitweb
b=16098
[fs/lustre-release.git] / lustre / cmm / mdc_internal.h
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  *
4  * GPL HEADER START
5  *
6  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 only,
10  * as published by the Free Software Foundation.
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License version 2 for more details (a copy is included
16  * in the LICENSE file that accompanied this code).
17  *
18  * You should have received a copy of the GNU General Public License
19  * version 2 along with this program; If not, see
20  * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
21  *
22  * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
23  * CA 95054 USA or visit www.sun.com if you need additional information or
24  * have any questions.
25  *
26  * GPL HEADER END
27  */
28 /*
29  * Copyright  2008 Sun Microsystems, Inc. All rights reserved
30  * Use is subject to license terms.
31  */
32 /*
33  * This file is part of Lustre, http://www.lustre.org/
34  * Lustre is a trademark of Sun Microsystems, Inc.
35  *
36  * lustre/cmm/mdc_internal.h
37  *
38  * Lustre Cluster Metadata Manager (cmm), MDC device
39  *
40  * Author: Mike Pershin <tappro@clusterfs.com>
41  */
42
43 #ifndef _CMM_MDC_INTERNAL_H
44 #define _CMM_MDC_INTERNAL_H
45
46 #if defined(__KERNEL__)
47
48 #include <lustre_net.h>
49 #include <obd.h>
50 #include <md_object.h>
51
52 struct mdc_cli_desc {
53         struct lustre_handle     cl_conn;
54         /* uuid of remote MDT to connect */
55         struct obd_uuid          cl_srv_uuid;
56         /* mdc uuid */
57         struct obd_uuid          cl_cli_uuid;
58         /* export of mdc obd */
59         struct obd_export        *cl_exp;
60 };
61
62 struct mdc_device {
63         struct md_device        mc_md_dev;
64         /* other MD servers in cluster */
65         struct list_head        mc_linkage;
66         mdsno_t                 mc_num;
67         struct mdc_cli_desc     mc_desc;
68         struct semaphore        mc_fid_sem;
69 };
70
71 struct mdc_thread_info {
72         struct md_op_data       mci_opdata;
73         struct ptlrpc_request  *mci_req;
74 };
75
76 struct mdc_object {
77         struct md_object        mco_obj;
78 };
79
80 static inline struct lu_device *mdc2lu_dev(struct mdc_device *mc)
81 {
82         return (&mc->mc_md_dev.md_lu_dev);
83 }
84
85 static inline struct mdc_device *md2mdc_dev(struct md_device *md)
86 {
87         return container_of0(md, struct mdc_device, mc_md_dev);
88 }
89
90 static inline struct mdc_device *mdc_obj2dev(struct mdc_object *mco)
91 {
92         return (md2mdc_dev(md_obj2dev(&mco->mco_obj)));
93 }
94
95 static inline struct mdc_object *lu2mdc_obj(struct lu_object *lo)
96 {
97         return container_of0(lo, struct mdc_object, mco_obj.mo_lu);
98 }
99
100 static inline struct mdc_object *md2mdc_obj(struct md_object *mo)
101 {
102         return container_of0(mo, struct mdc_object, mco_obj);
103 }
104
105 static inline struct mdc_device *lu2mdc_dev(struct lu_device *ld)
106 {
107         return container_of0(ld, struct mdc_device, mc_md_dev.md_lu_dev);
108 }
109
110 struct lu_object *mdc_object_alloc(const struct lu_env *,
111                                    const struct lu_object_header *,
112                                    struct lu_device *);
113
114 void cmm_mdc_init_ea_size(const struct lu_env *env, struct mdc_device *mc,
115                       int max_mdsize, int max_cookiesize);
116 #ifdef HAVE_SPLIT_SUPPORT
117 int mdc_send_page(struct cmm_device *cmm, const struct lu_env *env,
118                   struct md_object *mo, struct page *page, __u32 end);
119 #endif
120
121 #endif /* __KERNEL__ */
122 #endif /* _CMM_MDC_INTERNAL_H */