Blame view

include/linux/ext2_fs_sb.h 3.99 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  /*
   *  linux/include/linux/ext2_fs_sb.h
   *
   * 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
   */
  
  #ifndef _LINUX_EXT2_FS_SB
  #define _LINUX_EXT2_FS_SB
  
  #include <linux/blockgroup_lock.h>
  #include <linux/percpu_counter.h>
a686cd898   Martin J. Bligh   ext2 reservations
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
  #include <linux/rbtree.h>
  
  /* XXX Here for now... not interested in restructing headers JUST now */
  
  /* data type for block offset of block group */
  typedef int ext2_grpblk_t;
  
  /* data type for filesystem-wide blocks number */
  typedef unsigned long ext2_fsblk_t;
  
  #define E2FSBLK "%lu"
  
  struct ext2_reserve_window {
  	ext2_fsblk_t		_rsv_start;	/* First byte reserved */
  	ext2_fsblk_t		_rsv_end;	/* Last byte reserved or 0 */
  };
  
  struct ext2_reserve_window_node {
  	struct rb_node	 	rsv_node;
  	__u32			rsv_goal_size;
  	__u32			rsv_alloc_hit;
  	struct ext2_reserve_window	rsv_window;
  };
  
  struct ext2_block_alloc_info {
  	/* information about reservation window */
  	struct ext2_reserve_window_node	rsv_window_node;
  	/*
  	 * was i_next_alloc_block in ext2_inode_info
  	 * is the logical (file-relative) number of the
  	 * most-recently-allocated block in this file.
  	 * We use this for detecting linearly ascending allocation requests.
  	 */
  	__u32			last_alloc_logical_block;
  	/*
  	 * Was i_next_alloc_goal in ext2_inode_info
  	 * is the *physical* companion to i_next_alloc_block.
  	 * it the the physical block number of the block which was most-recentl
  	 * allocated to this file.  This give us the goal (target) for the next
  	 * allocation when we detect linearly ascending requests.
  	 */
  	ext2_fsblk_t		last_alloc_physical_block;
  };
  
  #define rsv_start rsv_window._rsv_start
  #define rsv_end rsv_window._rsv_end
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  
  /*
   * second extended-fs super-block data in memory
   */
  struct ext2_sb_info {
  	unsigned long s_frag_size;	/* Size of a fragment in bytes */
  	unsigned long s_frags_per_block;/* Number of fragments per block */
  	unsigned long s_inodes_per_block;/* Number of inodes per block */
  	unsigned long s_frags_per_group;/* Number of fragments in a group */
  	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 */
  	unsigned long s_groups_count;	/* Number of groups in the fs */
2235219b7   Badari Pulavarty   ext2: statfs spee...
82
83
  	unsigned long s_overhead_last;  /* Last calculated overhead */
  	unsigned long s_blocks_last;    /* Last seen block count */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
84
85
86
87
  	struct buffer_head * s_sbh;	/* Buffer containing the super block */
  	struct ext2_super_block * s_es;	/* Pointer to the super block in the buffer */
  	struct buffer_head ** s_group_desc;
  	unsigned long  s_mount_opt;
93d44cb27   Miklos Szeredi   ext2: show all mo...
88
  	unsigned long s_sb_block;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  	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;
  	unsigned long s_dir_count;
  	u8 *s_debts;
  	struct percpu_counter s_freeblocks_counter;
  	struct percpu_counter s_freeinodes_counter;
  	struct percpu_counter s_dirs_counter;
18a82eb9f   Pekka J Enberg   ext2: allocate ->...
104
  	struct blockgroup_lock *s_blockgroup_lock;
a686cd898   Martin J. Bligh   ext2 reservations
105
106
107
108
  	/* root of the per fs reservation window tree */
  	spinlock_t s_rsv_window_lock;
  	struct rb_root s_rsv_window_root;
  	struct ext2_reserve_window_node s_rsv_window_head;
c15271f4e   Jan Blunck   ext2: Add ext2_sb...
109
110
111
112
113
114
115
116
117
  	/*
  	 * s_lock protects against concurrent modifications of s_mount_state,
  	 * s_blocks_last, s_overhead_last and the content of superblock's
  	 * buffer pointed to by sbi->s_es.
  	 *
  	 * Note: It is used in ext2_show_options() to provide a consistent view
  	 * of the mount options.
  	 */
  	spinlock_t s_lock;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
118
  };
c644f0e4b   Pekka Enberg   fs: introduce bgl...
119
120
121
  static inline spinlock_t *
  sb_bgl_lock(struct ext2_sb_info *sbi, unsigned int block_group)
  {
18a82eb9f   Pekka J Enberg   ext2: allocate ->...
122
  	return bgl_lock_ptr(sbi->s_blockgroup_lock, block_group);
c644f0e4b   Pekka Enberg   fs: introduce bgl...
123
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
124
  #endif	/* _LINUX_EXT2_FS_SB */