Whamcloud - gitweb
- landing b_fid.
[fs/lustre-release.git] / lustre / lmv / lmv_internal.h
1 #ifndef _LMV_INTERNAL_H_
2 #define _LMV_INTERNAL_H_
3
4 #define LL_IT2STR(it)                                   \
5         ((it) ? ldlm_it2str((it)->it_op) : "0")
6
7 #define MEA_SIZE_LMV(lmv)                               \
8         ((lmv)->desc.ld_tgt_count *                     \
9          sizeof(struct lustre_id) + sizeof(struct mea))
10         
11 struct lmv_inode {
12         struct lustre_id   id;             /* id of dirobj */
13         unsigned long      size;           /* slave size value */
14         int                flags;
15 };
16
17 #define O_FREEING          (1 << 0)
18
19 struct lmv_obj {
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) */
26         __u32              hashtype;
27         int                objcount;       /* number of slaves */
28         struct lmv_inode   *objs;          /* array of dirobjs */
29         struct obd_device  *obd;           /* pointer to LMV itself */
30         unsigned long      mtime;
31         unsigned long      ctime;
32         unsigned long      atime;
33         unsigned long      nlink;
34 };
35
36 static inline void
37 lmv_lock_obj(struct lmv_obj *obj)
38 {
39         LASSERT(obj);
40         down(&obj->guard);
41 }
42
43 static inline void
44 lmv_unlock_obj(struct lmv_obj *obj)
45 {
46         LASSERT(obj);
47         up(&obj->guard);
48 }
49
50 void lmv_add_obj(struct lmv_obj *obj);
51 void lmv_del_obj(struct lmv_obj *obj);
52
53 void lmv_put_obj(struct lmv_obj *obj);
54 void lmv_free_obj(struct lmv_obj *obj);
55
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);
59
60 struct lmv_obj *lmv_get_obj(struct lmv_obj *obj);
61
62 struct lmv_obj *lmv_grab_obj(struct obd_device *obd,
63                              struct lustre_id *id);
64
65 struct lmv_obj *lmv_alloc_obj(struct obd_device *obd,
66                               struct lustre_id *id,
67                               struct mea *mea);
68
69 struct lmv_obj *lmv_create_obj(struct obd_export *exp,
70                                struct lustre_id *id,
71                                struct mea *mea);
72
73 int lmv_delete_obj(struct obd_export *exp, struct lustre_id *id);
74
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);
79
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);
84
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);
89
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);
93
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);
97
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 *,
100                             void *, int);
101
102 static inline struct mea * 
103 lmv_splitted_dir_body(struct ptlrpc_request *req, int offset)
104 {
105         struct mds_body *body;
106         struct mea *mea;
107
108         LASSERT(req);
109
110         body = lustre_msg_buf(req->rq_repmsg, offset, sizeof(*body));
111
112         if (!body || !S_ISDIR(body->mode) || !body->eadatasize)
113                 return NULL;
114
115         mea = lustre_msg_buf(req->rq_repmsg, offset + 1,
116                              body->eadatasize);
117         LASSERT(mea);
118
119         if (mea->mea_count == 0)
120                 return NULL;
121         
122         return mea;
123 }
124
125 /* lproc_lmv.c */
126 extern struct file_operations lmv_proc_target_fops;
127
128 #endif
129