^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * segment.h - NILFS Segment constructor prototypes and definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 2005-2008 Nippon Telegraph and Telephone Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * Written by Ryusuke Konishi.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef _NILFS_SEGMENT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define _NILFS_SEGMENT_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <linux/fs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <linux/buffer_head.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <linux/workqueue.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include "nilfs.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) struct nilfs_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * struct nilfs_recovery_info - Recovery information
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * @ri_need_recovery: Recovery status
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * @ri_super_root: Block number of the last super root
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * @ri_ri_cno: Number of the last checkpoint
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * @ri_lsegs_start: Region for roll-forwarding (start block number)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * @ri_lsegs_end: Region for roll-forwarding (end block number)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * @ri_lseg_start_seq: Sequence value of the segment at ri_lsegs_start
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * @ri_used_segments: List of segments to be mark active
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * @ri_pseg_start: Block number of the last partial segment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * @ri_seq: Sequence number on the last partial segment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * @ri_segnum: Segment number on the last partial segment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) * @ri_nextnum: Next segment number on the last partial segment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) struct nilfs_recovery_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) int ri_need_recovery;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) sector_t ri_super_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) __u64 ri_cno;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) sector_t ri_lsegs_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) sector_t ri_lsegs_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) u64 ri_lsegs_start_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) struct list_head ri_used_segments;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) sector_t ri_pseg_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) u64 ri_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) __u64 ri_segnum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) __u64 ri_nextnum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) /* ri_need_recovery */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define NILFS_RECOVERY_SR_UPDATED 1 /* The super root was updated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define NILFS_RECOVERY_ROLLFORWARD_DONE 2 /* Rollforward was carried out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) * struct nilfs_cstage - Context of collection stage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) * @scnt: Stage count, must be accessed via wrappers:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) * nilfs_sc_cstage_inc(), nilfs_sc_cstage_set(), nilfs_sc_cstage_get()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) * @flags: State flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) * @dirty_file_ptr: Pointer on dirty_files list, or inode of a target file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) * @gc_inode_ptr: Pointer on the list of gc-inodes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) struct nilfs_cstage {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) int scnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) unsigned int flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) struct nilfs_inode_info *dirty_file_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct nilfs_inode_info *gc_inode_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) struct nilfs_segment_buffer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) struct nilfs_segsum_pointer {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) struct buffer_head *bh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) unsigned int offset; /* offset in bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) * struct nilfs_sc_info - Segment constructor information
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) * @sc_super: Back pointer to super_block struct
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) * @sc_root: root object of the current filesystem tree
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) * @sc_nblk_inc: Block count of current generation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) * @sc_dirty_files: List of files to be written
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) * @sc_gc_inodes: List of GC inodes having blocks to be written
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) * @sc_iput_queue: list of inodes for which iput should be done
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) * @sc_iput_work: work struct to defer iput call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) * @sc_freesegs: array of segment numbers to be freed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) * @sc_nfreesegs: number of segments on @sc_freesegs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) * @sc_dsync_inode: inode whose data pages are written for a sync operation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) * @sc_dsync_start: start byte offset of data pages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) * @sc_dsync_end: end byte offset of data pages (inclusive)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) * @sc_segbufs: List of segment buffers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) * @sc_write_logs: List of segment buffers to hold logs under writing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) * @sc_segbuf_nblocks: Number of available blocks in segment buffers.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) * @sc_curseg: Current segment buffer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) * @sc_stage: Collection stage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) * @sc_finfo_ptr: pointer to the current finfo struct in the segment summary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) * @sc_binfo_ptr: pointer to the current binfo struct in the segment summary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) * @sc_blk_cnt: Block count of a file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) * @sc_datablk_cnt: Data block count of a file
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) * @sc_nblk_this_inc: Number of blocks included in the current logical segment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) * @sc_seg_ctime: Creation time
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) * @sc_cno: checkpoint number of current log
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) * @sc_flags: Internal flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) * @sc_state_lock: spinlock for sc_state and so on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) * @sc_state: Segctord state flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) * @sc_flush_request: inode bitmap of metadata files to be flushed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) * @sc_wait_request: Client request queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) * @sc_wait_daemon: Daemon wait queue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) * @sc_wait_task: Start/end wait queue to control segctord task
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) * @sc_seq_request: Request counter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) * @sc_seq_accept: Accepted request count
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) * @sc_seq_done: Completion counter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) * @sc_sync: Request of explicit sync operation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) * @sc_interval: Timeout value of background construction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) * @sc_mjcp_freq: Frequency of creating checkpoints
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) * @sc_lseg_stime: Start time of the latest logical segment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) * @sc_watermark: Watermark for the number of dirty buffers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) * @sc_timer: Timer for segctord
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) * @sc_task: current thread of segctord
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) struct nilfs_sc_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) struct super_block *sc_super;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) struct nilfs_root *sc_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) unsigned long sc_nblk_inc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) struct list_head sc_dirty_files;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) struct list_head sc_gc_inodes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) struct list_head sc_iput_queue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) struct work_struct sc_iput_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) __u64 *sc_freesegs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) size_t sc_nfreesegs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) struct nilfs_inode_info *sc_dsync_inode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) loff_t sc_dsync_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) loff_t sc_dsync_end;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) /* Segment buffers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) struct list_head sc_segbufs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) struct list_head sc_write_logs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) unsigned long sc_segbuf_nblocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) struct nilfs_segment_buffer *sc_curseg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) struct nilfs_cstage sc_stage;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) struct nilfs_segsum_pointer sc_finfo_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) struct nilfs_segsum_pointer sc_binfo_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) unsigned long sc_blk_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) unsigned long sc_datablk_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) unsigned long sc_nblk_this_inc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) time64_t sc_seg_ctime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) __u64 sc_cno;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) unsigned long sc_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) spinlock_t sc_state_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) unsigned long sc_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) unsigned long sc_flush_request;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) wait_queue_head_t sc_wait_request;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) wait_queue_head_t sc_wait_daemon;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) wait_queue_head_t sc_wait_task;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) __u32 sc_seq_request;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) __u32 sc_seq_accepted;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) __u32 sc_seq_done;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) int sc_sync;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) unsigned long sc_interval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) unsigned long sc_mjcp_freq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) unsigned long sc_lseg_stime; /* in 1/HZ seconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) unsigned long sc_watermark;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) struct timer_list sc_timer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) struct task_struct *sc_timer_task;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) struct task_struct *sc_task;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) /* sc_flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) NILFS_SC_DIRTY, /* One or more dirty meta-data blocks exist */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) NILFS_SC_UNCLOSED, /* Logical segment is not closed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) NILFS_SC_SUPER_ROOT, /* The latest segment has a super root */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) NILFS_SC_PRIOR_FLUSH, /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) * Requesting immediate flush without making a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) * checkpoint
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) NILFS_SC_HAVE_DELTA, /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) * Next checkpoint will have update of files
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) * other than DAT, cpfile, sufile, or files
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) * moved by GC.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) /* sc_state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define NILFS_SEGCTOR_QUIT 0x0001 /* segctord is being destroyed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define NILFS_SEGCTOR_COMMIT 0x0004 /* committed transaction exists */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) * Constant parameters
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define NILFS_SC_CLEANUP_RETRY 3 /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) * Retry count of construction when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) * destroying segctord
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) * Default values of timeout, in seconds.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define NILFS_SC_DEFAULT_TIMEOUT 5 /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) * Timeout value of dirty blocks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) * It triggers construction of a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) * logical segment with a super root.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define NILFS_SC_DEFAULT_SR_FREQ 30 /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) * Maximum frequency of super root
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) * creation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) * The default threshold amount of data, in block counts.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define NILFS_SC_DEFAULT_WATERMARK 3600
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) /* super.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) extern struct kmem_cache *nilfs_transaction_cachep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) /* segment.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) extern void nilfs_relax_pressure_in_lock(struct super_block *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) extern int nilfs_construct_segment(struct super_block *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) extern int nilfs_construct_dsync_segment(struct super_block *, struct inode *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) loff_t, loff_t);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) extern void nilfs_flush_segment(struct super_block *, ino_t);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) extern int nilfs_clean_segments(struct super_block *, struct nilfs_argv *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) void **);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) int nilfs_attach_log_writer(struct super_block *sb, struct nilfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) void nilfs_detach_log_writer(struct super_block *sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) /* recovery.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) extern int nilfs_read_super_root_block(struct the_nilfs *, sector_t,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) struct buffer_head **, int);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) extern int nilfs_search_super_root(struct the_nilfs *,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) struct nilfs_recovery_info *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) int nilfs_salvage_orphan_logs(struct the_nilfs *nilfs, struct super_block *sb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) struct nilfs_recovery_info *ri);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) extern void nilfs_dispose_segment_list(struct list_head *);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) #endif /* _NILFS_SEGMENT_H */