Blame view

fs/gfs2/lops.h 2.92 KB
b3b94faa5   David Teigland   [GFS2] The core o...
1
2
  /*
   * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
d0109bfa8   Bob Peterson   [GFS2] Only do lo...
3
   * Copyright (C) 2004-2008 Red Hat, Inc.  All rights reserved.
b3b94faa5   David Teigland   [GFS2] The core o...
4
5
6
   *
   * This copyrighted material is made available to anyone wishing to use,
   * modify, copy, or redistribute it subject to the terms and conditions
e9fc2aa09   Steven Whitehouse   [GFS2] Update cop...
7
   * of the GNU General Public License version 2.
b3b94faa5   David Teigland   [GFS2] The core o...
8
9
10
11
   */
  
  #ifndef __LOPS_DOT_H__
  #define __LOPS_DOT_H__
f2f7ba523   Steven Whitehouse   [GFS2] Make heade...
12
13
  #include <linux/list.h>
  #include "incore.h"
2332c4435   Robert Peterson   [GFS2] assertion ...
14
15
16
17
18
19
  #define BUF_OFFSET \
  	((sizeof(struct gfs2_log_descriptor) + sizeof(__be64) - 1) & \
  	 ~(sizeof(__be64) - 1))
  #define DATABUF_OFFSET \
  	((sizeof(struct gfs2_log_descriptor) + (2 * sizeof(__be64) - 1)) & \
  	 ~(2 * sizeof(__be64) - 1))
b09e593d7   Steven Whitehouse   [GFS2] Fix a ref ...
20
21
22
23
24
  extern const struct gfs2_log_operations gfs2_glock_lops;
  extern const struct gfs2_log_operations gfs2_buf_lops;
  extern const struct gfs2_log_operations gfs2_revoke_lops;
  extern const struct gfs2_log_operations gfs2_rg_lops;
  extern const struct gfs2_log_operations gfs2_databuf_lops;
b3b94faa5   David Teigland   [GFS2] The core o...
25

b09e593d7   Steven Whitehouse   [GFS2] Fix a ref ...
26
  extern const struct gfs2_log_operations *gfs2_log_ops[];
b3b94faa5   David Teigland   [GFS2] The core o...
27

2332c4435   Robert Peterson   [GFS2] assertion ...
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  static inline unsigned int buf_limit(struct gfs2_sbd *sdp)
  {
  	unsigned int limit;
  
  	limit = (sdp->sd_sb.sb_bsize - BUF_OFFSET) / sizeof(__be64);
  	return limit;
  }
  
  static inline unsigned int databuf_limit(struct gfs2_sbd *sdp)
  {
  	unsigned int limit;
  
  	limit = (sdp->sd_sb.sb_bsize - DATABUF_OFFSET) / (2 * sizeof(__be64));
  	return limit;
  }
b3b94faa5   David Teigland   [GFS2] The core o...
43
  static inline void lops_init_le(struct gfs2_log_element *le,
b09e593d7   Steven Whitehouse   [GFS2] Fix a ref ...
44
  				const struct gfs2_log_operations *lops)
b3b94faa5   David Teigland   [GFS2] The core o...
45
46
47
48
49
50
51
52
53
54
  {
  	INIT_LIST_HEAD(&le->le_list);
  	le->le_ops = lops;
  }
  
  static inline void lops_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
  {
  	if (le->le_ops->lo_add)
  		le->le_ops->lo_add(sdp, le);
  }
b3b94faa5   David Teigland   [GFS2] The core o...
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  static inline void lops_before_commit(struct gfs2_sbd *sdp)
  {
  	int x;
  	for (x = 0; gfs2_log_ops[x]; x++)
  		if (gfs2_log_ops[x]->lo_before_commit)
  			gfs2_log_ops[x]->lo_before_commit(sdp);
  }
  
  static inline void lops_after_commit(struct gfs2_sbd *sdp, struct gfs2_ail *ai)
  {
  	int x;
  	for (x = 0; gfs2_log_ops[x]; x++)
  		if (gfs2_log_ops[x]->lo_after_commit)
  			gfs2_log_ops[x]->lo_after_commit(sdp, ai);
  }
  
  static inline void lops_before_scan(struct gfs2_jdesc *jd,
551676226   Al Viro   [GFS2] split and ...
72
  				    struct gfs2_log_header_host *head,
b3b94faa5   David Teigland   [GFS2] The core o...
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
  				    unsigned int pass)
  {
  	int x;
  	for (x = 0; gfs2_log_ops[x]; x++)
  		if (gfs2_log_ops[x]->lo_before_scan)
  			gfs2_log_ops[x]->lo_before_scan(jd, head, pass);
  }
  
  static inline int lops_scan_elements(struct gfs2_jdesc *jd, unsigned int start,
  				     struct gfs2_log_descriptor *ld,
  				     __be64 *ptr,
  				     unsigned int pass)
  {
  	int x, error;
  	for (x = 0; gfs2_log_ops[x]; x++)
  		if (gfs2_log_ops[x]->lo_scan_elements) {
  			error = gfs2_log_ops[x]->lo_scan_elements(jd, start,
  								  ld, ptr, pass);
  			if (error)
  				return error;
  		}
  
  	return 0;
  }
  
  static inline void lops_after_scan(struct gfs2_jdesc *jd, int error,
  				   unsigned int pass)
  {
  	int x;
  	for (x = 0; gfs2_log_ops[x]; x++)
  		if (gfs2_log_ops[x]->lo_before_scan)
  			gfs2_log_ops[x]->lo_after_scan(jd, error, pass);
  }
  
  #endif /* __LOPS_DOT_H__ */