Whamcloud - gitweb
e7a1d1311df206617a28b2bf71cb0a004d3f7850
[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         /* uuid of remote MDT to connect */
54         struct obd_uuid          cl_srv_uuid;
55         /* mdc uuid */
56         struct obd_uuid          cl_cli_uuid;
57         /* export of mdc obd */
58         struct obd_export        *cl_exp;
59 };
60
61 struct mdc_device {
62         struct md_device        mc_md_dev;
63         /* other MD servers in cluster */
64         struct list_head        mc_linkage;
65         mdsno_t                 mc_num;
66         struct mdc_cli_desc     mc_desc;
67         struct semaphore        mc_fid_sem;
68 };
69
70 struct mdc_thread_info {
71         struct md_op_data       mci_opdata;
72         struct ptlrpc_request  *mci_req;
73 };
74
75 struct mdc_object {
76         struct md_object        mco_obj;
77 };
78
79 static inline struct lu_device *mdc2lu_dev(struct mdc_device *mc)
80 {
81         return (&mc->mc_md_dev.md_lu_dev);
82 }
83
84 static inline struct mdc_device *md2mdc_dev(struct md_device *md)
85 {
86         return container_of0(md, struct mdc_device, mc_md_dev);
87 }
88
89 static inline struct mdc_device *mdc_obj2dev(struct mdc_object *mco)
90 {
91         return (md2mdc_dev(md_obj2dev(&mco->mco_obj)));
92 }
93
94 static inline struct mdc_object *lu2mdc_obj(struct lu_object *lo)
95 {
96         return container_of0(lo, struct mdc_object, mco_obj.mo_lu);
97 }
98
99 static inline struct mdc_object *md2mdc_obj(struct md_object *mo)
100 {
101         return container_of0(mo, struct mdc_object, mco_obj);
102 }
103
104 static inline struct mdc_device *lu2mdc_dev(struct lu_device *ld)
105 {
106         return container_of0(ld, struct mdc_device, mc_md_dev.md_lu_dev);
107 }
108
109 struct lu_object *mdc_object_alloc(const struct lu_env *,
110                                    const struct lu_object_header *,
111                                    struct lu_device *);
112
113 void cmm_mdc_init_ea_size(const struct lu_env *env, struct mdc_device *mc,
114                       int max_mdsize, int max_cookiesize);
115 #ifdef HAVE_SPLIT_SUPPORT
116 int mdc_send_page(struct cmm_device *cmm, const struct lu_env *env,
117                   struct md_object *mo, struct page *page, __u32 end);
118 #endif
119
120 #endif /* __KERNEL__ */
121 #endif /* _CMM_MDC_INTERNAL_H */