Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
segment.h
Go to the documentation of this file.
1 /*
2  * segment.h - NILFS Segment constructor prototypes and definitions
3  *
4  * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  *
20  * Written by Ryusuke Konishi <[email protected]>
21  *
22  */
23 #ifndef _NILFS_SEGMENT_H
24 #define _NILFS_SEGMENT_H
25 
26 #include <linux/types.h>
27 #include <linux/fs.h>
28 #include <linux/buffer_head.h>
29 #include <linux/nilfs2_fs.h>
30 #include "nilfs.h"
31 
32 struct nilfs_root;
33 
52 
61 };
62 
63 /* ri_need_recovery */
64 #define NILFS_RECOVERY_SR_UPDATED 1 /* The super root was updated */
65 #define NILFS_RECOVERY_ROLLFORWARD_DONE 2 /* Rollforward was carried out */
66 
74 struct nilfs_cstage {
75  int scnt;
76  unsigned flags;
79 };
80 
82 
84  struct buffer_head *bh;
85  unsigned offset; /* offset in bytes */
86 };
87 
133 
134  unsigned long sc_nblk_inc;
135 
138 
140  size_t sc_nfreesegs;
141 
144  loff_t sc_dsync_end;
145 
146  /* Segment buffers */
149  unsigned long sc_segbuf_nblocks;
151 
153 
156  unsigned long sc_blk_cnt;
157  unsigned long sc_datablk_cnt;
158  unsigned long sc_nblk_this_inc;
161  unsigned long sc_flags;
162 
164  unsigned long sc_state;
165  unsigned long sc_flush_request;
166 
170 
174 
175  int sc_sync;
176  unsigned long sc_interval;
177  unsigned long sc_mjcp_freq;
178  unsigned long sc_lseg_stime; /* in 1/HZ seconds */
179  unsigned long sc_watermark;
180 
183 };
184 
185 /* sc_flags */
186 enum {
187  NILFS_SC_DIRTY, /* One or more dirty meta-data blocks exist */
188  NILFS_SC_UNCLOSED, /* Logical segment is not closed */
189  NILFS_SC_SUPER_ROOT, /* The latest segment has a super root */
190  NILFS_SC_PRIOR_FLUSH, /* Requesting immediate flush without making a
191  checkpoint */
192  NILFS_SC_HAVE_DELTA, /* Next checkpoint will have update of files
193  other than DAT, cpfile, sufile, or files
194  moved by GC */
195 };
196 
197 /* sc_state */
198 #define NILFS_SEGCTOR_QUIT 0x0001 /* segctord is being destroyed */
199 #define NILFS_SEGCTOR_COMMIT 0x0004 /* committed transaction exists */
200 
201 /*
202  * Constant parameters
203  */
204 #define NILFS_SC_CLEANUP_RETRY 3 /* Retry count of construction when
205  destroying segctord */
206 
207 /*
208  * Default values of timeout, in seconds.
209  */
210 #define NILFS_SC_DEFAULT_TIMEOUT 5 /* Timeout value of dirty blocks.
211  It triggers construction of a
212  logical segment with a super root */
213 #define NILFS_SC_DEFAULT_SR_FREQ 30 /* Maximum frequency of super root
214  creation */
216 /*
217  * The default threshold amount of data, in block counts.
218  */
219 #define NILFS_SC_DEFAULT_WATERMARK 3600
220 
221 /* super.c */
222 extern struct kmem_cache *nilfs_transaction_cachep;
223 
224 /* segment.c */
225 extern void nilfs_relax_pressure_in_lock(struct super_block *);
226 
227 extern int nilfs_construct_segment(struct super_block *);
228 extern int nilfs_construct_dsync_segment(struct super_block *, struct inode *,
229  loff_t, loff_t);
230 extern void nilfs_flush_segment(struct super_block *, ino_t);
231 extern int nilfs_clean_segments(struct super_block *, struct nilfs_argv *,
232  void **);
233 
234 int nilfs_attach_log_writer(struct super_block *sb, struct nilfs_root *root);
236 
237 /* recovery.c */
238 extern int nilfs_read_super_root_block(struct the_nilfs *, sector_t,
239  struct buffer_head **, int);
240 extern int nilfs_search_super_root(struct the_nilfs *,
241  struct nilfs_recovery_info *);
242 int nilfs_salvage_orphan_logs(struct the_nilfs *nilfs, struct super_block *sb,
243  struct nilfs_recovery_info *ri);
244 extern void nilfs_dispose_segment_list(struct list_head *);
245 
246 #endif /* _NILFS_SEGMENT_H */