1 #ifndef _LMV_INTERNAL_H_
2 #define _LMV_INTERNAL_H_
4 #define LL_IT2STR(it) \
5 ((it) ? ldlm_it2str((it)->it_op) : "0")
7 #define MEA_SIZE_LMV(lmv) \
8 ((lmv)->desc.ld_tgt_count * \
9 sizeof(struct lustre_id) + sizeof(struct mea))
12 struct lustre_id id; /* id of dirobj */
13 unsigned long size; /* slave size value */
17 #define O_FREEING (1 << 0)
20 struct list_head list;
21 struct semaphore guard;
22 int state; /* object state. */
23 atomic_t count; /* ref counter. */
24 struct lustre_id id; /* master id of dir */
25 void *update; /* bitmap of status (uptodate) */
27 int objcount; /* number of slaves */
28 struct lmv_inode *objs; /* array of dirobjs */
29 struct obd_device *obd; /* pointer to LMV itself */
37 lmv_lock_obj(struct lmv_obj *obj)
44 lmv_unlock_obj(struct lmv_obj *obj)
50 void lmv_add_obj(struct lmv_obj *obj);
51 void lmv_del_obj(struct lmv_obj *obj);
53 void lmv_put_obj(struct lmv_obj *obj);
54 void lmv_free_obj(struct lmv_obj *obj);
56 int lmv_setup_mgr(struct obd_device *obd);
57 void lmv_cleanup_mgr(struct obd_device *obd);
58 int lmv_check_connect(struct obd_device *obd);
60 struct lmv_obj *lmv_get_obj(struct lmv_obj *obj);
62 struct lmv_obj *lmv_grab_obj(struct obd_device *obd,
63 struct lustre_id *id);
65 struct lmv_obj *lmv_alloc_obj(struct obd_device *obd,
69 struct lmv_obj *lmv_create_obj(struct obd_export *exp,
73 int lmv_delete_obj(struct obd_export *exp, struct lustre_id *id);
75 int lmv_intent_lock(struct obd_export *, struct lustre_id *,
76 const char *, int, void *, int,
77 struct lustre_id *, struct lookup_intent *, int,
78 struct ptlrpc_request **, ldlm_blocking_callback);
80 int lmv_intent_lookup(struct obd_export *, struct lustre_id *,
81 const char *, int, void *, int,
82 struct lustre_id *, struct lookup_intent *, int,
83 struct ptlrpc_request **, ldlm_blocking_callback);
85 int lmv_intent_getattr(struct obd_export *, struct lustre_id *,
86 const char *, int, void *, int,
87 struct lustre_id *, struct lookup_intent *, int,
88 struct ptlrpc_request **, ldlm_blocking_callback);
90 int lmv_intent_open(struct obd_export *, struct lustre_id *, const char *,
91 int, void *, int, struct lustre_id *, struct lookup_intent *,
92 int, struct ptlrpc_request **, ldlm_blocking_callback);
94 int lmv_revalidate_slaves(struct obd_export *, struct ptlrpc_request **,
95 struct lustre_id *, struct lookup_intent *, int,
96 ldlm_blocking_callback cb_blocking);
98 int lmv_get_mea_and_update_object(struct obd_export *, struct lustre_id *);
99 int lmv_dirobj_blocking_ast(struct ldlm_lock *, struct ldlm_lock_desc *,
102 static inline struct mea *
103 lmv_splitted_dir_body(struct ptlrpc_request *req, int offset)
105 struct mds_body *body;
110 body = lustre_msg_buf(req->rq_repmsg, offset, sizeof(*body));
112 if (!body || !S_ISDIR(body->mode) || !body->eadatasize)
115 mea = lustre_msg_buf(req->rq_repmsg, offset + 1,
119 if (mea->mea_count == 0)
126 extern struct file_operations lmv_proc_target_fops;