0c78d222d6f2421949a73aa094963c1d17d0333b
[linux-2.6.git] / fs / gfs2 / lops.h
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2005 Red Hat, Inc.  All rights reserved.
4  *
5  * This copyrighted material is made available to anyone wishing to use,
6  * modify, copy, or redistribute it subject to the terms and conditions
7  * of the GNU General Public License v.2.
8  */
9
10 #ifndef __LOPS_DOT_H__
11 #define __LOPS_DOT_H__
12
13 extern const struct gfs2_log_operations gfs2_glock_lops;
14 extern const struct gfs2_log_operations gfs2_buf_lops;
15 extern const struct gfs2_log_operations gfs2_revoke_lops;
16 extern const struct gfs2_log_operations gfs2_rg_lops;
17 extern const struct gfs2_log_operations gfs2_databuf_lops;
18
19 extern const struct gfs2_log_operations *gfs2_log_ops[];
20
21 static inline void lops_init_le(struct gfs2_log_element *le,
22                                 const struct gfs2_log_operations *lops)
23 {
24         INIT_LIST_HEAD(&le->le_list);
25         le->le_ops = lops;
26 }
27
28 static inline void lops_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
29 {
30         if (le->le_ops->lo_add)
31                 le->le_ops->lo_add(sdp, le);
32 }
33
34 static inline void lops_incore_commit(struct gfs2_sbd *sdp,
35                                       struct gfs2_trans *tr)
36 {
37         int x;
38         for (x = 0; gfs2_log_ops[x]; x++)
39                 if (gfs2_log_ops[x]->lo_incore_commit)
40                         gfs2_log_ops[x]->lo_incore_commit(sdp, tr);
41 }
42
43 static inline void lops_before_commit(struct gfs2_sbd *sdp)
44 {
45         int x;
46         for (x = 0; gfs2_log_ops[x]; x++)
47                 if (gfs2_log_ops[x]->lo_before_commit)
48                         gfs2_log_ops[x]->lo_before_commit(sdp);
49 }
50
51 static inline void lops_after_commit(struct gfs2_sbd *sdp, struct gfs2_ail *ai)
52 {
53         int x;
54         for (x = 0; gfs2_log_ops[x]; x++)
55                 if (gfs2_log_ops[x]->lo_after_commit)
56                         gfs2_log_ops[x]->lo_after_commit(sdp, ai);
57 }
58
59 static inline void lops_before_scan(struct gfs2_jdesc *jd,
60                                     struct gfs2_log_header *head,
61                                     unsigned int pass)
62 {
63         int x;
64         for (x = 0; gfs2_log_ops[x]; x++)
65                 if (gfs2_log_ops[x]->lo_before_scan)
66                         gfs2_log_ops[x]->lo_before_scan(jd, head, pass);
67 }
68
69 static inline int lops_scan_elements(struct gfs2_jdesc *jd, unsigned int start,
70                                      struct gfs2_log_descriptor *ld,
71                                      __be64 *ptr,
72                                      unsigned int pass)
73 {
74         int x, error;
75         for (x = 0; gfs2_log_ops[x]; x++)
76                 if (gfs2_log_ops[x]->lo_scan_elements) {
77                         error = gfs2_log_ops[x]->lo_scan_elements(jd, start,
78                                                                   ld, ptr, pass);
79                         if (error)
80                                 return error;
81                 }
82
83         return 0;
84 }
85
86 static inline void lops_after_scan(struct gfs2_jdesc *jd, int error,
87                                    unsigned int pass)
88 {
89         int x;
90         for (x = 0; gfs2_log_ops[x]; x++)
91                 if (gfs2_log_ops[x]->lo_before_scan)
92                         gfs2_log_ops[x]->lo_after_scan(jd, error, pass);
93 }
94
95 #endif /* __LOPS_DOT_H__ */
96