Whamcloud - gitweb
- added lmv_destroy_obj() which will be used for destroying splitted object
[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) ((it) ? ldlm_it2str((it)->it_op) : "0")
5 #define MEA_SIZE_LMV(lmv)       \
6         ((lmv)->desc.ld_tgt_count * sizeof(struct ll_fid) + sizeof(struct mea))
7         
8 struct lmv_inode {
9         struct ll_fid   fid;            /* fid of dirobj */
10         unsigned long   size;
11         int             flags;
12 };
13
14 struct lmv_obj {
15         struct list_head        list;
16         atomic_t                count;
17         struct ll_fid           fid;            /* master fid of dir */
18         void                    *update;        /* bitmap of status (uptodate) */
19         int                     objcount;
20         struct lmv_inode        *objs;          /* array of dirobjs */
21         struct obd_device       *obd;           /* pointer to LMV itself */
22 };
23
24 int lmv_setup_mgr(struct obd_device *obd);
25 void lmv_cleanup_mgr(struct obd_device *obd);
26 int lmv_check_connect(struct obd_device *obd);
27
28 void lmv_put_obj(struct lmv_obj *obj);
29 struct lmv_obj *lmv_get_obj(struct lmv_obj *obj);
30
31 struct lmv_obj *lmv_grab_obj(struct obd_device *obd,
32                              struct ll_fid *fid);
33
34 int lmv_create_obj(struct obd_export *exp, struct ll_fid *fid,
35                    struct mea *mea);
36
37 int lmv_destroy_obj(struct obd_export *exp, struct ll_fid *fid);
38
39 int lmv_intent_lock(struct obd_export *, struct ll_uctxt *,
40                     struct ll_fid *, const char *, int, void *, int,
41                     struct ll_fid *, struct lookup_intent *, int,
42                     struct ptlrpc_request **, ldlm_blocking_callback);
43
44 int lmv_intent_lookup(struct obd_export *, struct ll_uctxt *,
45                       struct ll_fid *, const char *, int, void *, int,
46                       struct ll_fid *, struct lookup_intent *, int,
47                       struct ptlrpc_request **, ldlm_blocking_callback);
48
49 int lmv_intent_getattr(struct obd_export *, struct ll_uctxt *,
50                        struct ll_fid *, const char *, int, void *, int,
51                        struct ll_fid *, struct lookup_intent *, int,
52                        struct ptlrpc_request **, ldlm_blocking_callback);
53
54 int lmv_intent_open(struct obd_export *, struct ll_uctxt *,
55                     struct ll_fid *, const char *, int, void *, int,
56                     struct ll_fid *, struct lookup_intent *, int,
57                     struct ptlrpc_request **, ldlm_blocking_callback);
58
59 int lmv_revalidate_slaves(struct obd_export *, struct ptlrpc_request **,
60                           struct ll_fid *, struct lookup_intent *, int,
61                           ldlm_blocking_callback cb_blocking);
62
63 int lmv_get_mea_and_update_object(struct obd_export *, struct ll_fid *);
64
65 int lmv_dirobj_blocking_ast(struct ldlm_lock *, struct ldlm_lock_desc *,
66                             void *, int);
67
68 static inline struct mea * 
69 is_body_of_splitted_dir(struct ptlrpc_request *req, int offset)
70 {
71         struct mds_body *body;
72         struct mea *mea;
73
74         LASSERT(req);
75
76         body = lustre_msg_buf(req->rq_repmsg, offset, sizeof(*body));
77
78         if (!body || !S_ISDIR(body->mode) || !body->eadatasize)
79                 return NULL;
80
81         mea = lustre_msg_buf(req->rq_repmsg, offset + 1, body->eadatasize);
82         LASSERT(mea);
83
84         if (mea->mea_count == 0)
85                 return NULL;
86         
87         return mea;
88 }
89
90 static inline int fid_equal(struct ll_fid *fid1, struct ll_fid *fid2)
91 {
92         if (fid1->mds != fid2->mds)
93                 return 0;
94         if (fid1->id != fid2->id)
95                 return 0;
96         if (fid1->generation != fid2->generation)
97                 return 0;
98         return 1;
99 }
100
101 #endif
102