ext4_fs_sb.h 4.6 KB
Newer Older
1
/*
2
 *  linux/include/linux/ext4_fs_sb.h
3 4 5 6 7 8 9 10 11 12 13 14 15
 *
 * Copyright (C) 1992, 1993, 1994, 1995
 * Remy Card (card@masi.ibp.fr)
 * Laboratoire MASI - Institut Blaise Pascal
 * Universite Pierre et Marie Curie (Paris VI)
 *
 *  from
 *
 *  linux/include/linux/minix_fs_sb.h
 *
 *  Copyright (C) 1991, 1992  Linus Torvalds
 */

16 17
#ifndef _LINUX_EXT4_FS_SB
#define _LINUX_EXT4_FS_SB
18 19 20 21 22 23 24 25 26 27 28 29

#ifdef __KERNEL__
#include <linux/timer.h>
#include <linux/wait.h>
#include <linux/blockgroup_lock.h>
#include <linux/percpu_counter.h>
#endif
#include <linux/rbtree.h>

/*
 * third extended-fs super-block data in memory
 */
30
struct ext4_sb_info {
31
	unsigned long s_desc_size;	/* Size of a group descriptor in bytes */
32 33 34 35 36 37
	unsigned long s_inodes_per_block;/* Number of inodes per block */
	unsigned long s_blocks_per_group;/* Number of blocks in a group */
	unsigned long s_inodes_per_group;/* Number of inodes in a group */
	unsigned long s_itb_per_group;	/* Number of inode table blocks per group */
	unsigned long s_gdb_count;	/* Number of group descriptor blocks */
	unsigned long s_desc_per_block;	/* Number of group descriptors per block */
38
	ext4_group_t s_groups_count;	/* Number of groups in the fs */
B
Badari Pulavarty 已提交
39 40
	unsigned long s_overhead_last;  /* Last calculated overhead */
	unsigned long s_blocks_last;    /* Last seen block count */
41
	loff_t s_bitmap_maxbytes;	/* max bytes for bitmap files */
42
	struct buffer_head * s_sbh;	/* Buffer containing the super block */
43
	struct ext4_super_block * s_es;	/* Pointer to the super block in the buffer */
44 45
	struct buffer_head ** s_group_desc;
	unsigned long  s_mount_opt;
M
Miklos Szeredi 已提交
46
	ext4_fsblk_t s_sb_block;
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
	uid_t s_resuid;
	gid_t s_resgid;
	unsigned short s_mount_state;
	unsigned short s_pad;
	int s_addr_per_block_bits;
	int s_desc_per_block_bits;
	int s_inode_size;
	int s_first_ino;
	spinlock_t s_next_gen_lock;
	u32 s_next_generation;
	u32 s_hash_seed[4];
	int s_def_hash_version;
	struct percpu_counter s_freeblocks_counter;
	struct percpu_counter s_freeinodes_counter;
	struct percpu_counter s_dirs_counter;
	struct blockgroup_lock s_blockgroup_lock;

	/* root of the per fs reservation window tree */
	spinlock_t s_rsv_window_lock;
	struct rb_root s_rsv_window_root;
67
	struct ext4_reserve_window_node s_rsv_window_head;
68 69 70 71 72 73 74

	/* Journaling */
	struct inode * s_journal_inode;
	struct journal_s * s_journal;
	struct list_head s_orphan;
	unsigned long s_commit_interval;
	struct block_device *journal_bdev;
75
#ifdef CONFIG_JBD2_DEBUG
76 77 78 79 80 81 82
	struct timer_list turn_ro_timer;	/* For turning read-only (crash simulation) */
	wait_queue_head_t ro_wait_queue;	/* For people waiting for the fs to go read-only */
#endif
#ifdef CONFIG_QUOTA
	char *s_qf_names[MAXQUOTAS];		/* Names of quota files with journalled quota */
	int s_jquota_fmt;			/* Format of quota to use */
#endif
K
Kalpak Shah 已提交
83
	unsigned int s_want_extra_isize; /* New inodes should reserve # bytes */
A
Alex Tomas 已提交
84 85 86 87 88 89 90 91 92 93

#ifdef EXTENTS_STATS
	/* ext4 extents stats */
	unsigned long s_ext_min;
	unsigned long s_ext_max;
	unsigned long s_depth_max;
	spinlock_t s_ext_stats_lock;
	unsigned long s_ext_blocks;
	unsigned long s_ext_extents;
#endif
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145

	/* for buddy allocator */
	struct ext4_group_info ***s_group_info;
	struct inode *s_buddy_cache;
	long s_blocks_reserved;
	spinlock_t s_reserve_lock;
	struct list_head s_active_transaction;
	struct list_head s_closed_transaction;
	struct list_head s_committed_transaction;
	spinlock_t s_md_lock;
	tid_t s_last_transaction;
	unsigned short *s_mb_offsets, *s_mb_maxs;

	/* tunables */
	unsigned long s_stripe;
	unsigned long s_mb_stream_request;
	unsigned long s_mb_max_to_scan;
	unsigned long s_mb_min_to_scan;
	unsigned long s_mb_stats;
	unsigned long s_mb_order2_reqs;
	unsigned long s_mb_group_prealloc;
	/* where last allocation was done - for stream allocation */
	unsigned long s_mb_last_group;
	unsigned long s_mb_last_start;

	/* history to debug policy */
	struct ext4_mb_history *s_mb_history;
	int s_mb_history_cur;
	int s_mb_history_max;
	int s_mb_history_num;
	struct proc_dir_entry *s_mb_proc;
	spinlock_t s_mb_history_lock;
	int s_mb_history_filter;

	/* stats for buddy allocator */
	spinlock_t s_mb_pa_lock;
	atomic_t s_bal_reqs;	/* number of reqs with len > 1 */
	atomic_t s_bal_success;	/* we found long enough chunks */
	atomic_t s_bal_allocated;	/* in blocks */
	atomic_t s_bal_ex_scanned;	/* total extents scanned */
	atomic_t s_bal_goals;	/* goal hits */
	atomic_t s_bal_breaks;	/* too long searches */
	atomic_t s_bal_2orders;	/* 2^order hits */
	spinlock_t s_bal_lock;
	unsigned long s_mb_buddies_generated;
	unsigned long long s_mb_generation_time;
	atomic_t s_mb_lost_chunks;
	atomic_t s_mb_preallocated;
	atomic_t s_mb_discarded;

	/* locality groups */
	struct ext4_locality_group *s_locality_groups;
146 147
};

148
#endif	/* _LINUX_EXT4_FS_SB */