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.sun.com/software/products/lustre/docs/GPLv2.pdf
20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21 * CA 95054 USA or visit www.sun.com if you need additional information or
27 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
28 * Use is subject to license terms.
30 * Copyright (c) 2011, Intel Corporation.
33 * This file is part of Lustre, http://www.lustre.org/
34 * Lustre is a trademark of Sun Microsystems, Inc.
37 #ifndef _MDC_INTERNAL_H
38 #define _MDC_INTERNAL_H
40 #include "../include/lustre_mdc.h"
41 #include "../include/lustre_mds.h"
43 void lprocfs_mdc_init_vars(struct lprocfs_static_vars
*lvars
);
45 void mdc_pack_body(struct ptlrpc_request
*req
, const struct lu_fid
*fid
,
46 __u64 valid
, int ea_size
, __u32 suppgid
, int flags
);
47 int mdc_pack_req(struct ptlrpc_request
*req
, int version
, int opc
);
48 void mdc_is_subdir_pack(struct ptlrpc_request
*req
, const struct lu_fid
*pfid
,
49 const struct lu_fid
*cfid
, int flags
);
50 void mdc_swap_layouts_pack(struct ptlrpc_request
*req
,
51 struct md_op_data
*op_data
);
52 void mdc_readdir_pack(struct ptlrpc_request
*req
, __u64 pgoff
, __u32 size
,
53 const struct lu_fid
*fid
);
54 void mdc_getattr_pack(struct ptlrpc_request
*req
, __u64 valid
, int flags
,
55 struct md_op_data
*data
, int ea_size
);
56 void mdc_setattr_pack(struct ptlrpc_request
*req
, struct md_op_data
*op_data
,
57 void *ea
, int ealen
, void *ea2
, int ea2len
);
58 void mdc_create_pack(struct ptlrpc_request
*req
, struct md_op_data
*op_data
,
59 const void *data
, int datalen
, __u32 mode
, __u32 uid
,
60 __u32 gid
, cfs_cap_t capability
, __u64 rdev
);
61 void mdc_open_pack(struct ptlrpc_request
*req
, struct md_op_data
*op_data
,
62 __u32 mode
, __u64 rdev
, __u64 flags
, const void *data
,
64 void mdc_unlink_pack(struct ptlrpc_request
*req
, struct md_op_data
*op_data
);
65 void mdc_getxattr_pack(struct ptlrpc_request
*req
, struct md_op_data
*op_data
);
66 void mdc_link_pack(struct ptlrpc_request
*req
, struct md_op_data
*op_data
);
67 void mdc_rename_pack(struct ptlrpc_request
*req
, struct md_op_data
*op_data
,
68 const char *old
, int oldlen
, const char *new, int newlen
);
69 void mdc_close_pack(struct ptlrpc_request
*req
, struct md_op_data
*op_data
);
70 int mdc_enter_request(struct client_obd
*cli
);
71 void mdc_exit_request(struct client_obd
*cli
);
74 int mdc_set_lock_data(struct obd_export
*exp
,
75 __u64
*lockh
, void *data
, __u64
*bits
);
77 int mdc_null_inode(struct obd_export
*exp
, const struct lu_fid
*fid
);
79 int mdc_find_cbdata(struct obd_export
*exp
, const struct lu_fid
*fid
,
80 ldlm_iterator_t it
, void *data
);
82 int mdc_intent_lock(struct obd_export
*exp
,
84 void *lmm
, int lmmsize
,
85 struct lookup_intent
*, int,
86 struct ptlrpc_request
**reqp
,
87 ldlm_blocking_callback cb_blocking
,
88 __u64 extra_lock_flags
);
89 int mdc_enqueue(struct obd_export
*exp
, struct ldlm_enqueue_info
*einfo
,
90 struct lookup_intent
*it
, struct md_op_data
*op_data
,
91 struct lustre_handle
*lockh
, void *lmm
, int lmmsize
,
92 struct ptlrpc_request
**req
, __u64 extra_lock_flags
);
94 int mdc_resource_get_unused(struct obd_export
*exp
, const struct lu_fid
*fid
,
95 struct list_head
*cancels
, ldlm_mode_t mode
,
97 /* mdc/mdc_request.c */
98 int mdc_fid_alloc(struct obd_export
*exp
, struct lu_fid
*fid
,
99 struct md_op_data
*op_data
);
100 struct obd_client_handle
;
102 int mdc_set_open_replay_data(struct obd_export
*exp
,
103 struct obd_client_handle
*och
,
104 struct lookup_intent
*it
);
106 void mdc_commit_open(struct ptlrpc_request
*req
);
107 void mdc_replay_open(struct ptlrpc_request
*req
);
109 int mdc_create(struct obd_export
*exp
, struct md_op_data
*op_data
,
110 const void *data
, int datalen
, int mode
, __u32 uid
, __u32 gid
,
111 cfs_cap_t capability
, __u64 rdev
,
112 struct ptlrpc_request
**request
);
113 int mdc_link(struct obd_export
*exp
, struct md_op_data
*op_data
,
114 struct ptlrpc_request
**request
);
115 int mdc_rename(struct obd_export
*exp
, struct md_op_data
*op_data
,
116 const char *old
, int oldlen
, const char *new, int newlen
,
117 struct ptlrpc_request
**request
);
118 int mdc_setattr(struct obd_export
*exp
, struct md_op_data
*op_data
,
119 void *ea
, int ealen
, void *ea2
, int ea2len
,
120 struct ptlrpc_request
**request
, struct md_open_data
**mod
);
121 int mdc_unlink(struct obd_export
*exp
, struct md_op_data
*op_data
,
122 struct ptlrpc_request
**request
);
123 int mdc_cancel_unused(struct obd_export
*exp
, const struct lu_fid
*fid
,
124 ldlm_policy_data_t
*policy
, ldlm_mode_t mode
,
125 ldlm_cancel_flags_t flags
, void *opaque
);
127 int mdc_revalidate_lock(struct obd_export
*exp
, struct lookup_intent
*it
,
128 struct lu_fid
*fid
, __u64
*bits
);
130 int mdc_intent_getattr_async(struct obd_export
*exp
,
131 struct md_enqueue_info
*minfo
,
132 struct ldlm_enqueue_info
*einfo
);
134 ldlm_mode_t
mdc_lock_match(struct obd_export
*exp
, __u64 flags
,
135 const struct lu_fid
*fid
, ldlm_type_t type
,
136 ldlm_policy_data_t
*policy
, ldlm_mode_t mode
,
137 struct lustre_handle
*lockh
);
139 static inline int mdc_prep_elc_req(struct obd_export
*exp
,
140 struct ptlrpc_request
*req
, int opc
,
141 struct list_head
*cancels
, int count
)
143 return ldlm_prep_elc_req(exp
, req
, LUSTRE_MDS_VERSION
, opc
, 0, cancels
,