1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2 * vim:expandtab:shiftwidth=8:tabstop=8:
6 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
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.
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).
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
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
29 * Copyright 2008 Sun Microsystems, Inc. All rights reserved
30 * Use is subject to license terms.
33 * This file is part of Lustre, http://www.lustre.org/
34 * Lustre is a trademark of Sun Microsystems, Inc.
36 * lustre/cmm/mdc_internal.h
38 * Lustre Cluster Metadata Manager (cmm), MDC device
40 * Author: Mike Pershin <tappro@clusterfs.com>
43 #ifndef _CMM_MDC_INTERNAL_H
44 #define _CMM_MDC_INTERNAL_H
46 #if defined(__KERNEL__)
48 #include <lustre_net.h>
50 #include <md_object.h>
53 /* uuid of remote MDT to connect */
54 struct obd_uuid cl_srv_uuid;
56 struct obd_uuid cl_cli_uuid;
57 /* export of mdc obd */
58 struct obd_export *cl_exp;
62 struct md_device mc_md_dev;
63 /* other MD servers in cluster */
64 struct list_head mc_linkage;
66 struct mdc_cli_desc mc_desc;
67 struct semaphore mc_fid_sem;
70 struct mdc_thread_info {
71 struct md_op_data mci_opdata;
72 struct ptlrpc_request *mci_req;
76 struct md_object mco_obj;
79 static inline struct lu_device *mdc2lu_dev(struct mdc_device *mc)
81 return (&mc->mc_md_dev.md_lu_dev);
84 static inline struct mdc_device *md2mdc_dev(struct md_device *md)
86 return container_of0(md, struct mdc_device, mc_md_dev);
89 static inline struct mdc_device *mdc_obj2dev(struct mdc_object *mco)
91 return (md2mdc_dev(md_obj2dev(&mco->mco_obj)));
94 static inline struct mdc_object *lu2mdc_obj(struct lu_object *lo)
96 return container_of0(lo, struct mdc_object, mco_obj.mo_lu);
99 static inline struct mdc_object *md2mdc_obj(struct md_object *mo)
101 return container_of0(mo, struct mdc_object, mco_obj);
104 static inline struct mdc_device *lu2mdc_dev(struct lu_device *ld)
106 return container_of0(ld, struct mdc_device, mc_md_dev.md_lu_dev);
109 struct lu_object *mdc_object_alloc(const struct lu_env *,
110 const struct lu_object_header *,
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);
120 #endif /* __KERNEL__ */
121 #endif /* _CMM_MDC_INTERNAL_H */