Merge tag 'perf-urgent-2024-05-18' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / fs / ext4 / ext4.h
CommitLineData
f5166768 1// SPDX-License-Identifier: GPL-2.0
ac27a0ec 2/*
3dcf5451 3 * ext4.h
ac27a0ec
DK
4 *
5 * Copyright (C) 1992, 1993, 1994, 1995
6 * Remy Card (card@masi.ibp.fr)
7 * Laboratoire MASI - Institut Blaise Pascal
8 * Universite Pierre et Marie Curie (Paris VI)
9 *
10 * from
11 *
12 * linux/include/linux/minix_fs.h
13 *
14 * Copyright (C) 1991, 1992 Linus Torvalds
15 */
16
3dcf5451
CH
17#ifndef _EXT4_H
18#define _EXT4_H
ac27a0ec 19
31d21d21 20#include <linux/refcount.h>
ac27a0ec 21#include <linux/types.h>
3a5b2ecd 22#include <linux/blkdev.h>
ac27a0ec 23#include <linux/magic.h>
2ccb5fb9 24#include <linux/jbd2.h>
60e58e0f 25#include <linux/quota.h>
d444c3c3
TT
26#include <linux/rwsem.h>
27#include <linux/rbtree.h>
28#include <linux/seqlock.h>
29#include <linux/mutex.h>
ca0faba0
TT
30#include <linux/timer.h>
31#include <linux/wait.h>
174cd4b1 32#include <linux/sched/signal.h>
ca0faba0
TT
33#include <linux/blockgroup_lock.h>
34#include <linux/percpu_counter.h>
efbed4dc 35#include <linux/ratelimit.h>
0441984a 36#include <crypto/hash.h>
a633f5a3 37#include <linux/falloc.h>
c8585c6f 38#include <linux/percpu-rwsem.h>
10c5db28 39#include <linux/fiemap.h>
4d92dc0f
BH
40#ifdef __KERNEL__
41#include <linux/compat.h>
42#endif
519fe1ba 43#include <uapi/linux/ext4.h>
c9de560d 44
734f0d24 45#include <linux/fscrypt.h>
c93d8f88 46#include <linux/fsverity.h>
734f0d24 47
072ebb3b
TT
48#include <linux/compiler.h>
49
ac27a0ec 50/*
8a35694e 51 * The fourth extended filesystem constants/structures
ac27a0ec
DK
52 */
53
a2821e34
AZ
54/*
55 * with AGGRESSIVE_CHECK allocator runs consistency checks over
56 * structures. these checks slow things down a lot
57 */
58#define AGGRESSIVE_CHECK__
59
60/*
61 * with DOUBLE_CHECK defined mballoc creates persistent in-core
62 * bitmaps, maintains and uses them to check for double allocations
63 */
64#define DOUBLE_CHECK__
65
ac27a0ec 66/*
617ba13b 67 * Define EXT4FS_DEBUG to produce debug messages
ac27a0ec 68 */
617ba13b 69#undef EXT4FS_DEBUG
ac27a0ec 70
ac27a0ec
DK
71/*
72 * Debug code
73 */
617ba13b
MC
74#ifdef EXT4FS_DEBUG
75#define ext4_debug(f, a...) \
ac27a0ec 76 do { \
af5bc92d 77 printk(KERN_DEBUG "EXT4-fs DEBUG (%s, %d): %s:", \
4db9c54a 78 __FILE__, __LINE__, __func__); \
af5bc92d 79 printk(KERN_DEBUG f, ## a); \
ac27a0ec
DK
80 } while (0)
81#else
ace36ad4 82#define ext4_debug(fmt, ...) no_printk(fmt, ##__VA_ARGS__)
ac27a0ec
DK
83#endif
84
70aa1554
RH
85 /*
86 * Turn on EXT_DEBUG to enable ext4_ext_show_path/leaf/move in extents.c
87 */
88#define EXT_DEBUG__
89
4a092d73 90/*
70aa1554 91 * Dynamic printk for controlled extents debugging.
4a092d73 92 */
70aa1554
RH
93#ifdef CONFIG_EXT4_DEBUG
94#define ext_debug(ino, fmt, ...) \
95 pr_debug("[%s/%d] EXT4-fs (%s): ino %lu: (%s, %d): %s:" fmt, \
96 current->comm, task_pid_nr(current), \
97 ino->i_sb->s_id, ino->i_ino, __FILE__, __LINE__, \
98 __func__, ##__VA_ARGS__)
4a092d73 99#else
70aa1554 100#define ext_debug(ino, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
4a092d73
TT
101#endif
102
837c23fb
CX
103#define ASSERT(assert) \
104do { \
105 if (unlikely(!(assert))) { \
106 printk(KERN_EMERG \
107 "Assertion failure in %s() at %s:%d: '%s'\n", \
108 __func__, __FILE__, __LINE__, #assert); \
109 BUG(); \
110 } \
111} while (0)
112
d444c3c3
TT
113/* data type for block offset of block group */
114typedef int ext4_grpblk_t;
115
116/* data type for filesystem-wide blocks number */
117typedef unsigned long long ext4_fsblk_t;
118
119/* data type for file logical block number */
120typedef __u32 ext4_lblk_t;
121
122/* data type for block group number */
123typedef unsigned int ext4_group_t;
124
331573fe
NJ
125enum SHIFT_DIRECTION {
126 SHIFT_LEFT = 0,
127 SHIFT_RIGHT,
128};
129
4eb7a4a1 130/*
4c0cfebd
TT
131 * For each criteria, mballoc has slightly different way of finding
132 * the required blocks nad usually, higher the criteria the slower the
133 * allocation. We start at lower criterias and keep falling back to
134 * higher ones if we are not able to find any blocks. Lower (earlier)
135 * criteria are faster.
4eb7a4a1
OM
136 */
137enum criteria {
f52f3d2b 138 /*
4c0cfebd
TT
139 * Used when number of blocks needed is a power of 2. This
140 * doesn't trigger any disk IO except prefetch and is the
141 * fastest criteria.
f52f3d2b
OM
142 */
143 CR_POWER2_ALIGNED,
144
145 /*
4c0cfebd
TT
146 * Tries to lookup in-memory data structures to find the most
147 * suitable group that satisfies goal request. No disk IO
148 * except block prefetch.
f52f3d2b
OM
149 */
150 CR_GOAL_LEN_FAST,
151
152 /*
4c0cfebd
TT
153 * Same as CR_GOAL_LEN_FAST but is allowed to reduce the goal
154 * length to the best available length for faster allocation.
f52f3d2b
OM
155 */
156 CR_BEST_AVAIL_LEN,
157
158 /*
4c0cfebd
TT
159 * Reads each block group sequentially, performing disk IO if
160 * necessary, to find find_suitable block group. Tries to
161 * allocate goal length but might trim the request if nothing
162 * is found after enough tries.
f52f3d2b
OM
163 */
164 CR_GOAL_LEN_SLOW,
165
166 /*
4c0cfebd
TT
167 * Finds the first free set of blocks and allocates
168 * those. This is only used in rare cases when
169 * CR_GOAL_LEN_SLOW also fails to allocate anything.
f52f3d2b
OM
170 */
171 CR_ANY_FREE,
4c0cfebd
TT
172
173 /*
174 * Number of criterias defined.
175 */
176 EXT4_MB_NUM_CRS
4eb7a4a1
OM
177};
178
296c355c 179/*
60e6679e 180 * Flags used in mballoc's allocation_context flags field.
296c355c
TT
181 *
182 * Also used to show what's going on for debugging purposes when the
183 * flag field is exported via the traceport interface
184 */
d444c3c3 185
c9de560d 186/* prefer goal again. length */
0ef90db9 187#define EXT4_MB_HINT_MERGE 0x0001
c9de560d 188/* blocks already reserved */
0ef90db9 189#define EXT4_MB_HINT_RESERVED 0x0002
c9de560d 190/* metadata is being allocated */
0ef90db9 191#define EXT4_MB_HINT_METADATA 0x0004
c9de560d 192/* first blocks in the file */
0ef90db9 193#define EXT4_MB_HINT_FIRST 0x0008
c9de560d 194/* search for the best chunk */
0ef90db9 195#define EXT4_MB_HINT_BEST 0x0010
c9de560d 196/* data is being allocated */
0ef90db9 197#define EXT4_MB_HINT_DATA 0x0020
c9de560d 198/* don't preallocate (for tails) */
0ef90db9 199#define EXT4_MB_HINT_NOPREALLOC 0x0040
c9de560d 200/* allocate for locality group */
0ef90db9 201#define EXT4_MB_HINT_GROUP_ALLOC 0x0080
c9de560d 202/* allocate goal blocks or none */
0ef90db9 203#define EXT4_MB_HINT_GOAL_ONLY 0x0100
c9de560d 204/* goal is meaningful */
0ef90db9 205#define EXT4_MB_HINT_TRY_GOAL 0x0200
d2a17637 206/* blocks already pre-reserved by delayed allocation */
0ef90db9 207#define EXT4_MB_DELALLOC_RESERVED 0x0400
4ba74d00
TT
208/* We are doing stream allocation */
209#define EXT4_MB_STREAM_ALLOC 0x0800
55f020db
AH
210/* Use reserved root blocks if needed */
211#define EXT4_MB_USE_ROOT_BLOCKS 0x1000
27dd4385
LC
212/* Use blocks from reserved pool */
213#define EXT4_MB_USE_RESERVED 0x2000
99377830
RH
214/* Do strict check for free blocks while retrying block allocation */
215#define EXT4_MB_STRICT_CHECK 0x4000
2caffb6a
KS
216/* Large fragment size list lookup succeeded at least once for
217 * CR_POWER2_ALIGNED */
f52f3d2b 218#define EXT4_MB_CR_POWER2_ALIGNED_OPTIMIZED 0x8000
2caffb6a
KS
219/* Avg fragment size rb tree lookup succeeded at least once for
220 * CR_GOAL_LEN_FAST */
f52f3d2b 221#define EXT4_MB_CR_GOAL_LEN_FAST_OPTIMIZED 0x00010000
2caffb6a
KS
222/* Avg fragment size rb tree lookup succeeded at least once for
223 * CR_BEST_AVAIL_LEN */
f52f3d2b 224#define EXT4_MB_CR_BEST_AVAIL_LEN_OPTIMIZED 0x00020000
7e170922 225
c9de560d
AT
226struct ext4_allocation_request {
227 /* target inode for block we're allocating */
228 struct inode *inode;
726447d8
ES
229 /* how many blocks we want to allocate */
230 unsigned int len;
c9de560d
AT
231 /* logical block in target inode */
232 ext4_lblk_t logical;
c9de560d
AT
233 /* the closest logical allocated block to the left */
234 ext4_lblk_t lleft;
c9de560d
AT
235 /* the closest logical allocated block to the right */
236 ext4_lblk_t lright;
726447d8
ES
237 /* phys. target (a hint) */
238 ext4_fsblk_t goal;
239 /* phys. block for the closest logical allocated block to the left */
240 ext4_fsblk_t pleft;
241 /* phys. block for the closest logical allocated block to the right */
c9de560d 242 ext4_fsblk_t pright;
c9de560d 243 /* flags. see above EXT4_MB_HINT_* */
498e5f24 244 unsigned int flags;
c9de560d
AT
245};
246
e35fd660
TT
247/*
248 * Logical to physical block mapping, used by ext4_map_blocks()
249 *
250 * This structure is used to pass requests into ext4_map_blocks() as
251 * well as to store the information returned by ext4_map_blocks(). It
252 * takes less room on the stack than a struct buffer_head.
253 */
6db07461
RH
254#define EXT4_MAP_NEW BIT(BH_New)
255#define EXT4_MAP_MAPPED BIT(BH_Mapped)
256#define EXT4_MAP_UNWRITTEN BIT(BH_Unwritten)
257#define EXT4_MAP_BOUNDARY BIT(BH_Boundary)
874eaba9 258#define EXT4_MAP_DELAYED BIT(BH_Delay)
e35fd660 259#define EXT4_MAP_FLAGS (EXT4_MAP_NEW | EXT4_MAP_MAPPED |\
874eaba9
ZY
260 EXT4_MAP_UNWRITTEN | EXT4_MAP_BOUNDARY |\
261 EXT4_MAP_DELAYED)
e35fd660
TT
262
263struct ext4_map_blocks {
264 ext4_fsblk_t m_pblk;
265 ext4_lblk_t m_lblk;
266 unsigned int m_len;
267 unsigned int m_flags;
268};
269
7727ae52 270/*
271 * Block validity checking, system zone rbtree.
272 */
273struct ext4_system_blocks {
274 struct rb_root root;
275 struct rcu_head rcu;
276};
277
bd2d0210
TT
278/*
279 * Flags for ext4_io_end->flags
280 */
281#define EXT4_IO_END_UNWRITTEN 0x0001
bd2d0210 282
c8cc8816
RH
283struct ext4_io_end_vec {
284 struct list_head list; /* list of io_end_vec */
285 loff_t offset; /* offset in the file */
286 ssize_t size; /* size of the extent */
287};
288
4188188b 289/*
556615dc 290 * For converting unwritten extents on a work queue. 'handle' is used for
6b523df4 291 * buffered writeback.
4188188b 292 */
0031462b 293typedef struct ext4_io_end {
5b3ff237 294 struct list_head list; /* per-file finished IO list */
6b523df4
JK
295 handle_t *handle; /* handle reserved for extent
296 * conversion */
0031462b 297 struct inode *inode; /* file being written to */
b0857d30
JK
298 struct bio *bio; /* Linked list of completed
299 * bios covering the extent */
8d5d02e6 300 unsigned int flag; /* unwritten or not */
31d21d21 301 refcount_t count; /* reference counter */
c8cc8816 302 struct list_head list_vec; /* list of ext4_io_end_vec */
0031462b
MC
303} ext4_io_end_t;
304
bd2d0210 305struct ext4_io_submit {
5a33911f 306 struct writeback_control *io_wbc;
bd2d0210
TT
307 struct bio *io_bio;
308 ext4_io_end_t *io_end;
bd2d0210
TT
309 sector_t io_next_block;
310};
311
ac27a0ec
DK
312/*
313 * Special inodes numbers
314 */
617ba13b
MC
315#define EXT4_BAD_INO 1 /* Bad blocks inode */
316#define EXT4_ROOT_INO 2 /* Root inode */
ae812306
AK
317#define EXT4_USR_QUOTA_INO 3 /* User quota inode */
318#define EXT4_GRP_QUOTA_INO 4 /* Group quota inode */
617ba13b
MC
319#define EXT4_BOOT_LOADER_INO 5 /* Boot loader inode */
320#define EXT4_UNDEL_DIR_INO 6 /* Undelete directory inode */
321#define EXT4_RESIZE_INO 7 /* Reserved group descriptors inode */
322#define EXT4_JOURNAL_INO 8 /* Journal inode */
ac27a0ec 323
617ba13b
MC
324/* First non-reserved inode for old ext4 filesystems */
325#define EXT4_GOOD_OLD_FIRST_INO 11
ac27a0ec
DK
326
327/*
328 * Maximal count of links to a file
329 */
f8628a14 330#define EXT4_LINK_MAX 65000
ac27a0ec
DK
331
332/*
333 * Macro-instructions used to manage several block sizes
334 */
617ba13b 335#define EXT4_MIN_BLOCK_SIZE 1024
afc7cbca
TS
336#define EXT4_MAX_BLOCK_SIZE 65536
337#define EXT4_MIN_BLOCK_LOG_SIZE 10
fb1813f4 338#define EXT4_MAX_BLOCK_LOG_SIZE 16
9e47a4c9 339#define EXT4_MAX_CLUSTER_LOG_SIZE 30
ac27a0ec 340#ifdef __KERNEL__
617ba13b 341# define EXT4_BLOCK_SIZE(s) ((s)->s_blocksize)
ac27a0ec 342#else
617ba13b 343# define EXT4_BLOCK_SIZE(s) (EXT4_MIN_BLOCK_SIZE << (s)->s_log_block_size)
ac27a0ec 344#endif
af5bc92d 345#define EXT4_ADDR_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / sizeof(__u32))
281b5995
TT
346#define EXT4_CLUSTER_SIZE(s) (EXT4_BLOCK_SIZE(s) << \
347 EXT4_SB(s)->s_cluster_bits)
ac27a0ec 348#ifdef __KERNEL__
617ba13b 349# define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits)
281b5995 350# define EXT4_CLUSTER_BITS(s) (EXT4_SB(s)->s_cluster_bits)
ac27a0ec 351#else
617ba13b 352# define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
ac27a0ec
DK
353#endif
354#ifdef __KERNEL__
617ba13b
MC
355#define EXT4_ADDR_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_addr_per_block_bits)
356#define EXT4_INODE_SIZE(s) (EXT4_SB(s)->s_inode_size)
357#define EXT4_FIRST_INO(s) (EXT4_SB(s)->s_first_ino)
ac27a0ec 358#else
617ba13b
MC
359#define EXT4_INODE_SIZE(s) (((s)->s_rev_level == EXT4_GOOD_OLD_REV) ? \
360 EXT4_GOOD_OLD_INODE_SIZE : \
ac27a0ec 361 (s)->s_inode_size)
617ba13b
MC
362#define EXT4_FIRST_INO(s) (((s)->s_rev_level == EXT4_GOOD_OLD_REV) ? \
363 EXT4_GOOD_OLD_FIRST_INO : \
ac27a0ec
DK
364 (s)->s_first_ino)
365#endif
a2df2a63 366#define EXT4_BLOCK_ALIGN(size, blkbits) ALIGN((size), (1 << (blkbits)))
518eaa63
FF
367#define EXT4_MAX_BLOCKS(size, offset, blkbits) \
368 ((EXT4_BLOCK_ALIGN(size + offset, blkbits) >> blkbits) - (offset >> \
369 blkbits))
ac27a0ec 370
d5b8f310
TT
371/* Translate a block number to a cluster number */
372#define EXT4_B2C(sbi, blk) ((blk) >> (sbi)->s_cluster_bits)
373/* Translate a cluster number to a block number */
374#define EXT4_C2B(sbi, cluster) ((cluster) << (sbi)->s_cluster_bits)
375/* Translate # of blks to # of clusters */
376#define EXT4_NUM_B2C(sbi, blks) (((blks) + (sbi)->s_cluster_ratio - 1) >> \
377 (sbi)->s_cluster_bits)
f5a44db5
TT
378/* Mask out the low bits to get the starting block of the cluster */
379#define EXT4_PBLK_CMASK(s, pblk) ((pblk) & \
380 ~((ext4_fsblk_t) (s)->s_cluster_ratio - 1))
381#define EXT4_LBLK_CMASK(s, lblk) ((lblk) & \
382 ~((ext4_lblk_t) (s)->s_cluster_ratio - 1))
8fcc3a58
EW
383/* Fill in the low bits to get the last block of the cluster */
384#define EXT4_LBLK_CFILL(sbi, lblk) ((lblk) | \
385 ((ext4_lblk_t) (sbi)->s_cluster_ratio - 1))
f5a44db5
TT
386/* Get the cluster offset */
387#define EXT4_PBLK_COFF(s, pblk) ((pblk) & \
388 ((ext4_fsblk_t) (s)->s_cluster_ratio - 1))
389#define EXT4_LBLK_COFF(s, lblk) ((lblk) & \
390 ((ext4_lblk_t) (s)->s_cluster_ratio - 1))
d5b8f310 391
ac27a0ec
DK
392/*
393 * Structure of a blocks group descriptor
394 */
617ba13b 395struct ext4_group_desc
ac27a0ec 396{
3a14589c 397 __le32 bg_block_bitmap_lo; /* Blocks bitmap block */
5272f837
AK
398 __le32 bg_inode_bitmap_lo; /* Inodes bitmap block */
399 __le32 bg_inode_table_lo; /* Inodes table block */
560671a0
AK
400 __le16 bg_free_blocks_count_lo;/* Free blocks count */
401 __le16 bg_free_inodes_count_lo;/* Free inodes count */
402 __le16 bg_used_dirs_count_lo; /* Directories count */
717d50e4 403 __le16 bg_flags; /* EXT4_BG_flags (INODE_UNINIT, etc) */
e6153918
DW
404 __le32 bg_exclude_bitmap_lo; /* Exclude bitmap for snapshots */
405 __le16 bg_block_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bbitmap) LE */
406 __le16 bg_inode_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+ibitmap) LE */
560671a0 407 __le16 bg_itable_unused_lo; /* Unused inodes count */
717d50e4 408 __le16 bg_checksum; /* crc16(sb_uuid+group+desc) */
8fadc143
AR
409 __le32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */
410 __le32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */
411 __le32 bg_inode_table_hi; /* Inodes table block MSB */
91b51a01
CL
412 __le16 bg_free_blocks_count_hi;/* Free blocks count MSB */
413 __le16 bg_free_inodes_count_hi;/* Free inodes count MSB */
414 __le16 bg_used_dirs_count_hi; /* Directories count MSB */
560671a0 415 __le16 bg_itable_unused_hi; /* Unused inodes count MSB */
e6153918
DW
416 __le32 bg_exclude_bitmap_hi; /* Exclude bitmap block MSB */
417 __le16 bg_block_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+bbitmap) BE */
418 __le16 bg_inode_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+ibitmap) BE */
419 __u32 bg_reserved;
ac27a0ec
DK
420};
421
41a246d1
DW
422#define EXT4_BG_INODE_BITMAP_CSUM_HI_END \
423 (offsetof(struct ext4_group_desc, bg_inode_bitmap_csum_hi) + \
424 sizeof(__le16))
425#define EXT4_BG_BLOCK_BITMAP_CSUM_HI_END \
426 (offsetof(struct ext4_group_desc, bg_block_bitmap_csum_hi) + \
427 sizeof(__le16))
428
772cb7c8
JS
429/*
430 * Structure of a flex block group info
431 */
432
433struct flex_groups {
90ba983f
TT
434 atomic64_t free_clusters;
435 atomic_t free_inodes;
436 atomic_t used_dirs;
772cb7c8
JS
437};
438
717d50e4
AD
439#define EXT4_BG_INODE_UNINIT 0x0001 /* Inode table/bitmap not in use */
440#define EXT4_BG_BLOCK_UNINIT 0x0002 /* Block bitmap not in use */
441#define EXT4_BG_INODE_ZEROED 0x0004 /* On-disk itable initialized to zero */
442
ac27a0ec
DK
443/*
444 * Macro-instructions used to manage group descriptors
445 */
0d1ee42f 446#define EXT4_MIN_DESC_SIZE 32
8fadc143 447#define EXT4_MIN_DESC_SIZE_64BIT 64
0d1ee42f
AR
448#define EXT4_MAX_DESC_SIZE EXT4_MIN_BLOCK_SIZE
449#define EXT4_DESC_SIZE(s) (EXT4_SB(s)->s_desc_size)
ac27a0ec 450#ifdef __KERNEL__
617ba13b 451# define EXT4_BLOCKS_PER_GROUP(s) (EXT4_SB(s)->s_blocks_per_group)
281b5995 452# define EXT4_CLUSTERS_PER_GROUP(s) (EXT4_SB(s)->s_clusters_per_group)
617ba13b
MC
453# define EXT4_DESC_PER_BLOCK(s) (EXT4_SB(s)->s_desc_per_block)
454# define EXT4_INODES_PER_GROUP(s) (EXT4_SB(s)->s_inodes_per_group)
455# define EXT4_DESC_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_desc_per_block_bits)
ac27a0ec 456#else
617ba13b 457# define EXT4_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group)
0d1ee42f 458# define EXT4_DESC_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / EXT4_DESC_SIZE(s))
617ba13b 459# define EXT4_INODES_PER_GROUP(s) ((s)->s_inodes_per_group)
ac27a0ec
DK
460#endif
461
462/*
463 * Constants relative to the data blocks
464 */
617ba13b
MC
465#define EXT4_NDIR_BLOCKS 12
466#define EXT4_IND_BLOCK EXT4_NDIR_BLOCKS
467#define EXT4_DIND_BLOCK (EXT4_IND_BLOCK + 1)
468#define EXT4_TIND_BLOCK (EXT4_DIND_BLOCK + 1)
469#define EXT4_N_BLOCKS (EXT4_TIND_BLOCK + 1)
ac27a0ec
DK
470
471/*
472 * Inode flags
473 */
617ba13b
MC
474#define EXT4_SECRM_FL 0x00000001 /* Secure deletion */
475#define EXT4_UNRM_FL 0x00000002 /* Undelete */
476#define EXT4_COMPR_FL 0x00000004 /* Compress file */
477#define EXT4_SYNC_FL 0x00000008 /* Synchronous updates */
478#define EXT4_IMMUTABLE_FL 0x00000010 /* Immutable file */
479#define EXT4_APPEND_FL 0x00000020 /* writes to file may only append */
480#define EXT4_NODUMP_FL 0x00000040 /* do not dump file */
481#define EXT4_NOATIME_FL 0x00000080 /* do not update atime */
ac27a0ec 482/* Reserved for compression usage... */
617ba13b
MC
483#define EXT4_DIRTY_FL 0x00000100
484#define EXT4_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */
485#define EXT4_NOCOMPR_FL 0x00000400 /* Don't compress */
3edc18d8
TT
486 /* nb: was previously EXT2_ECOMPR_FL */
487#define EXT4_ENCRYPT_FL 0x00000800 /* encrypted file */
ac27a0ec 488/* End compression flags --- maybe not all used */
617ba13b
MC
489#define EXT4_INDEX_FL 0x00001000 /* hash-indexed directory */
490#define EXT4_IMAGIC_FL 0x00002000 /* AFS directory */
491#define EXT4_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */
492#define EXT4_NOTAIL_FL 0x00008000 /* file tail should not be merged */
493#define EXT4_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */
494#define EXT4_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
8180a562 495#define EXT4_HUGE_FILE_FL 0x00040000 /* Set to each huge file */
a86c6181 496#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */
c93d8f88 497#define EXT4_VERITY_FL 0x00100000 /* Verity protected inode */
f710b4b9 498#define EXT4_EA_INODE_FL 0x00200000 /* Inode used for large EA */
4337ecd1 499/* 0x00400000 was formerly EXT4_EOFBLOCKS_FL */
b383a73f
IW
500
501#define EXT4_DAX_FL 0x02000000 /* Inode is DAX */
502
67cf5b09 503#define EXT4_INLINE_DATA_FL 0x10000000 /* Inode has inline data. */
8b4953e1 504#define EXT4_PROJINHERIT_FL 0x20000000 /* Create with parents projid */
de8ff14c 505#define EXT4_CASEFOLD_FL 0x40000000 /* Casefolded directory */
8180a562 506#define EXT4_RESERVED_FL 0x80000000 /* reserved for ext4 lib */
ac27a0ec 507
2a12e147
EB
508/* User modifiable flags */
509#define EXT4_FL_USER_MODIFIABLE (EXT4_SECRM_FL | \
510 EXT4_UNRM_FL | \
511 EXT4_COMPR_FL | \
512 EXT4_SYNC_FL | \
513 EXT4_IMMUTABLE_FL | \
514 EXT4_APPEND_FL | \
515 EXT4_NODUMP_FL | \
516 EXT4_NOATIME_FL | \
517 EXT4_JOURNAL_DATA_FL | \
518 EXT4_NOTAIL_FL | \
519 EXT4_DIRSYNC_FL | \
520 EXT4_TOPDIR_FL | \
521 EXT4_EXTENTS_FL | \
522 0x00400000 /* EXT4_EOFBLOCKS_FL */ | \
523 EXT4_DAX_FL | \
524 EXT4_PROJINHERIT_FL | \
525 EXT4_CASEFOLD_FL)
526
527/* User visible flags */
528#define EXT4_FL_USER_VISIBLE (EXT4_FL_USER_MODIFIABLE | \
529 EXT4_DIRTY_FL | \
530 EXT4_COMPRBLK_FL | \
531 EXT4_NOCOMPR_FL | \
532 EXT4_ENCRYPT_FL | \
533 EXT4_INDEX_FL | \
534 EXT4_VERITY_FL | \
535 EXT4_INLINE_DATA_FL)
ac27a0ec 536
8fa43a81
DG
537/* Flags that should be inherited by new inodes from their parent. */
538#define EXT4_FL_INHERITED (EXT4_SECRM_FL | EXT4_UNRM_FL | EXT4_COMPR_FL |\
1cd9f097 539 EXT4_SYNC_FL | EXT4_NODUMP_FL | EXT4_NOATIME_FL |\
8fa43a81 540 EXT4_NOCOMPR_FL | EXT4_JOURNAL_DATA_FL |\
040cb378 541 EXT4_NOTAIL_FL | EXT4_DIRSYNC_FL |\
b383a73f
IW
542 EXT4_PROJINHERIT_FL | EXT4_CASEFOLD_FL |\
543 EXT4_DAX_FL)
8fa43a81 544
2dc6b0d4 545/* Flags that are appropriate for regular files (all but dir-specific ones). */
7ddf79a1
WS
546#define EXT4_REG_FLMASK (~(EXT4_DIRSYNC_FL | EXT4_TOPDIR_FL | EXT4_CASEFOLD_FL |\
547 EXT4_PROJINHERIT_FL))
2dc6b0d4
DG
548
549/* Flags that are appropriate for non-directories/regular files. */
550#define EXT4_OTHER_FLMASK (EXT4_NODUMP_FL | EXT4_NOATIME_FL)
551
abdc644e 552/* The only flags that should be swapped */
553#define EXT4_FL_SHOULD_SWAP (EXT4_HUGE_FILE_FL | EXT4_EXTENTS_FL)
554
b383a73f
IW
555/* Flags which are mutually exclusive to DAX */
556#define EXT4_DAX_MUT_EXCL (EXT4_VERITY_FL | EXT4_ENCRYPT_FL |\
aa2f7792 557 EXT4_JOURNAL_DATA_FL | EXT4_INLINE_DATA_FL)
b383a73f 558
2dc6b0d4
DG
559/* Mask out flags that are inappropriate for the given type of inode. */
560static inline __u32 ext4_mask_flags(umode_t mode, __u32 flags)
561{
562 if (S_ISDIR(mode))
563 return flags;
564 else if (S_ISREG(mode))
565 return flags & EXT4_REG_FLMASK;
566 else
567 return flags & EXT4_OTHER_FLMASK;
568}
569
12e9b892
DM
570/*
571 * Inode flags used for atomic set/get
572 */
573enum {
574 EXT4_INODE_SECRM = 0, /* Secure deletion */
575 EXT4_INODE_UNRM = 1, /* Undelete */
576 EXT4_INODE_COMPR = 2, /* Compress file */
577 EXT4_INODE_SYNC = 3, /* Synchronous updates */
578 EXT4_INODE_IMMUTABLE = 4, /* Immutable file */
579 EXT4_INODE_APPEND = 5, /* writes to file may only append */
580 EXT4_INODE_NODUMP = 6, /* do not dump file */
581 EXT4_INODE_NOATIME = 7, /* do not update atime */
582/* Reserved for compression usage... */
583 EXT4_INODE_DIRTY = 8,
584 EXT4_INODE_COMPRBLK = 9, /* One or more compressed clusters */
585 EXT4_INODE_NOCOMPR = 10, /* Don't compress */
f542fbe8 586 EXT4_INODE_ENCRYPT = 11, /* Encrypted file */
12e9b892
DM
587/* End compression flags --- maybe not all used */
588 EXT4_INODE_INDEX = 12, /* hash-indexed directory */
589 EXT4_INODE_IMAGIC = 13, /* AFS directory */
590 EXT4_INODE_JOURNAL_DATA = 14, /* file data should be journaled */
591 EXT4_INODE_NOTAIL = 15, /* file tail should not be merged */
592 EXT4_INODE_DIRSYNC = 16, /* dirsync behaviour (directories only) */
593 EXT4_INODE_TOPDIR = 17, /* Top of directory hierarchies*/
594 EXT4_INODE_HUGE_FILE = 18, /* Set to each huge file */
595 EXT4_INODE_EXTENTS = 19, /* Inode uses extents */
c93d8f88 596 EXT4_INODE_VERITY = 20, /* Verity protected inode */
12e9b892 597 EXT4_INODE_EA_INODE = 21, /* Inode used for large EA */
4337ecd1 598/* 22 was formerly EXT4_INODE_EOFBLOCKS */
b383a73f 599 EXT4_INODE_DAX = 25, /* Inode is DAX */
67cf5b09 600 EXT4_INODE_INLINE_DATA = 28, /* Data in inode. */
8b4953e1 601 EXT4_INODE_PROJINHERIT = 29, /* Create with parents projid */
de8ff14c 602 EXT4_INODE_CASEFOLD = 30, /* Casefolded directory */
12e9b892
DM
603 EXT4_INODE_RESERVED = 31, /* reserved for ext4 lib */
604};
605
12e9b892 606/*
9a4c8019
CM
607 * Since it's pretty easy to mix up bit numbers and hex values, we use a
608 * build-time check to make sure that EXT4_XXX_FL is consistent with respect to
609 * EXT4_INODE_XXX. If all is well, the macros will be dropped, so, it won't cost
610 * any extra space in the compiled kernel image, otherwise, the build will fail.
611 * It's important that these values are the same, since we are using
612 * EXT4_INODE_XXX to test for flag values, but EXT4_XXX_FL must be consistent
613 * with the values of FS_XXX_FL defined in include/linux/fs.h and the on-disk
614 * values found in ext2, ext3 and ext4 filesystems, and of course the values
615 * defined in e2fsprogs.
12e9b892
DM
616 *
617 * It's not paranoia if the Murphy's Law really *is* out to get you. :-)
618 */
3bf678a0 619#define TEST_FLAG_VALUE(FLAG) (EXT4_##FLAG##_FL == (1U << EXT4_INODE_##FLAG))
9a4c8019
CM
620#define CHECK_FLAG_VALUE(FLAG) BUILD_BUG_ON(!TEST_FLAG_VALUE(FLAG))
621
12e9b892
DM
622static inline void ext4_check_flag_values(void)
623{
624 CHECK_FLAG_VALUE(SECRM);
625 CHECK_FLAG_VALUE(UNRM);
626 CHECK_FLAG_VALUE(COMPR);
627 CHECK_FLAG_VALUE(SYNC);
628 CHECK_FLAG_VALUE(IMMUTABLE);
629 CHECK_FLAG_VALUE(APPEND);
630 CHECK_FLAG_VALUE(NODUMP);
631 CHECK_FLAG_VALUE(NOATIME);
632 CHECK_FLAG_VALUE(DIRTY);
633 CHECK_FLAG_VALUE(COMPRBLK);
634 CHECK_FLAG_VALUE(NOCOMPR);
3edc18d8 635 CHECK_FLAG_VALUE(ENCRYPT);
12e9b892
DM
636 CHECK_FLAG_VALUE(INDEX);
637 CHECK_FLAG_VALUE(IMAGIC);
638 CHECK_FLAG_VALUE(JOURNAL_DATA);
639 CHECK_FLAG_VALUE(NOTAIL);
640 CHECK_FLAG_VALUE(DIRSYNC);
641 CHECK_FLAG_VALUE(TOPDIR);
642 CHECK_FLAG_VALUE(HUGE_FILE);
643 CHECK_FLAG_VALUE(EXTENTS);
c93d8f88 644 CHECK_FLAG_VALUE(VERITY);
12e9b892 645 CHECK_FLAG_VALUE(EA_INODE);
67cf5b09 646 CHECK_FLAG_VALUE(INLINE_DATA);
8b4953e1 647 CHECK_FLAG_VALUE(PROJINHERIT);
de8ff14c 648 CHECK_FLAG_VALUE(CASEFOLD);
12e9b892
DM
649 CHECK_FLAG_VALUE(RESERVED);
650}
651
4d92dc0f
BH
652#if defined(__KERNEL__) && defined(CONFIG_COMPAT)
653struct compat_ext4_new_group_input {
654 u32 group;
655 compat_u64 block_bitmap;
656 compat_u64 inode_bitmap;
657 compat_u64 inode_table;
658 u32 blocks_count;
659 u16 reserved_blocks;
660 u16 unused;
661};
662#endif
663
617ba13b
MC
664/* The struct ext4_new_group_input in kernel space, with free_blocks_count */
665struct ext4_new_group_data {
ac27a0ec 666 __u32 group;
bd81d8ee
LV
667 __u64 block_bitmap;
668 __u64 inode_bitmap;
669 __u64 inode_table;
ac27a0ec
DK
670 __u32 blocks_count;
671 __u16 reserved_blocks;
d77147ff 672 __u16 mdata_blocks;
673 __u32 free_clusters_count;
ac27a0ec
DK
674};
675
33afdcc5
YY
676/* Indexes used to index group tables in ext4_new_group_data */
677enum {
678 BLOCK_BITMAP = 0, /* block bitmap */
679 INODE_BITMAP, /* inode bitmap */
680 INODE_TABLE, /* inode tables */
681 GROUP_TABLE_COUNT,
682};
683
a2df2a63 684/*
79e83036 685 * Flags used by ext4_map_blocks()
a2df2a63 686 */
556615dc 687 /* Allocate any needed blocks and/or convert an unwritten
c2177057 688 extent to be an initialized ext4 */
2ac3b6e0 689#define EXT4_GET_BLOCKS_CREATE 0x0001
556615dc
LC
690 /* Request the creation of an unwritten extent */
691#define EXT4_GET_BLOCKS_UNWRIT_EXT 0x0002
692#define EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT (EXT4_GET_BLOCKS_UNWRIT_EXT|\
c2177057 693 EXT4_GET_BLOCKS_CREATE)
27dd4385
LC
694 /* Caller is from the delayed allocation writeout path
695 * finally doing the actual allocation of delayed blocks */
03f5d8bc 696#define EXT4_GET_BLOCKS_DELALLOC_RESERVE 0x0004
0031462b 697 /* caller is from the direct IO path, request to creation of an
556615dc 698 unwritten extents if not allocated, split the unwritten
0031462b 699 extent if blocks has been preallocated already*/
c7064ef1 700#define EXT4_GET_BLOCKS_PRE_IO 0x0008
1296cc85 701#define EXT4_GET_BLOCKS_CONVERT 0x0010
c7064ef1 702#define EXT4_GET_BLOCKS_IO_CREATE_EXT (EXT4_GET_BLOCKS_PRE_IO|\
556615dc 703 EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT)
c7064ef1
JZ
704 /* Convert extent to initialized after IO complete */
705#define EXT4_GET_BLOCKS_IO_CONVERT_EXT (EXT4_GET_BLOCKS_CONVERT|\
556615dc 706 EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT)
27dd4385
LC
707 /* Eventual metadata allocation (due to growing extent tree)
708 * should not fail, so try to use reserved blocks for that.*/
709#define EXT4_GET_BLOCKS_METADATA_NOFAIL 0x0020
556b27ab
VH
710 /* Don't normalize allocation size (used for fallocate) */
711#define EXT4_GET_BLOCKS_NO_NORMALIZE 0x0040
b8a86845 712 /* Convert written extents to unwritten */
2dcba478 713#define EXT4_GET_BLOCKS_CONVERT_UNWRITTEN 0x0100
c86d8db3
JK
714 /* Write zeros to newly created written extents */
715#define EXT4_GET_BLOCKS_ZERO 0x0200
716#define EXT4_GET_BLOCKS_CREATE_ZERO (EXT4_GET_BLOCKS_CREATE |\
717 EXT4_GET_BLOCKS_ZERO)
ee0876bc
JK
718 /* Caller will submit data before dropping transaction handle. This
719 * allows jbd2 to avoid submitting data before commit. */
720#define EXT4_GET_BLOCKS_IO_SUBMIT 0x0400
9558cf14
ZY
721 /* Caller is in the atomic contex, find extent if it has been cached */
722#define EXT4_GET_BLOCKS_CACHED_NOWAIT 0x0800
ac27a0ec 723
107a7bd3 724/*
7869a4a6 725 * The bit position of these flags must not overlap with any of the
ed8a1a76 726 * EXT4_GET_BLOCKS_*. They are used by ext4_find_extent(),
107a7bd3 727 * read_extent_tree_block(), ext4_split_extent_at(),
7869a4a6
TT
728 * ext4_ext_insert_extent(), and ext4_ext_create_new_leaf().
729 * EXT4_EX_NOCACHE is used to indicate that the we shouldn't be
730 * caching the extents when reading from the extent tree while a
731 * truncate or punch hole operation is in progress.
107a7bd3 732 */
d26e2c4d
TT
733#define EXT4_EX_NOCACHE 0x40000000
734#define EXT4_EX_FORCE_CACHE 0x20000000
73c384c0 735#define EXT4_EX_NOFAIL 0x10000000
107a7bd3 736
e6362609
TT
737/*
738 * Flags used by ext4_free_blocks
739 */
e7093f0d
PK
740#define EXT4_FREE_BLOCKS_METADATA 0x0001
741#define EXT4_FREE_BLOCKS_FORGET 0x0002
742#define EXT4_FREE_BLOCKS_VALIDATED 0x0004
743#define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE 0x0008
84130193
TT
744#define EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER 0x0010
745#define EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER 0x0020
9fe67149 746#define EXT4_FREE_BLOCKS_RERESERVE_CLUSTER 0x0040
e6362609 747
899ad0ce 748#if defined(__KERNEL__) && defined(CONFIG_COMPAT)
ac27a0ec
DK
749/*
750 * ioctl commands in 32 bit emulation
751 */
617ba13b
MC
752#define EXT4_IOC32_GETVERSION _IOR('f', 3, int)
753#define EXT4_IOC32_SETVERSION _IOW('f', 4, int)
754#define EXT4_IOC32_GETRSVSZ _IOR('f', 5, int)
755#define EXT4_IOC32_SETRSVSZ _IOW('f', 6, int)
756#define EXT4_IOC32_GROUP_EXTEND _IOW('f', 7, unsigned int)
4d92dc0f 757#define EXT4_IOC32_GROUP_ADD _IOW('f', 8, struct compat_ext4_new_group_input)
617ba13b
MC
758#define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION
759#define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION
899ad0ce 760#endif
ac27a0ec 761
b595076a 762/* Max physical block we can address w/o extents */
fb0a387d
ES
763#define EXT4_MAX_BLOCK_FILE_PHYS 0xFFFFFFFF
764
bcd8e91f 765/* Max logical block we can support */
9f44eda1 766#define EXT4_MAX_LOGICAL_BLOCK 0xFFFFFFFE
bcd8e91f 767
ac27a0ec
DK
768/*
769 * Structure of an inode on the disk
770 */
617ba13b 771struct ext4_inode {
ac27a0ec
DK
772 __le16 i_mode; /* File mode */
773 __le16 i_uid; /* Low 16 bits of Owner Uid */
a48380f7 774 __le32 i_size_lo; /* Size in bytes */
ac27a0ec 775 __le32 i_atime; /* Access time */
ef7f3835 776 __le32 i_ctime; /* Inode Change time */
ac27a0ec
DK
777 __le32 i_mtime; /* Modification time */
778 __le32 i_dtime; /* Deletion Time */
779 __le16 i_gid; /* Low 16 bits of Group Id */
780 __le16 i_links_count; /* Links count */
0fc1b451 781 __le32 i_blocks_lo; /* Blocks count */
ac27a0ec
DK
782 __le32 i_flags; /* File flags */
783 union {
784 struct {
25ec56b5 785 __le32 l_i_version;
ac27a0ec
DK
786 } linux1;
787 struct {
788 __u32 h_i_translator;
789 } hurd1;
790 struct {
791 __u32 m_i_reserved1;
792 } masix1;
793 } osd1; /* OS dependent 1 */
617ba13b 794 __le32 i_block[EXT4_N_BLOCKS];/* Pointers to blocks */
ac27a0ec 795 __le32 i_generation; /* File version (for NFS) */
7973c0c1 796 __le32 i_file_acl_lo; /* File ACL */
a48380f7 797 __le32 i_size_high;
f077d0d7 798 __le32 i_obso_faddr; /* Obsoleted fragment address */
ac27a0ec
DK
799 union {
800 struct {
0fc1b451 801 __le16 l_i_blocks_high; /* were l_i_reserved1 */
a1ddeb7e 802 __le16 l_i_file_acl_high;
8c55e204 803 __le16 l_i_uid_high; /* these 2 fields */
ac27a0ec 804 __le16 l_i_gid_high; /* were reserved2[0] */
e6153918
DW
805 __le16 l_i_checksum_lo;/* crc32c(uuid+inum+inode) LE */
806 __le16 l_i_reserved;
ac27a0ec
DK
807 } linux2;
808 struct {
f077d0d7 809 __le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */
ac27a0ec
DK
810 __u16 h_i_mode_high;
811 __u16 h_i_uid_high;
812 __u16 h_i_gid_high;
813 __u32 h_i_author;
814 } hurd2;
815 struct {
f077d0d7 816 __le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */
a1ddeb7e 817 __le16 m_i_file_acl_high;
ac27a0ec
DK
818 __u32 m_i_reserved2[2];
819 } masix2;
820 } osd2; /* OS dependent 2 */
821 __le16 i_extra_isize;
e6153918 822 __le16 i_checksum_hi; /* crc32c(uuid+inum+inode) BE */
ef7f3835
KS
823 __le32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */
824 __le32 i_mtime_extra; /* extra Modification time(nsec << 2 | epoch) */
825 __le32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */
826 __le32 i_crtime; /* File Creation time */
827 __le32 i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */
25ec56b5 828 __le32 i_version_hi; /* high 32 bits for 64-bit version */
8b4953e1 829 __le32 i_projid; /* Project ID */
ac27a0ec
DK
830};
831
ef7f3835
KS
832#define EXT4_EPOCH_BITS 2
833#define EXT4_EPOCH_MASK ((1 << EXT4_EPOCH_BITS) - 1)
834#define EXT4_NSEC_MASK (~0UL << EXT4_EPOCH_BITS)
835
836/*
837 * Extended fields will fit into an inode if the filesystem was formatted
838 * with large inodes (-I 256 or larger) and there are not currently any EAs
839 * consuming all of the available space. For new inodes we always reserve
840 * enough space for the kernel's known extended fields, but for inodes
841 * created with an old kernel this might not have been the case. None of
842 * the extended inode fields is critical for correct filesystem operation.
843 * This macro checks if a certain field fits in the inode. Note that
844 * inode-size = GOOD_OLD_INODE_SIZE + i_extra_isize
845 */
846#define EXT4_FITS_IN_INODE(ext4_inode, einode, field) \
847 ((offsetof(typeof(*ext4_inode), field) + \
848 sizeof((ext4_inode)->field)) \
849 <= (EXT4_GOOD_OLD_INODE_SIZE + \
850 (einode)->i_extra_isize)) \
851
a4dad1ae
DT
852/*
853 * We use an encoding that preserves the times for extra epoch "00":
854 *
855 * extra msb of adjust for signed
856 * epoch 32-bit 32-bit tv_sec to
857 * bits time decoded 64-bit tv_sec 64-bit tv_sec valid time range
858 * 0 0 1 -0x80000000..-0x00000001 0x000000000 1901-12-13..1969-12-31
859 * 0 0 0 0x000000000..0x07fffffff 0x000000000 1970-01-01..2038-01-19
860 * 0 1 1 0x080000000..0x0ffffffff 0x100000000 2038-01-19..2106-02-07
861 * 0 1 0 0x100000000..0x17fffffff 0x100000000 2106-02-07..2174-02-25
862 * 1 0 1 0x180000000..0x1ffffffff 0x200000000 2174-02-25..2242-03-16
863 * 1 0 0 0x200000000..0x27fffffff 0x200000000 2242-03-16..2310-04-04
864 * 1 1 1 0x280000000..0x2ffffffff 0x300000000 2310-04-04..2378-04-22
865 * 1 1 0 0x300000000..0x37fffffff 0x300000000 2378-04-22..2446-05-10
866 *
867 * Note that previous versions of the kernel on 64-bit systems would
868 * incorrectly use extra epoch bits 1,1 for dates between 1901 and
869 * 1970. e2fsck will correct this, assuming that it is run on the
870 * affected filesystem before 2242.
871 */
872
1bc33893 873static inline __le32 ext4_encode_extra_time(struct timespec64 ts)
ef7f3835 874{
1bc33893
JL
875 u32 extra = ((ts.tv_sec - (s32)ts.tv_sec) >> 32) & EXT4_EPOCH_MASK;
876 return cpu_to_le32(extra | (ts.tv_nsec << EXT4_EPOCH_BITS));
ef7f3835
KS
877}
878
1bc33893
JL
879static inline struct timespec64 ext4_decode_extra_time(__le32 base,
880 __le32 extra)
ef7f3835 881{
1bc33893
JL
882 struct timespec64 ts = { .tv_sec = (signed)le32_to_cpu(base) };
883
cd2d9922 884 if (unlikely(extra & cpu_to_le32(EXT4_EPOCH_MASK)))
1bc33893
JL
885 ts.tv_sec += (u64)(le32_to_cpu(extra) & EXT4_EPOCH_MASK) << 32;
886 ts.tv_nsec = (le32_to_cpu(extra) & EXT4_NSEC_MASK) >> EXT4_EPOCH_BITS;
887 return ts;
ef7f3835
KS
888}
889
1bc33893 890#define EXT4_INODE_SET_XTIME_VAL(xtime, inode, raw_inode, ts) \
95582b00 891do { \
1bc33893
JL
892 if (EXT4_FITS_IN_INODE(raw_inode, EXT4_I(inode), xtime ## _extra)) { \
893 (raw_inode)->xtime = cpu_to_le32((ts).tv_sec); \
894 (raw_inode)->xtime ## _extra = ext4_encode_extra_time(ts); \
895 } else \
896 (raw_inode)->xtime = cpu_to_le32(clamp_t(int32_t, (ts).tv_sec, S32_MIN, S32_MAX)); \
ef7f3835
KS
897} while (0)
898
b898ab23
JL
899#define EXT4_INODE_SET_ATIME(inode, raw_inode) \
900 EXT4_INODE_SET_XTIME_VAL(i_atime, inode, raw_inode, inode_get_atime(inode))
1bc33893 901
b898ab23
JL
902#define EXT4_INODE_SET_MTIME(inode, raw_inode) \
903 EXT4_INODE_SET_XTIME_VAL(i_mtime, inode, raw_inode, inode_get_mtime(inode))
904
905#define EXT4_INODE_SET_CTIME(inode, raw_inode) \
1bc33893
JL
906 EXT4_INODE_SET_XTIME_VAL(i_ctime, inode, raw_inode, inode_get_ctime(inode))
907
908#define EXT4_EINODE_SET_XTIME(xtime, einode, raw_inode) \
909 if (EXT4_FITS_IN_INODE(raw_inode, einode, xtime)) \
910 EXT4_INODE_SET_XTIME_VAL(xtime, &((einode)->vfs_inode), \
911 raw_inode, (einode)->xtime)
912
913#define EXT4_INODE_GET_XTIME_VAL(xtime, inode, raw_inode) \
914 (EXT4_FITS_IN_INODE(raw_inode, EXT4_I(inode), xtime ## _extra) ? \
915 ext4_decode_extra_time((raw_inode)->xtime, \
916 (raw_inode)->xtime ## _extra) : \
917 (struct timespec64) { \
918 .tv_sec = (signed)le32_to_cpu((raw_inode)->xtime) \
919 })
ef7f3835 920
b898ab23
JL
921#define EXT4_INODE_GET_ATIME(inode, raw_inode) \
922do { \
923 inode_set_atime_to_ts(inode, \
924 EXT4_INODE_GET_XTIME_VAL(i_atime, inode, raw_inode)); \
925} while (0)
926
927#define EXT4_INODE_GET_MTIME(inode, raw_inode) \
95582b00 928do { \
b898ab23
JL
929 inode_set_mtime_to_ts(inode, \
930 EXT4_INODE_GET_XTIME_VAL(i_mtime, inode, raw_inode)); \
ef7f3835
KS
931} while (0)
932
1bc33893
JL
933#define EXT4_INODE_GET_CTIME(inode, raw_inode) \
934do { \
935 inode_set_ctime_to_ts(inode, \
936 EXT4_INODE_GET_XTIME_VAL(i_ctime, inode, raw_inode)); \
937} while (0)
95582b00 938
1bc33893
JL
939#define EXT4_EINODE_GET_XTIME(xtime, einode, raw_inode) \
940do { \
941 if (EXT4_FITS_IN_INODE(raw_inode, einode, xtime)) \
942 (einode)->xtime = \
943 EXT4_INODE_GET_XTIME_VAL(xtime, &(einode->vfs_inode), \
944 raw_inode); \
945 else \
946 (einode)->xtime = (struct timespec64){0, 0}; \
ef7f3835
KS
947} while (0)
948
25ec56b5
JNC
949#define i_disk_version osd1.linux1.l_i_version
950
ac27a0ec
DK
951#if defined(__KERNEL__) || defined(__linux__)
952#define i_reserved1 osd1.linux1.l_i_reserved1
a1ddeb7e 953#define i_file_acl_high osd2.linux2.l_i_file_acl_high
0fc1b451 954#define i_blocks_high osd2.linux2.l_i_blocks_high
ac27a0ec
DK
955#define i_uid_low i_uid
956#define i_gid_low i_gid
957#define i_uid_high osd2.linux2.l_i_uid_high
958#define i_gid_high osd2.linux2.l_i_gid_high
e6153918 959#define i_checksum_lo osd2.linux2.l_i_checksum_lo
ac27a0ec
DK
960
961#elif defined(__GNU__)
962
963#define i_translator osd1.hurd1.h_i_translator
ac27a0ec
DK
964#define i_uid_high osd2.hurd2.h_i_uid_high
965#define i_gid_high osd2.hurd2.h_i_gid_high
966#define i_author osd2.hurd2.h_i_author
967
968#elif defined(__masix__)
969
970#define i_reserved1 osd1.masix1.m_i_reserved1
a1ddeb7e 971#define i_file_acl_high osd2.masix2.m_i_file_acl_high
ac27a0ec
DK
972#define i_reserved2 osd2.masix2.m_i_reserved2
973
974#endif /* defined(__KERNEL__) || defined(__linux__) */
975
c0677e6d 976#include "extents_status.h"
6866d7b3 977#include "fast_commit.h"
c0677e6d 978
daf647d2
TT
979/*
980 * Lock subclasses for i_data_sem in the ext4_inode_info structure.
981 *
982 * These are needed to avoid lockdep false positives when we need to
983 * allocate blocks to the quota inode during ext4_map_blocks(), while
984 * holding i_data_sem for a normal (non-quota) inode. Since we don't
985 * do quota tracking for the quota inode, this avoids deadlock (as
986 * well as infinite recursion, since it isn't turtles all the way
987 * down...)
988 *
989 * I_DATA_SEM_NORMAL - Used for most inodes
990 * I_DATA_SEM_OTHER - Used by move_inode.c for the second normal inode
991 * where the second inode has larger inode number
992 * than the first
993 * I_DATA_SEM_QUOTA - Used for quota inodes only
aff3bea9 994 * I_DATA_SEM_EA - Used for ea_inodes only
daf647d2
TT
995 */
996enum {
997 I_DATA_SEM_NORMAL = 0,
998 I_DATA_SEM_OTHER,
999 I_DATA_SEM_QUOTA,
aff3bea9 1000 I_DATA_SEM_EA
daf647d2
TT
1001};
1002
1003
d444c3c3
TT
1004/*
1005 * fourth extended file system inode data in memory
1006 */
1007struct ext4_inode_info {
1008 __le32 i_data[15]; /* unconverted */
d444c3c3 1009 __u32 i_dtime;
12e9b892 1010 ext4_fsblk_t i_file_acl;
d444c3c3
TT
1011
1012 /*
1013 * i_block_group is the number of the block group which contains
1014 * this file's inode. Constant across the lifetime of the inode,
a627b0a7 1015 * it is used for making block allocation decisions - we try to
d444c3c3
TT
1016 * place a file's data blocks near its inode block, and new inodes
1017 * near to their parent directory's inode.
1018 */
1019 ext4_group_t i_block_group;
8a2005d3 1020 ext4_lblk_t i_dir_start_lookup;
353eb83c 1021#if (BITS_PER_LONG < 64)
19f5fb7a 1022 unsigned long i_state_flags; /* Dynamic state flags */
353eb83c 1023#endif
12e9b892 1024 unsigned long i_flags;
d444c3c3 1025
d444c3c3
TT
1026 /*
1027 * Extended attributes can be read independently of the main file
f340b3d9 1028 * data. Taking i_rwsem even when reading would cause contention
d444c3c3
TT
1029 * between readers of EAs and writers of regular file data, so
1030 * instead we synchronize on xattr_sem when reading or changing
1031 * EAs.
1032 */
1033 struct rw_semaphore xattr_sem;
d444c3c3 1034
02f310fc
JK
1035 /*
1036 * Inodes with EXT4_STATE_ORPHAN_FILE use i_orphan_idx. Otherwise
1037 * i_orphan is used.
1038 */
1039 union {
1040 struct list_head i_orphan; /* unlinked but open inodes */
1041 unsigned int i_orphan_idx; /* Index in orphan file */
1042 };
d444c3c3 1043
aa75f4d3
HS
1044 /* Fast commit related info */
1045
b3998b3b
RH
1046 /* For tracking dentry create updates */
1047 struct list_head i_fc_dilist;
aa75f4d3
HS
1048 struct list_head i_fc_list; /*
1049 * inodes that need fast commit
1050 * protected by sbi->s_fc_lock.
1051 */
1052
aa75f4d3
HS
1053 /* Start of lblk range that needs to be committed in this fast commit */
1054 ext4_lblk_t i_fc_lblk_start;
1055
1056 /* End of lblk range that needs to be committed in this fast commit */
1057 ext4_lblk_t i_fc_lblk_len;
1058
1059 /* Number of ongoing updates on this inode */
1060 atomic_t i_fc_updates;
1061
1062 /* Fast commit wait queue for this inode */
1063 wait_queue_head_t i_fc_wait;
1064
1065 /* Protect concurrent accesses on i_fc_lblk_start, i_fc_lblk_len */
1066 struct mutex i_fc_lock;
1067
d444c3c3
TT
1068 /*
1069 * i_disksize keeps track of what the inode size is ON DISK, not
1070 * in memory. During truncate, i_size is set to the new size by
1071 * the VFS prior to calling ext4_truncate(), but the filesystem won't
1072 * set i_disksize to 0 until the truncate is actually under way.
1073 *
1074 * The intent is that i_disksize always represents the blocks which
1075 * are used by this file. This allows recovery to restart truncate
1076 * on orphans if we crash during truncate. We actually write i_disksize
1077 * into the on-disk inode when writing inodes out, instead of i_size.
1078 *
1079 * The only time when i_disksize and i_size may be different is when
1080 * a truncate is in progress. The only things which change i_disksize
1081 * are ext4_get_block (growth) and ext4_truncate (shrinkth).
1082 */
1083 loff_t i_disksize;
1084
1085 /*
1086 * i_data_sem is for serialising ext4_truncate() against
1087 * ext4_getblock(). In the 2.4 ext2 design, great chunks of inode's
1088 * data tree are chopped off during truncate. We can't do that in
1089 * ext4 because whenever we perform intermediate commits during
1090 * truncate, the inode and all the metadata blocks *must* be in a
1091 * consistent state which allows truncation of the orphans to restart
1092 * during recovery. Hence we must fix the get_block-vs-truncate race
1093 * by other means, so we have i_data_sem.
1094 */
1095 struct rw_semaphore i_data_sem;
1096 struct inode vfs_inode;
8aefcd55 1097 struct jbd2_inode *jinode;
d444c3c3 1098
202ee5df
TT
1099 spinlock_t i_raw_lock; /* protects updates to the raw inode */
1100
d444c3c3
TT
1101 /*
1102 * File creation time. Its function is same as that of
7b62b293 1103 * struct timespec64 i_{a,c,m}time in the generic inode.
d444c3c3 1104 */
7b62b293 1105 struct timespec64 i_crtime;
d444c3c3
TT
1106
1107 /* mballoc */
27bc446e 1108 atomic_t i_prealloc_active;
38727786
OM
1109 struct rb_root i_prealloc_node;
1110 rwlock_t i_prealloc_lock;
d444c3c3 1111
c0677e6d
ZL
1112 /* extents status tree */
1113 struct ext4_es_tree i_es_tree;
1114 rwlock_t i_es_lock;
edaa53ca 1115 struct list_head i_es_list;
eb68d0e2 1116 unsigned int i_es_all_nr; /* protected by i_es_lock */
edaa53ca 1117 unsigned int i_es_shk_nr; /* protected by i_es_lock */
dd475925
JK
1118 ext4_lblk_t i_es_shrink_lblk; /* Offset where we start searching for
1119 extents to shrink. Protected by
1120 i_es_lock */
c0677e6d 1121
d444c3c3
TT
1122 /* ialloc */
1123 ext4_group_t i_last_alloc_group;
1124
1125 /* allocation reservation info for delalloc */
a627b0a7 1126 /* In case of bigalloc, this refer to clusters rather than blocks */
d444c3c3 1127 unsigned int i_reserved_data_blocks;
d444c3c3 1128
1dc0aa46
EW
1129 /* pending cluster reservations for bigalloc file systems */
1130 struct ext4_pending_tree i_pending_tree;
1131
d444c3c3
TT
1132 /* on-disk additional length */
1133 __u16 i_extra_isize;
1134
67cf5b09
TM
1135 /* Indicate the inline data space. */
1136 u16 i_inline_off;
1137 u16 i_inline_size;
1138
a9e7f447
DM
1139#ifdef CONFIG_QUOTA
1140 /* quota space reservation, managed internally by quota code */
1141 qsize_t i_reserved_quota;
1142#endif
8d5d02e6 1143
2e8fa54e 1144 /* Lock protecting lists below */
744692dc 1145 spinlock_t i_completed_io_lock;
2e8fa54e
JK
1146 /*
1147 * Completed IOs that need unwritten extents handling and have
1148 * transaction reserved
1149 */
1150 struct list_head i_rsv_conversion_list;
2e8fa54e 1151 struct work_struct i_rsv_conversion_work;
600be30a 1152 atomic_t i_unwritten; /* Nr. of inflight conversions pending */
8a2005d3
TT
1153
1154 spinlock_t i_block_reservation_lock;
b436b9be
JK
1155
1156 /*
1157 * Transactions that contain inode's metadata needed to complete
1158 * fsync and fdatasync, respectively.
1159 */
1160 tid_t i_sync_tid;
1161 tid_t i_datasync_tid;
814525f4 1162
96c7e0d9 1163#ifdef CONFIG_QUOTA
ccb49011 1164 struct dquot __rcu *i_dquot[MAXQUOTAS];
96c7e0d9
JK
1165#endif
1166
814525f4
DW
1167 /* Precomputed uuid+inum+igen checksum for seeding inode checksums */
1168 __u32 i_csum_seed;
b30ab0e0 1169
040cb378 1170 kprojid_t i_projid;
d444c3c3
TT
1171};
1172
ac27a0ec
DK
1173/*
1174 * File system states
1175 */
617ba13b
MC
1176#define EXT4_VALID_FS 0x0001 /* Unmounted cleanly */
1177#define EXT4_ERROR_FS 0x0002 /* Errors detected */
1178#define EXT4_ORPHAN_FS 0x0004 /* Orphans being recovered */
8016e29f 1179#define EXT4_FC_REPLAY 0x0020 /* Fast commit replay ongoing */
ac27a0ec 1180
469108ff
TT
1181/*
1182 * Misc. filesystem flags
1183 */
1184#define EXT2_FLAGS_SIGNED_HASH 0x0001 /* Signed dirhash in use */
1185#define EXT2_FLAGS_UNSIGNED_HASH 0x0002 /* Unsigned dirhash in use */
1186#define EXT2_FLAGS_TEST_FILESYS 0x0004 /* to test development code */
1187
ac27a0ec 1188/*
68911009 1189 * Mount flags set via mount options or defaults
ac27a0ec 1190 */
cdb7ee4c 1191#define EXT4_MOUNT_NO_MBCACHE 0x00001 /* Do not use mbcache */
617ba13b
MC
1192#define EXT4_MOUNT_GRPID 0x00004 /* Create files with directory's group */
1193#define EXT4_MOUNT_DEBUG 0x00008 /* Some debugging messages */
1194#define EXT4_MOUNT_ERRORS_CONT 0x00010 /* Continue on errors */
1195#define EXT4_MOUNT_ERRORS_RO 0x00020 /* Remount fs ro on errors */
1196#define EXT4_MOUNT_ERRORS_PANIC 0x00040 /* Panic on errors */
39ef17f1 1197#define EXT4_MOUNT_ERRORS_MASK 0x00070
617ba13b
MC
1198#define EXT4_MOUNT_MINIX_DF 0x00080 /* Mimics the Minix statfs */
1199#define EXT4_MOUNT_NOLOAD 0x00100 /* Don't use existing journal*/
923ae0ff 1200#ifdef CONFIG_FS_DAX
fc626fe3 1201#define EXT4_MOUNT_DAX_ALWAYS 0x00200 /* Direct Access */
923ae0ff 1202#else
fc626fe3 1203#define EXT4_MOUNT_DAX_ALWAYS 0
923ae0ff 1204#endif
617ba13b
MC
1205#define EXT4_MOUNT_DATA_FLAGS 0x00C00 /* Mode for data writes: */
1206#define EXT4_MOUNT_JOURNAL_DATA 0x00400 /* Write data to journal */
1207#define EXT4_MOUNT_ORDERED_DATA 0x00800 /* Flush data before commit */
1208#define EXT4_MOUNT_WRITEBACK_DATA 0x00C00 /* No data ordering */
1209#define EXT4_MOUNT_UPDATE_JOURNAL 0x01000 /* Update the journal format */
1210#define EXT4_MOUNT_NO_UID32 0x02000 /* Disable 32-bit UIDs */
1211#define EXT4_MOUNT_XATTR_USER 0x04000 /* Extended user attributes */
1212#define EXT4_MOUNT_POSIX_ACL 0x08000 /* POSIX Access Control Lists */
afd4672d 1213#define EXT4_MOUNT_NO_AUTO_DA_ALLOC 0x10000 /* No auto delalloc mapping */
617ba13b 1214#define EXT4_MOUNT_BARRIER 0x20000 /* Use block barriers */
49da9392
JK
1215#define EXT4_MOUNT_QUOTA 0x40000 /* Some quota option set */
1216#define EXT4_MOUNT_USRQUOTA 0x80000 /* "old" user quota,
1217 * enable enforcement for hidden
1218 * quota files */
1219#define EXT4_MOUNT_GRPQUOTA 0x100000 /* "old" group quota, enable
1220 * enforcement for hidden quota
1221 * files */
1222#define EXT4_MOUNT_PRJQUOTA 0x200000 /* Enable project quota
1223 * enforcement */
744692dc 1224#define EXT4_MOUNT_DIOREAD_NOLOCK 0x400000 /* Enable support for dio read nolocking */
d4da6c9c 1225#define EXT4_MOUNT_JOURNAL_CHECKSUM 0x800000 /* Journal checksums */
818d276c 1226#define EXT4_MOUNT_JOURNAL_ASYNC_COMMIT 0x1000000 /* Journal Async Commit */
327eaf73 1227#define EXT4_MOUNT_WARN_ON_ERROR 0x2000000 /* Trigger WARN_ON on error */
21175ca4 1228#define EXT4_MOUNT_NO_PREFETCH_BLOCK_BITMAPS 0x4000000
64769240 1229#define EXT4_MOUNT_DELALLOC 0x8000000 /* Delalloc support */
5bf5683a 1230#define EXT4_MOUNT_DATA_ERR_ABORT 0x10000000 /* Abort on file data write */
6fd058f7 1231#define EXT4_MOUNT_BLOCK_VALIDITY 0x20000000 /* Block validity checking */
5328e635 1232#define EXT4_MOUNT_DISCARD 0x40000000 /* Issue DISCARD requests */
bfff6873 1233#define EXT4_MOUNT_INIT_INODE_TABLE 0x80000000 /* Initialize uninitialized itables */
5bf5683a 1234
68911009
LC
1235/*
1236 * Mount flags set either automatically (could not be set by mount option)
1237 * based on per file system feature or property or in special cases such as
1238 * distinguishing between explicit mount option definition and default.
1239 */
56889787
TT
1240#define EXT4_MOUNT2_EXPLICIT_DELALLOC 0x00000001 /* User explicitly
1241 specified delalloc */
68911009
LC
1242#define EXT4_MOUNT2_STD_GROUP_SIZE 0x00000002 /* We have standard group
1243 size of blocksize * 8
1244 blocks */
ed3654eb
TT
1245#define EXT4_MOUNT2_HURD_COMPAT 0x00000004 /* Support HURD-castrated
1246 file systems */
1e381f60
DM
1247#define EXT4_MOUNT2_EXPLICIT_JOURNAL_CHECKSUM 0x00000008 /* User explicitly
1248 specified journal checksum */
1249
995a3ed6 1250#define EXT4_MOUNT2_JOURNAL_FAST_COMMIT 0x00000010 /* Journal fast commit */
a72b38ee
HS
1251#define EXT4_MOUNT2_DAX_NEVER 0x00000020 /* Do not allow Direct Access */
1252#define EXT4_MOUNT2_DAX_INODE 0x00000040 /* For printing options only */
196e402a
HS
1253#define EXT4_MOUNT2_MB_OPTIMIZE_SCAN 0x00000080 /* Optimize group
1254 * scanning in mballoc
1255 */
22b8d707 1256#define EXT4_MOUNT2_ABORT 0x00000100 /* Abort filesystem */
995a3ed6 1257
fd8c37ec
TT
1258#define clear_opt(sb, opt) EXT4_SB(sb)->s_mount_opt &= \
1259 ~EXT4_MOUNT_##opt
1260#define set_opt(sb, opt) EXT4_SB(sb)->s_mount_opt |= \
1261 EXT4_MOUNT_##opt
617ba13b
MC
1262#define test_opt(sb, opt) (EXT4_SB(sb)->s_mount_opt & \
1263 EXT4_MOUNT_##opt)
ac27a0ec 1264
a2595b8a
TT
1265#define clear_opt2(sb, opt) EXT4_SB(sb)->s_mount_opt2 &= \
1266 ~EXT4_MOUNT2_##opt
1267#define set_opt2(sb, opt) EXT4_SB(sb)->s_mount_opt2 |= \
1268 EXT4_MOUNT2_##opt
1269#define test_opt2(sb, opt) (EXT4_SB(sb)->s_mount_opt2 & \
1270 EXT4_MOUNT2_##opt)
1271
597d508c
AM
1272#define ext4_test_and_set_bit __test_and_set_bit_le
1273#define ext4_set_bit __set_bit_le
597d508c
AM
1274#define ext4_test_and_clear_bit __test_and_clear_bit_le
1275#define ext4_clear_bit __clear_bit_le
50e0168c 1276#define ext4_test_bit test_bit_le
50e0168c
AM
1277#define ext4_find_next_zero_bit find_next_zero_bit_le
1278#define ext4_find_next_bit find_next_bit_le
ac27a0ec 1279
123e3016 1280extern void mb_set_bits(void *bm, int cur, int len);
c3e94d1d 1281
ac27a0ec
DK
1282/*
1283 * Maximal mount counts between two filesystem checks
1284 */
617ba13b
MC
1285#define EXT4_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
1286#define EXT4_DFL_CHECKINTERVAL 0 /* Don't use interval check */
ac27a0ec
DK
1287
1288/*
1289 * Behaviour when detecting errors
1290 */
617ba13b
MC
1291#define EXT4_ERRORS_CONTINUE 1 /* Continue execution */
1292#define EXT4_ERRORS_RO 2 /* Remount fs read-only */
1293#define EXT4_ERRORS_PANIC 3 /* Panic */
1294#define EXT4_ERRORS_DEFAULT EXT4_ERRORS_CONTINUE
ac27a0ec 1295
e6153918
DW
1296/* Metadata checksum algorithm codes */
1297#define EXT4_CRC32C_CHKSUM 1
1298
bbc605cd
LC
1299#define EXT4_LABEL_MAX 16
1300
ac27a0ec
DK
1301/*
1302 * Structure of the super block
1303 */
617ba13b 1304struct ext4_super_block {
ac27a0ec 1305/*00*/ __le32 s_inodes_count; /* Inodes count */
6bc9feff 1306 __le32 s_blocks_count_lo; /* Blocks count */
308ba3ec
AK
1307 __le32 s_r_blocks_count_lo; /* Reserved blocks count */
1308 __le32 s_free_blocks_count_lo; /* Free blocks count */
ac27a0ec
DK
1309/*10*/ __le32 s_free_inodes_count; /* Free inodes count */
1310 __le32 s_first_data_block; /* First Data Block */
1311 __le32 s_log_block_size; /* Block size */
281b5995 1312 __le32 s_log_cluster_size; /* Allocation cluster size */
ac27a0ec 1313/*20*/ __le32 s_blocks_per_group; /* # Blocks per group */
281b5995 1314 __le32 s_clusters_per_group; /* # Clusters per group */
ac27a0ec
DK
1315 __le32 s_inodes_per_group; /* # Inodes per group */
1316 __le32 s_mtime; /* Mount time */
1317/*30*/ __le32 s_wtime; /* Write time */
1318 __le16 s_mnt_count; /* Mount count */
1319 __le16 s_max_mnt_count; /* Maximal mount count */
1320 __le16 s_magic; /* Magic signature */
1321 __le16 s_state; /* File system state */
1322 __le16 s_errors; /* Behaviour when detecting errors */
1323 __le16 s_minor_rev_level; /* minor revision level */
1324/*40*/ __le32 s_lastcheck; /* time of last check */
1325 __le32 s_checkinterval; /* max. time between checks */
1326 __le32 s_creator_os; /* OS */
1327 __le32 s_rev_level; /* Revision level */
1328/*50*/ __le16 s_def_resuid; /* Default uid for reserved blocks */
1329 __le16 s_def_resgid; /* Default gid for reserved blocks */
1330 /*
617ba13b 1331 * These fields are for EXT4_DYNAMIC_REV superblocks only.
ac27a0ec
DK
1332 *
1333 * Note: the difference between the compatible feature set and
1334 * the incompatible feature set is that if there is a bit set
1335 * in the incompatible feature set that the kernel doesn't
1336 * know about, it should refuse to mount the filesystem.
1337 *
1338 * e2fsck's requirements are more strict; if it doesn't know
1339 * about a feature in either the compatible or incompatible
1340 * feature set, it must abort and not try to meddle with
1341 * things it doesn't understand...
1342 */
1343 __le32 s_first_ino; /* First non-reserved inode */
0d1ee42f 1344 __le16 s_inode_size; /* size of inode structure */
ac27a0ec
DK
1345 __le16 s_block_group_nr; /* block group # of this superblock */
1346 __le32 s_feature_compat; /* compatible feature set */
1347/*60*/ __le32 s_feature_incompat; /* incompatible feature set */
1348 __le32 s_feature_ro_compat; /* readonly-compatible feature set */
1349/*68*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */
bbc605cd 1350/*78*/ char s_volume_name[EXT4_LABEL_MAX]; /* volume name */
072ebb3b 1351/*88*/ char s_last_mounted[64] __nonstring; /* directory where last mounted */
ac27a0ec
DK
1352/*C8*/ __le32 s_algorithm_usage_bitmap; /* For compression */
1353 /*
1354 * Performance hints. Directory preallocation should only
617ba13b 1355 * happen if the EXT4_FEATURE_COMPAT_DIR_PREALLOC flag is on.
ac27a0ec
DK
1356 */
1357 __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
1358 __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
1359 __le16 s_reserved_gdt_blocks; /* Per group desc for online growth */
1360 /*
617ba13b 1361 * Journaling support valid if EXT4_FEATURE_COMPAT_HAS_JOURNAL set.
ac27a0ec
DK
1362 */
1363/*D0*/ __u8 s_journal_uuid[16]; /* uuid of journal superblock */
1364/*E0*/ __le32 s_journal_inum; /* inode number of journal file */
1365 __le32 s_journal_dev; /* device number of journal file */
1366 __le32 s_last_orphan; /* start of list of inodes to delete */
1367 __le32 s_hash_seed[4]; /* HTREE hash seed */
1368 __u8 s_def_hash_version; /* Default hash version to use */
89eeddf0 1369 __u8 s_jnl_backup_type;
0d1ee42f 1370 __le16 s_desc_size; /* size of group descriptor */
bd81d8ee 1371/*100*/ __le32 s_default_mount_opts;
ac27a0ec 1372 __le32 s_first_meta_bg; /* First metablock block group */
bd81d8ee
LV
1373 __le32 s_mkfs_time; /* When the filesystem was created */
1374 __le32 s_jnl_blocks[17]; /* Backup of the journal inode */
7fc1f5c2 1375 /* 64bit support valid if EXT4_FEATURE_INCOMPAT_64BIT */
bd81d8ee
LV
1376/*150*/ __le32 s_blocks_count_hi; /* Blocks count */
1377 __le32 s_r_blocks_count_hi; /* Reserved blocks count */
1378 __le32 s_free_blocks_count_hi; /* Free blocks count */
c1bddad9
AK
1379 __le16 s_min_extra_isize; /* All inodes have at least # bytes */
1380 __le16 s_want_extra_isize; /* New inodes should reserve # bytes */
1381 __le32 s_flags; /* Miscellaneous flags */
1382 __le16 s_raid_stride; /* RAID stride */
c5e06d10 1383 __le16 s_mmp_update_interval; /* # seconds to wait in MMP checking */
c1bddad9
AK
1384 __le64 s_mmp_block; /* Block for multi-mount protection */
1385 __le32 s_raid_stripe_width; /* blocks on all data disks (N*stride)*/
772cb7c8 1386 __u8 s_log_groups_per_flex; /* FLEX_BG group size */
e6153918 1387 __u8 s_checksum_type; /* metadata checksum algorithm used */
f542fbe8
TT
1388 __u8 s_encryption_level; /* versioning level for encryption */
1389 __u8 s_reserved_pad; /* Padding to next 32bits */
afc32f7e 1390 __le64 s_kbytes_written; /* nr of lifetime kilobytes written */
4a9cdec7
TT
1391 __le32 s_snapshot_inum; /* Inode number of active snapshot */
1392 __le32 s_snapshot_id; /* sequential ID of active snapshot */
1393 __le64 s_snapshot_r_blocks_count; /* reserved blocks for active
1394 snapshot's future use */
1395 __le32 s_snapshot_list; /* inode number of the head of the
1396 on-disk snapshot list */
1c13d5c0
TT
1397#define EXT4_S_ERR_START offsetof(struct ext4_super_block, s_error_count)
1398 __le32 s_error_count; /* number of fs errors */
1399 __le32 s_first_error_time; /* first time an error happened */
1400 __le32 s_first_error_ino; /* inode involved in first error */
1401 __le64 s_first_error_block; /* block involved of first error */
072ebb3b 1402 __u8 s_first_error_func[32] __nonstring; /* function where the error happened */
1c13d5c0
TT
1403 __le32 s_first_error_line; /* line number where error happened */
1404 __le32 s_last_error_time; /* most recent time of an error */
1405 __le32 s_last_error_ino; /* inode involved in last error */
1406 __le32 s_last_error_line; /* line number where error happened */
1407 __le64 s_last_error_block; /* block involved of last error */
072ebb3b 1408 __u8 s_last_error_func[32] __nonstring; /* function where the error happened */
8b67f04a
TT
1409#define EXT4_S_ERR_END offsetof(struct ext4_super_block, s_mount_opts)
1410 __u8 s_mount_opts[64];
281b5995
TT
1411 __le32 s_usr_quota_inum; /* inode for tracking user quota */
1412 __le32 s_grp_quota_inum; /* inode for tracking group quota */
1413 __le32 s_overhead_clusters; /* overhead blocks/clusters in fs */
1beeef1b 1414 __le32 s_backup_bgs[2]; /* groups with sparse_super2 SBs */
3edc18d8 1415 __u8 s_encrypt_algos[4]; /* Encryption algorithms in use */
f542fbe8
TT
1416 __u8 s_encrypt_pw_salt[16]; /* Salt used for string2key algorithm */
1417 __le32 s_lpf_ino; /* Location of the lost+found inode */
8b4953e1 1418 __le32 s_prj_quota_inum; /* inode for tracking project quota */
8c81bd8f 1419 __le32 s_checksum_seed; /* crc32c(uuid) if csum_seed set */
6a0678a7
AB
1420 __u8 s_wtime_hi;
1421 __u8 s_mtime_hi;
1422 __u8 s_mkfs_time_hi;
1423 __u8 s_lastcheck_hi;
1424 __u8 s_first_error_time_hi;
1425 __u8 s_last_error_time_hi;
878520ac
TT
1426 __u8 s_first_error_errcode;
1427 __u8 s_last_error_errcode;
c83ad55e
GKB
1428 __le16 s_encoding; /* Filename charset encoding */
1429 __le16 s_encoding_flags; /* Filename charset encoding flags */
02f310fc
JK
1430 __le32 s_orphan_file_inum; /* Inode for tracking orphan inodes */
1431 __le32 s_reserved[94]; /* Padding to the end of the block */
e6153918 1432 __le32 s_checksum; /* crc32c(superblock) */
ac27a0ec
DK
1433};
1434
1c13d5c0
TT
1435#define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START)
1436
ac27a0ec 1437#ifdef __KERNEL__
bc0b0d6d 1438
a2d4a646 1439/* Number of quota types we support */
689c958c 1440#define EXT4_MAXQUOTAS 3
a2d4a646 1441
c83ad55e
GKB
1442#define EXT4_ENC_UTF8_12_1 1
1443
188c299e
JK
1444/* Types of ext4 journal triggers */
1445enum ext4_journal_trigger_type {
02f310fc 1446 EXT4_JTR_ORPHAN_FILE,
188c299e
JK
1447 EXT4_JTR_NONE /* This must be the last entry for indexing to work! */
1448};
1449
1450#define EXT4_JOURNAL_TRIGGER_COUNT EXT4_JTR_NONE
1451
1452struct ext4_journal_trigger {
1453 struct jbd2_buffer_trigger_type tr_triggers;
1454 struct super_block *sb;
1455};
1456
1457static inline struct ext4_journal_trigger *EXT4_TRIGGER(
1458 struct jbd2_buffer_trigger_type *trigger)
1459{
1460 return container_of(trigger, struct ext4_journal_trigger, tr_triggers);
1461}
1462
02f310fc
JK
1463#define EXT4_ORPHAN_BLOCK_MAGIC 0x0b10ca04
1464
1465/* Structure at the tail of orphan block */
1466struct ext4_orphan_block_tail {
1467 __le32 ob_magic;
1468 __le32 ob_checksum;
1469};
1470
1471static inline int ext4_inodes_per_orphan_block(struct super_block *sb)
1472{
1473 return (sb->s_blocksize - sizeof(struct ext4_orphan_block_tail)) /
1474 sizeof(u32);
1475}
1476
1477struct ext4_orphan_block {
4a79a98c 1478 atomic_t ob_free_entries; /* Number of free orphan entries in block */
02f310fc
JK
1479 struct buffer_head *ob_bh; /* Buffer for orphan block */
1480};
1481
1482/*
1483 * Info about orphan file.
1484 */
1485struct ext4_orphan_info {
02f310fc
JK
1486 int of_blocks; /* Number of orphan blocks in a file */
1487 __u32 of_csum_seed; /* Checksum seed for orphan file */
1488 struct ext4_orphan_block *of_binfo; /* Array with info about orphan
1489 * file blocks */
1490};
1491
ca0faba0
TT
1492/*
1493 * fourth extended-fs super-block data in memory
1494 */
1495struct ext4_sb_info {
1496 unsigned long s_desc_size; /* Size of a group descriptor in bytes */
1497 unsigned long s_inodes_per_block;/* Number of inodes per block */
1498 unsigned long s_blocks_per_group;/* Number of blocks in a group */
281b5995 1499 unsigned long s_clusters_per_group; /* Number of clusters in a group */
ca0faba0
TT
1500 unsigned long s_inodes_per_group;/* Number of inodes in a group */
1501 unsigned long s_itb_per_group; /* Number of inode table blocks per group */
1502 unsigned long s_gdb_count; /* Number of group descriptor blocks */
1503 unsigned long s_desc_per_block; /* Number of group descriptors per block */
1504 ext4_group_t s_groups_count; /* Number of groups in the fs */
fb0a387d 1505 ext4_group_t s_blockfile_groups;/* Groups acceptable for non-extent files */
952fc18e 1506 unsigned long s_overhead; /* # of fs overhead clusters */
281b5995
TT
1507 unsigned int s_cluster_ratio; /* Number of blocks per cluster */
1508 unsigned int s_cluster_bits; /* log2 of s_cluster_ratio */
ca0faba0
TT
1509 loff_t s_bitmap_maxbytes; /* max bytes for bitmap files */
1510 struct buffer_head * s_sbh; /* Buffer containing the super block */
1511 struct ext4_super_block *s_es; /* Pointer to the super block in the buffer */
350bb48b 1512 /* Array of bh's for the block group descriptors */
1d0c3924 1513 struct buffer_head * __rcu *s_group_desc;
7f4520cc 1514 unsigned int s_mount_opt;
a2595b8a 1515 unsigned int s_mount_opt2;
9b5f6c9b 1516 unsigned long s_mount_flags;
5a916be1 1517 unsigned int s_def_mount_opt;
e3645d72 1518 unsigned int s_def_mount_opt2;
ca0faba0 1519 ext4_fsblk_t s_sb_block;
27dd4385 1520 atomic64_t s_resv_clusters;
08cefc7a
EB
1521 kuid_t s_resuid;
1522 kgid_t s_resgid;
ca0faba0
TT
1523 unsigned short s_mount_state;
1524 unsigned short s_pad;
1525 int s_addr_per_block_bits;
1526 int s_desc_per_block_bits;
1527 int s_inode_size;
1528 int s_first_ino;
1529 unsigned int s_inode_readahead_blks;
11013911 1530 unsigned int s_inode_goal;
ca0faba0
TT
1531 u32 s_hash_seed[4];
1532 int s_def_hash_version;
6d2424a8 1533 int s_hash_unsigned; /* 3 if hash should be unsigned, 0 if not */
57042651 1534 struct percpu_counter s_freeclusters_counter;
ca0faba0
TT
1535 struct percpu_counter s_freeinodes_counter;
1536 struct percpu_counter s_dirs_counter;
57042651 1537 struct percpu_counter s_dirtyclusters_counter;
efc61345 1538 struct percpu_counter s_sra_exceeded_retry_limit;
ca0faba0
TT
1539 struct blockgroup_lock *s_blockgroup_lock;
1540 struct proc_dir_entry *s_proc;
1541 struct kobject s_kobj;
1542 struct completion s_kobj_unregister;
2c0544b2 1543 struct super_block *s_sb;
618f0031 1544 struct buffer_head *s_mmp_bh;
ca0faba0
TT
1545
1546 /* Journaling */
ca0faba0 1547 struct journal_s *s_journal;
9549a168 1548 unsigned long s_ext4_flags; /* Ext4 superblock flags */
02f310fc
JK
1549 struct mutex s_orphan_lock; /* Protects on disk list changes */
1550 struct list_head s_orphan; /* List of orphaned inodes in on disk
1551 list */
1552 struct ext4_orphan_info s_orphan_info;
ca0faba0
TT
1553 unsigned long s_commit_interval;
1554 u32 s_max_batch_time;
1555 u32 s_min_batch_time;
61ead714 1556 struct file *s_journal_bdev_file;
ca0faba0 1557#ifdef CONFIG_QUOTA
33458eab
TT
1558 /* Names of quota files with journalled quota */
1559 char __rcu *s_qf_names[EXT4_MAXQUOTAS];
ca0faba0
TT
1560 int s_jquota_fmt; /* Format of quota to use */
1561#endif
1562 unsigned int s_want_extra_isize; /* New inodes should reserve # bytes */
dd0db94f 1563 struct ext4_system_blocks __rcu *s_system_blks;
ca0faba0
TT
1564
1565#ifdef EXTENTS_STATS
1566 /* ext4 extents stats */
1567 unsigned long s_ext_min;
1568 unsigned long s_ext_max;
1569 unsigned long s_depth_max;
1570 spinlock_t s_ext_stats_lock;
1571 unsigned long s_ext_blocks;
1572 unsigned long s_ext_extents;
1573#endif
1574
1575 /* for buddy allocator */
df3da4ea 1576 struct ext4_group_info ** __rcu *s_group_info;
ca0faba0 1577 struct inode *s_buddy_cache;
ca0faba0 1578 spinlock_t s_md_lock;
ca0faba0
TT
1579 unsigned short *s_mb_offsets;
1580 unsigned int *s_mb_maxs;
28623c2f 1581 unsigned int s_group_info_size;
d08854f5 1582 unsigned int s_mb_free_pending;
ce774e53 1583 struct list_head s_freed_data_list[2]; /* List of blocks to be freed
a0154344 1584 after commit completed */
55cdd0af
WJ
1585 struct list_head s_discard_list;
1586 struct work_struct s_discard_work;
5036ab8d 1587 atomic_t s_retry_alloc_pending;
83e80a6e
JK
1588 struct list_head *s_mb_avg_fragment_size;
1589 rwlock_t *s_mb_avg_fragment_size_locks;
196e402a
HS
1590 struct list_head *s_mb_largest_free_orders;
1591 rwlock_t *s_mb_largest_free_orders_locks;
ca0faba0
TT
1592
1593 /* tunables */
1594 unsigned long s_stripe;
196e402a 1595 unsigned int s_mb_max_linear_groups;
ca0faba0
TT
1596 unsigned int s_mb_stream_request;
1597 unsigned int s_mb_max_to_scan;
1598 unsigned int s_mb_min_to_scan;
1599 unsigned int s_mb_stats;
1600 unsigned int s_mb_order2_reqs;
1601 unsigned int s_mb_group_prealloc;
df981d03 1602 unsigned int s_max_dir_size_kb;
ca0faba0
TT
1603 /* where last allocation was done - for stream allocation */
1604 unsigned long s_mb_last_group;
1605 unsigned long s_mb_last_start;
cfd73237
AZ
1606 unsigned int s_mb_prefetch;
1607 unsigned int s_mb_prefetch_limit;
f52f3d2b 1608 unsigned int s_mb_best_avail_max_trim_order;
ca0faba0 1609
ca0faba0 1610 /* stats for buddy allocator */
ca0faba0
TT
1611 atomic_t s_bal_reqs; /* number of reqs with len > 1 */
1612 atomic_t s_bal_success; /* we found long enough chunks */
1613 atomic_t s_bal_allocated; /* in blocks */
1614 atomic_t s_bal_ex_scanned; /* total extents scanned */
fdd9a009 1615 atomic_t s_bal_cX_ex_scanned[EXT4_MB_NUM_CRS]; /* total extents scanned */
a6c75eaf 1616 atomic_t s_bal_groups_scanned; /* number of groups scanned */
ca0faba0 1617 atomic_t s_bal_goals; /* goal hits */
3ef5d263 1618 atomic_t s_bal_len_goals; /* len goal hits */
ca0faba0
TT
1619 atomic_t s_bal_breaks; /* too long searches */
1620 atomic_t s_bal_2orders; /* 2^order hits */
f52f3d2b
OM
1621 atomic_t s_bal_p2_aligned_bad_suggestions;
1622 atomic_t s_bal_goal_fast_bad_suggestions;
1623 atomic_t s_bal_best_avail_bad_suggestions;
4eb7a4a1
OM
1624 atomic64_t s_bal_cX_groups_considered[EXT4_MB_NUM_CRS];
1625 atomic64_t s_bal_cX_hits[EXT4_MB_NUM_CRS];
1626 atomic64_t s_bal_cX_failed[EXT4_MB_NUM_CRS]; /* cX loop didn't find blocks */
67d25186
HS
1627 atomic_t s_mb_buddies_generated; /* number of buddies generated */
1628 atomic64_t s_mb_generation_time;
ca0faba0
TT
1629 atomic_t s_mb_lost_chunks;
1630 atomic_t s_mb_preallocated;
1631 atomic_t s_mb_discarded;
50797481 1632 atomic_t s_lock_busy;
ca0faba0
TT
1633
1634 /* locality groups */
003cb608 1635 struct ext4_locality_group __percpu *s_locality_groups;
ca0faba0
TT
1636
1637 /* for write statistics */
1638 unsigned long s_sectors_written_start;
1639 u64 s_kbytes_written;
1640
67a5da56
ZL
1641 /* the size of zero-out chunk */
1642 unsigned int s_extent_max_zeroout_kb;
1643
ca0faba0 1644 unsigned int s_log_groups_per_flex;
7c990728 1645 struct flex_groups * __rcu *s_flex_groups;
117fff10 1646 ext4_group_t s_flex_groups_allocated;
4c0425ff 1647
2e8fa54e
JK
1648 /* workqueue for reserved extent conversions (buffered io) */
1649 struct workqueue_struct *rsv_conversion_wq;
66e61a9e
TT
1650
1651 /* timer for periodic error stats printing */
1652 struct timer_list s_err_report;
bfff6873
LC
1653
1654 /* Lazy inode table initialization info */
1655 struct ext4_li_request *s_li_request;
1656 /* Wait multiplier for lazy initialization thread */
1657 unsigned int s_li_wait_mult;
c5e06d10
JL
1658
1659 /* Kernel thread for multiple mount protection */
1660 struct task_struct *s_mmp_tsk;
3d56b8d2
TM
1661
1662 /* record the last minlen when FITRIM is called. */
2327fb2e 1663 unsigned long s_last_trim_minblks;
0441984a
DW
1664
1665 /* Reference to checksum algorithm driver via cryptoapi */
1666 struct crypto_shash *s_chksum_driver;
a9c47317
DW
1667
1668 /* Precomputed FS UUID checksum for seeding other checksums */
1669 __u32 s_csum_seed;
74cd15cd
ZL
1670
1671 /* Reclaim extents from extent status tree */
4d09d75d 1672 struct shrinker *s_es_shrinker;
dd475925 1673 struct list_head s_es_list; /* List of inodes with reclaimable extents */
edaa53ca 1674 long s_es_nr_inode;
eb68d0e2 1675 struct ext4_es_stats s_es_stats;
47387409 1676 struct mb_cache *s_ea_block_cache;
dec214d0 1677 struct mb_cache *s_ea_inode_cache;
edaa53ca 1678 spinlock_t s_es_lock ____cacheline_aligned_in_smp;
efbed4dc 1679
188c299e
JK
1680 /* Journal triggers for checksum computation */
1681 struct ext4_journal_trigger s_journal_triggers[EXT4_JOURNAL_TRIGGER_COUNT];
1682
efbed4dc
TT
1683 /* Ratelimit ext4 messages. */
1684 struct ratelimit_state s_err_ratelimit_state;
1685 struct ratelimit_state s_warning_ratelimit_state;
1686 struct ratelimit_state s_msg_ratelimit_state;
1cf006ed
DM
1687 atomic_t s_warning_count;
1688 atomic_t s_msg_count;
c8585c6f 1689
ac4acb1f
EB
1690 /* Encryption policy for '-o test_dummy_encryption' */
1691 struct fscrypt_dummy_policy s_dummy_enc_policy;
ed318a6c 1692
cb85f4d2
EB
1693 /*
1694 * Barrier between writepages ops and changing any inode's JOURNAL_DATA
745f17a4
BL
1695 * or EXTENTS flag or between writepages ops and changing DELALLOC or
1696 * DIOREAD_NOLOCK mount options on remount.
cb85f4d2 1697 */
bbd55937 1698 struct percpu_rw_semaphore s_writepages_rwsem;
5e405595 1699 struct dax_device *s_daxdev;
cd913c76 1700 u64 s_dax_part_off;
46f870d6
TT
1701#ifdef CONFIG_EXT4_DEBUG
1702 unsigned long s_simulate_fail;
1703#endif
bc71726c 1704 /* Record the errseq of the backing block device */
1705 errseq_t s_bdev_wb_err;
1706 spinlock_t s_bdev_wb_lock;
aa75f4d3 1707
c92dc856
JK
1708 /* Information about errors that happened during this mount */
1709 spinlock_t s_error_lock;
1710 int s_add_error_count;
1711 int s_first_error_code;
1712 __u32 s_first_error_line;
1713 __u32 s_first_error_ino;
1714 __u64 s_first_error_block;
1715 const char *s_first_error_func;
1716 time64_t s_first_error_time;
1717 int s_last_error_code;
1718 __u32 s_last_error_line;
1719 __u32 s_last_error_ino;
1720 __u64 s_last_error_block;
1721 const char *s_last_error_func;
1722 time64_t s_last_error_time;
1723 /*
bb15cea2
TT
1724 * If we are in a context where we cannot update the on-disk
1725 * superblock, we queue the work here. This is used to update
1726 * the error information in the superblock, and for periodic
1727 * updates of the superblock called from the commit callback
1728 * function.
c92dc856 1729 */
bb15cea2 1730 struct work_struct s_sb_upd_work;
c92dc856 1731
7bbbe241 1732 /* Ext4 fast commit sub transaction ID */
aa75f4d3 1733 atomic_t s_fc_subtid;
7bbbe241 1734
aa75f4d3
HS
1735 /*
1736 * After commit starts, the main queue gets locked, and the further
1737 * updates get added in the staging queue.
1738 */
1739#define FC_Q_MAIN 0
1740#define FC_Q_STAGING 1
1741 struct list_head s_fc_q[2]; /* Inodes staged for fast commit
1742 * that have data changes in them.
1743 */
1744 struct list_head s_fc_dentry_q[2]; /* directory entry updates */
1745 unsigned int s_fc_bytes;
1746 /*
1747 * Main fast commit lock. This lock protects accesses to the
1748 * following fields:
1749 * ei->i_fc_list, s_fc_dentry_q, s_fc_q, s_fc_bytes, s_fc_bh.
1750 */
1751 spinlock_t s_fc_lock;
1752 struct buffer_head *s_fc_bh;
1753 struct ext4_fc_stats s_fc_stats;
e85c81ba 1754 tid_t s_fc_ineligible_tid;
8016e29f
HS
1755#ifdef CONFIG_EXT4_DEBUG
1756 int s_fc_debug_max_replay;
1757#endif
1758 struct ext4_fc_replay_state s_fc_replay_state;
ca0faba0
TT
1759};
1760
af5bc92d 1761static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb)
ac27a0ec
DK
1762{
1763 return sb->s_fs_info;
1764}
617ba13b 1765static inline struct ext4_inode_info *EXT4_I(struct inode *inode)
ac27a0ec 1766{
617ba13b 1767 return container_of(inode, struct ext4_inode_info, vfs_inode);
ac27a0ec
DK
1768}
1769
00d873c1
JK
1770static inline int ext4_writepages_down_read(struct super_block *sb)
1771{
1772 percpu_down_read(&EXT4_SB(sb)->s_writepages_rwsem);
1773 return memalloc_nofs_save();
1774}
1775
1776static inline void ext4_writepages_up_read(struct super_block *sb, int ctx)
1777{
1778 memalloc_nofs_restore(ctx);
1779 percpu_up_read(&EXT4_SB(sb)->s_writepages_rwsem);
1780}
1781
1782static inline int ext4_writepages_down_write(struct super_block *sb)
1783{
1784 percpu_down_write(&EXT4_SB(sb)->s_writepages_rwsem);
1785 return memalloc_nofs_save();
1786}
1787
1788static inline void ext4_writepages_up_write(struct super_block *sb, int ctx)
1789{
1790 memalloc_nofs_restore(ctx);
1791 percpu_up_write(&EXT4_SB(sb)->s_writepages_rwsem);
1792}
1793
617ba13b 1794static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino)
ac27a0ec 1795{
617ba13b 1796 return ino == EXT4_ROOT_INO ||
617ba13b
MC
1797 (ino >= EXT4_FIRST_INO(sb) &&
1798 ino <= le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count));
ac27a0ec 1799}
19f5fb7a 1800
1d0c3924
TT
1801/*
1802 * Returns: sbi->field[index]
1803 * Used to access an array element from the following sbi fields which require
1804 * rcu protection to avoid dereferencing an invalid pointer due to reassignment
1805 * - s_group_desc
1806 * - s_group_info
1807 * - s_flex_group
1808 */
1809#define sbi_array_rcu_deref(sbi, field, index) \
1810({ \
1811 typeof(*((sbi)->field)) _v; \
1812 rcu_read_lock(); \
1813 _v = ((typeof(_v)*)rcu_dereference((sbi)->field))[index]; \
1814 rcu_read_unlock(); \
1815 _v; \
1816})
1817
9b5f6c9b
HS
1818/*
1819 * run-time mount flags
1820 */
1821enum {
1822 EXT4_MF_MNTDIR_SAMPLED,
bdc8a53a 1823 EXT4_MF_FC_INELIGIBLE /* Fast commit ineligible */
9b5f6c9b
HS
1824};
1825
1826static inline void ext4_set_mount_flag(struct super_block *sb, int bit)
1827{
1828 set_bit(bit, &EXT4_SB(sb)->s_mount_flags);
1829}
1830
1831static inline void ext4_clear_mount_flag(struct super_block *sb, int bit)
1832{
1833 clear_bit(bit, &EXT4_SB(sb)->s_mount_flags);
1834}
1835
1836static inline int ext4_test_mount_flag(struct super_block *sb, int bit)
1837{
1838 return test_bit(bit, &EXT4_SB(sb)->s_mount_flags);
1839}
1840
1841
46f870d6
TT
1842/*
1843 * Simulate_fail codes
1844 */
1845#define EXT4_SIM_BBITMAP_EIO 1
1846#define EXT4_SIM_BBITMAP_CRC 2
1847#define EXT4_SIM_IBITMAP_EIO 3
1848#define EXT4_SIM_IBITMAP_CRC 4
1849#define EXT4_SIM_INODE_EIO 5
1850#define EXT4_SIM_INODE_CRC 6
1851#define EXT4_SIM_DIRBLOCK_EIO 7
1852#define EXT4_SIM_DIRBLOCK_CRC 8
1853
1854static inline bool ext4_simulate_fail(struct super_block *sb,
1855 unsigned long code)
1856{
1857#ifdef CONFIG_EXT4_DEBUG
1858 struct ext4_sb_info *sbi = EXT4_SB(sb);
1859
1860 if (unlikely(sbi->s_simulate_fail == code)) {
1861 sbi->s_simulate_fail = 0;
1862 return true;
1863 }
1864#endif
1865 return false;
1866}
1867
1868static inline void ext4_simulate_fail_bh(struct super_block *sb,
1869 struct buffer_head *bh,
1870 unsigned long code)
1871{
1872 if (!IS_ERR(bh) && ext4_simulate_fail(sb, code))
1873 clear_buffer_uptodate(bh);
1874}
1875
878520ac
TT
1876/*
1877 * Error number codes for s_{first,last}_error_errno
1878 *
1879 * Linux errno numbers are architecture specific, so we need to translate
1880 * them into something which is architecture independent. We don't define
1881 * codes for all errno's; just the ones which are most likely to be the cause
1882 * of an ext4_error() call.
1883 */
1884#define EXT4_ERR_UNKNOWN 1
1885#define EXT4_ERR_EIO 2
1886#define EXT4_ERR_ENOMEM 3
1887#define EXT4_ERR_EFSBADCRC 4
1888#define EXT4_ERR_EFSCORRUPTED 5
1889#define EXT4_ERR_ENOSPC 6
1890#define EXT4_ERR_ENOKEY 7
1891#define EXT4_ERR_EROFS 8
1892#define EXT4_ERR_EFBIG 9
1893#define EXT4_ERR_EEXIST 10
1894#define EXT4_ERR_ERANGE 11
1895#define EXT4_ERR_EOVERFLOW 12
1896#define EXT4_ERR_EBUSY 13
1897#define EXT4_ERR_ENOTDIR 14
1898#define EXT4_ERR_ENOTEMPTY 15
1899#define EXT4_ERR_ESHUTDOWN 16
1900#define EXT4_ERR_EFAULT 17
1901
19f5fb7a
TT
1902/*
1903 * Inode dynamic state flags
1904 */
1905enum {
19f5fb7a
TT
1906 EXT4_STATE_NEW, /* inode is newly created */
1907 EXT4_STATE_XATTR, /* has in-inode xattrs */
1908 EXT4_STATE_NO_EXPAND, /* No space for expansion */
1909 EXT4_STATE_DA_ALLOC_CLOSE, /* Alloc DA blks on close */
1910 EXT4_STATE_EXT_MIGRATE, /* Inode is migrating */
14ece102 1911 EXT4_STATE_NEWENTRY, /* File just added to dir */
67cf5b09 1912 EXT4_STATE_MAY_INLINE_DATA, /* may have in-inode data */
7869a4a6 1913 EXT4_STATE_EXT_PRECACHED, /* extents have been precached */
a6d05676 1914 EXT4_STATE_LUSTRE_EA_INODE, /* Lustre-style ea_inode */
c93d8f88 1915 EXT4_STATE_VERITY_IN_PROGRESS, /* building fs-verity Merkle tree */
aa75f4d3 1916 EXT4_STATE_FC_COMMITTING, /* Fast commit ongoing */
02f310fc 1917 EXT4_STATE_ORPHAN_FILE, /* Inode orphaned in orphan file */
19f5fb7a
TT
1918};
1919
353eb83c 1920#define EXT4_INODE_BIT_FNS(name, field, offset) \
12e9b892
DM
1921static inline int ext4_test_inode_##name(struct inode *inode, int bit) \
1922{ \
353eb83c 1923 return test_bit(bit + (offset), &EXT4_I(inode)->i_##field); \
12e9b892
DM
1924} \
1925static inline void ext4_set_inode_##name(struct inode *inode, int bit) \
1926{ \
353eb83c 1927 set_bit(bit + (offset), &EXT4_I(inode)->i_##field); \
12e9b892
DM
1928} \
1929static inline void ext4_clear_inode_##name(struct inode *inode, int bit) \
1930{ \
353eb83c 1931 clear_bit(bit + (offset), &EXT4_I(inode)->i_##field); \
19f5fb7a
TT
1932}
1933
3f61c0cc
AD
1934/* Add these declarations here only so that these functions can be
1935 * found by name. Otherwise, they are very hard to locate. */
1936static inline int ext4_test_inode_flag(struct inode *inode, int bit);
1937static inline void ext4_set_inode_flag(struct inode *inode, int bit);
1938static inline void ext4_clear_inode_flag(struct inode *inode, int bit);
353eb83c 1939EXT4_INODE_BIT_FNS(flag, flags, 0)
3f61c0cc
AD
1940
1941/* Add these declarations here only so that these functions can be
1942 * found by name. Otherwise, they are very hard to locate. */
1943static inline int ext4_test_inode_state(struct inode *inode, int bit);
1944static inline void ext4_set_inode_state(struct inode *inode, int bit);
1945static inline void ext4_clear_inode_state(struct inode *inode, int bit);
353eb83c
TT
1946#if (BITS_PER_LONG < 64)
1947EXT4_INODE_BIT_FNS(state, state_flags, 0)
1948
1949static inline void ext4_clear_state_flags(struct ext4_inode_info *ei)
1950{
1951 (ei)->i_state_flags = 0;
1952}
1953#else
1954EXT4_INODE_BIT_FNS(state, flags, 32)
1955
1956static inline void ext4_clear_state_flags(struct ext4_inode_info *ei)
1957{
1958 /* We depend on the fact that callers will set i_flags */
1959}
1960#endif
ac27a0ec 1961#else
617ba13b 1962/* Assume that user mode programs are passing in an ext4fs superblock, not
ac27a0ec
DK
1963 * a kernel struct super_block. This will allow us to call the feature-test
1964 * macros from user land. */
617ba13b 1965#define EXT4_SB(sb) (sb)
ac27a0ec
DK
1966#endif
1967
c93d8f88
EB
1968static inline bool ext4_verity_in_progress(struct inode *inode)
1969{
1970 return IS_ENABLED(CONFIG_FS_VERITY) &&
1971 ext4_test_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
1972}
1973
617ba13b 1974#define NEXT_ORPHAN(inode) EXT4_I(inode)->i_dtime
ac27a0ec
DK
1975
1976/*
1977 * Codes for operating systems
1978 */
617ba13b
MC
1979#define EXT4_OS_LINUX 0
1980#define EXT4_OS_HURD 1
1981#define EXT4_OS_MASIX 2
1982#define EXT4_OS_FREEBSD 3
1983#define EXT4_OS_LITES 4
ac27a0ec
DK
1984
1985/*
1986 * Revision levels
1987 */
617ba13b
MC
1988#define EXT4_GOOD_OLD_REV 0 /* The good old (original) format */
1989#define EXT4_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
ac27a0ec 1990
617ba13b 1991#define EXT4_MAX_SUPP_REV EXT4_DYNAMIC_REV
ac27a0ec 1992
617ba13b 1993#define EXT4_GOOD_OLD_INODE_SIZE 128
ac27a0ec 1994
4881c497
DD
1995#define EXT4_EXTRA_TIMESTAMP_MAX (((s64)1 << 34) - 1 + S32_MIN)
1996#define EXT4_NON_EXTRA_TIMESTAMP_MAX S32_MAX
1997#define EXT4_TIMESTAMP_MIN S32_MIN
1998
ac27a0ec
DK
1999/*
2000 * Feature set definitions
2001 */
2002
617ba13b
MC
2003#define EXT4_FEATURE_COMPAT_DIR_PREALLOC 0x0001
2004#define EXT4_FEATURE_COMPAT_IMAGIC_INODES 0x0002
2005#define EXT4_FEATURE_COMPAT_HAS_JOURNAL 0x0004
2006#define EXT4_FEATURE_COMPAT_EXT_ATTR 0x0008
2007#define EXT4_FEATURE_COMPAT_RESIZE_INODE 0x0010
2008#define EXT4_FEATURE_COMPAT_DIR_INDEX 0x0020
1beeef1b 2009#define EXT4_FEATURE_COMPAT_SPARSE_SUPER2 0x0200
a44ad683
HS
2010/*
2011 * The reason why "FAST_COMMIT" is a compat feature is that, FS becomes
2012 * incompatible only if fast commit blocks are present in the FS. Since we
2013 * clear the journal (and thus the fast commit blocks), we don't mark FS as
2014 * incompatible. We also have a JBD2 incompat feature, which gets set when
2015 * there are fast commit blocks present in the journal.
2016 */
995a3ed6 2017#define EXT4_FEATURE_COMPAT_FAST_COMMIT 0x0400
b925acb8 2018#define EXT4_FEATURE_COMPAT_STABLE_INODES 0x0800
02f310fc 2019#define EXT4_FEATURE_COMPAT_ORPHAN_FILE 0x1000 /* Orphan file exists */
617ba13b
MC
2020
2021#define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
2022#define EXT4_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
2023#define EXT4_FEATURE_RO_COMPAT_BTREE_DIR 0x0004
0fc1b451 2024#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008
717d50e4 2025#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010
f8628a14 2026#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
ef7f3835 2027#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040
ae812306 2028#define EXT4_FEATURE_RO_COMPAT_QUOTA 0x0100
281b5995 2029#define EXT4_FEATURE_RO_COMPAT_BIGALLOC 0x0200
e6153918
DW
2030/*
2031 * METADATA_CSUM also enables group descriptor checksums (GDT_CSUM). When
2032 * METADATA_CSUM is set, group descriptor checksums use the same algorithm as
2033 * all other data structures' checksums. However, the METADATA_CSUM and
2034 * GDT_CSUM bits are mutually exclusive.
2035 */
9b90e5e0 2036#define EXT4_FEATURE_RO_COMPAT_METADATA_CSUM 0x0400
2cb5cc8b 2037#define EXT4_FEATURE_RO_COMPAT_READONLY 0x1000
8b4953e1 2038#define EXT4_FEATURE_RO_COMPAT_PROJECT 0x2000
c93d8f88 2039#define EXT4_FEATURE_RO_COMPAT_VERITY 0x8000
02f310fc
JK
2040#define EXT4_FEATURE_RO_COMPAT_ORPHAN_PRESENT 0x10000 /* Orphan file may be
2041 non-empty */
617ba13b
MC
2042
2043#define EXT4_FEATURE_INCOMPAT_COMPRESSION 0x0001
2044#define EXT4_FEATURE_INCOMPAT_FILETYPE 0x0002
2045#define EXT4_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */
2046#define EXT4_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */
2047#define EXT4_FEATURE_INCOMPAT_META_BG 0x0010
a86c6181 2048#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */
bd81d8ee 2049#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
0fc1b451 2050#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
ce421581 2051#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
f710b4b9
TT
2052#define EXT4_FEATURE_INCOMPAT_EA_INODE 0x0400 /* EA in inode */
2053#define EXT4_FEATURE_INCOMPAT_DIRDATA 0x1000 /* data in dirent */
8c81bd8f 2054#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
9b90e5e0 2055#define EXT4_FEATURE_INCOMPAT_LARGEDIR 0x4000 /* >2GB or 3-lvl htree */
67cf5b09 2056#define EXT4_FEATURE_INCOMPAT_INLINE_DATA 0x8000 /* data in inode */
3edc18d8 2057#define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
c83ad55e 2058#define EXT4_FEATURE_INCOMPAT_CASEFOLD 0x20000
617ba13b 2059
c9e716eb
AD
2060extern void ext4_update_dynamic_rev(struct super_block *sb);
2061
e2b911c5
DW
2062#define EXT4_FEATURE_COMPAT_FUNCS(name, flagname) \
2063static inline bool ext4_has_feature_##name(struct super_block *sb) \
2064{ \
2065 return ((EXT4_SB(sb)->s_es->s_feature_compat & \
2066 cpu_to_le32(EXT4_FEATURE_COMPAT_##flagname)) != 0); \
2067} \
2068static inline void ext4_set_feature_##name(struct super_block *sb) \
2069{ \
c9e716eb 2070 ext4_update_dynamic_rev(sb); \
e2b911c5
DW
2071 EXT4_SB(sb)->s_es->s_feature_compat |= \
2072 cpu_to_le32(EXT4_FEATURE_COMPAT_##flagname); \
2073} \
2074static inline void ext4_clear_feature_##name(struct super_block *sb) \
2075{ \
2076 EXT4_SB(sb)->s_es->s_feature_compat &= \
2077 ~cpu_to_le32(EXT4_FEATURE_COMPAT_##flagname); \
2078}
2079
2080#define EXT4_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
2081static inline bool ext4_has_feature_##name(struct super_block *sb) \
2082{ \
2083 return ((EXT4_SB(sb)->s_es->s_feature_ro_compat & \
2084 cpu_to_le32(EXT4_FEATURE_RO_COMPAT_##flagname)) != 0); \
2085} \
2086static inline void ext4_set_feature_##name(struct super_block *sb) \
2087{ \
c9e716eb 2088 ext4_update_dynamic_rev(sb); \
e2b911c5
DW
2089 EXT4_SB(sb)->s_es->s_feature_ro_compat |= \
2090 cpu_to_le32(EXT4_FEATURE_RO_COMPAT_##flagname); \
2091} \
2092static inline void ext4_clear_feature_##name(struct super_block *sb) \
2093{ \
2094 EXT4_SB(sb)->s_es->s_feature_ro_compat &= \
2095 ~cpu_to_le32(EXT4_FEATURE_RO_COMPAT_##flagname); \
2096}
2097
2098#define EXT4_FEATURE_INCOMPAT_FUNCS(name, flagname) \
2099static inline bool ext4_has_feature_##name(struct super_block *sb) \
2100{ \
2101 return ((EXT4_SB(sb)->s_es->s_feature_incompat & \
2102 cpu_to_le32(EXT4_FEATURE_INCOMPAT_##flagname)) != 0); \
2103} \
2104static inline void ext4_set_feature_##name(struct super_block *sb) \
2105{ \
c9e716eb 2106 ext4_update_dynamic_rev(sb); \
e2b911c5
DW
2107 EXT4_SB(sb)->s_es->s_feature_incompat |= \
2108 cpu_to_le32(EXT4_FEATURE_INCOMPAT_##flagname); \
2109} \
2110static inline void ext4_clear_feature_##name(struct super_block *sb) \
2111{ \
2112 EXT4_SB(sb)->s_es->s_feature_incompat &= \
2113 ~cpu_to_le32(EXT4_FEATURE_INCOMPAT_##flagname); \
2114}
2115
2116EXT4_FEATURE_COMPAT_FUNCS(dir_prealloc, DIR_PREALLOC)
2117EXT4_FEATURE_COMPAT_FUNCS(imagic_inodes, IMAGIC_INODES)
2118EXT4_FEATURE_COMPAT_FUNCS(journal, HAS_JOURNAL)
2119EXT4_FEATURE_COMPAT_FUNCS(xattr, EXT_ATTR)
2120EXT4_FEATURE_COMPAT_FUNCS(resize_inode, RESIZE_INODE)
2121EXT4_FEATURE_COMPAT_FUNCS(dir_index, DIR_INDEX)
2122EXT4_FEATURE_COMPAT_FUNCS(sparse_super2, SPARSE_SUPER2)
995a3ed6 2123EXT4_FEATURE_COMPAT_FUNCS(fast_commit, FAST_COMMIT)
b925acb8 2124EXT4_FEATURE_COMPAT_FUNCS(stable_inodes, STABLE_INODES)
02f310fc 2125EXT4_FEATURE_COMPAT_FUNCS(orphan_file, ORPHAN_FILE)
e2b911c5
DW
2126
2127EXT4_FEATURE_RO_COMPAT_FUNCS(sparse_super, SPARSE_SUPER)
2128EXT4_FEATURE_RO_COMPAT_FUNCS(large_file, LARGE_FILE)
2129EXT4_FEATURE_RO_COMPAT_FUNCS(btree_dir, BTREE_DIR)
2130EXT4_FEATURE_RO_COMPAT_FUNCS(huge_file, HUGE_FILE)
2131EXT4_FEATURE_RO_COMPAT_FUNCS(gdt_csum, GDT_CSUM)
2132EXT4_FEATURE_RO_COMPAT_FUNCS(dir_nlink, DIR_NLINK)
2133EXT4_FEATURE_RO_COMPAT_FUNCS(extra_isize, EXTRA_ISIZE)
2134EXT4_FEATURE_RO_COMPAT_FUNCS(quota, QUOTA)
2135EXT4_FEATURE_RO_COMPAT_FUNCS(bigalloc, BIGALLOC)
2136EXT4_FEATURE_RO_COMPAT_FUNCS(metadata_csum, METADATA_CSUM)
2137EXT4_FEATURE_RO_COMPAT_FUNCS(readonly, READONLY)
2138EXT4_FEATURE_RO_COMPAT_FUNCS(project, PROJECT)
c93d8f88 2139EXT4_FEATURE_RO_COMPAT_FUNCS(verity, VERITY)
02f310fc 2140EXT4_FEATURE_RO_COMPAT_FUNCS(orphan_present, ORPHAN_PRESENT)
e2b911c5
DW
2141
2142EXT4_FEATURE_INCOMPAT_FUNCS(compression, COMPRESSION)
2143EXT4_FEATURE_INCOMPAT_FUNCS(filetype, FILETYPE)
2144EXT4_FEATURE_INCOMPAT_FUNCS(journal_needs_recovery, RECOVER)
2145EXT4_FEATURE_INCOMPAT_FUNCS(journal_dev, JOURNAL_DEV)
2146EXT4_FEATURE_INCOMPAT_FUNCS(meta_bg, META_BG)
2147EXT4_FEATURE_INCOMPAT_FUNCS(extents, EXTENTS)
2148EXT4_FEATURE_INCOMPAT_FUNCS(64bit, 64BIT)
2149EXT4_FEATURE_INCOMPAT_FUNCS(mmp, MMP)
2150EXT4_FEATURE_INCOMPAT_FUNCS(flex_bg, FLEX_BG)
2151EXT4_FEATURE_INCOMPAT_FUNCS(ea_inode, EA_INODE)
2152EXT4_FEATURE_INCOMPAT_FUNCS(dirdata, DIRDATA)
2153EXT4_FEATURE_INCOMPAT_FUNCS(csum_seed, CSUM_SEED)
2154EXT4_FEATURE_INCOMPAT_FUNCS(largedir, LARGEDIR)
2155EXT4_FEATURE_INCOMPAT_FUNCS(inline_data, INLINE_DATA)
2156EXT4_FEATURE_INCOMPAT_FUNCS(encrypt, ENCRYPT)
c83ad55e 2157EXT4_FEATURE_INCOMPAT_FUNCS(casefold, CASEFOLD)
e2b911c5 2158
2035e776
TT
2159#define EXT2_FEATURE_COMPAT_SUPP EXT4_FEATURE_COMPAT_EXT_ATTR
2160#define EXT2_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \
2161 EXT4_FEATURE_INCOMPAT_META_BG)
2162#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
2163 EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
2164 EXT4_FEATURE_RO_COMPAT_BTREE_DIR)
2165
2166#define EXT3_FEATURE_COMPAT_SUPP EXT4_FEATURE_COMPAT_EXT_ATTR
2167#define EXT3_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \
2168 EXT4_FEATURE_INCOMPAT_RECOVER| \
2169 EXT4_FEATURE_INCOMPAT_META_BG)
2170#define EXT3_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
2171 EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
2172 EXT4_FEATURE_RO_COMPAT_BTREE_DIR)
2173
02f310fc
JK
2174#define EXT4_FEATURE_COMPAT_SUPP (EXT4_FEATURE_COMPAT_EXT_ATTR| \
2175 EXT4_FEATURE_COMPAT_ORPHAN_FILE)
617ba13b
MC
2176#define EXT4_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \
2177 EXT4_FEATURE_INCOMPAT_RECOVER| \
a86c6181 2178 EXT4_FEATURE_INCOMPAT_META_BG| \
bd81d8ee 2179 EXT4_FEATURE_INCOMPAT_EXTENTS| \
ce421581 2180 EXT4_FEATURE_INCOMPAT_64BIT| \
c5e06d10 2181 EXT4_FEATURE_INCOMPAT_FLEX_BG| \
e50e5129 2182 EXT4_FEATURE_INCOMPAT_EA_INODE| \
6ddb2447
TT
2183 EXT4_FEATURE_INCOMPAT_MMP | \
2184 EXT4_FEATURE_INCOMPAT_INLINE_DATA | \
8c81bd8f 2185 EXT4_FEATURE_INCOMPAT_ENCRYPT | \
c83ad55e 2186 EXT4_FEATURE_INCOMPAT_CASEFOLD | \
e08ac99f
AB
2187 EXT4_FEATURE_INCOMPAT_CSUM_SEED | \
2188 EXT4_FEATURE_INCOMPAT_LARGEDIR)
617ba13b
MC
2189#define EXT4_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
2190 EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
717d50e4 2191 EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \
f8628a14 2192 EXT4_FEATURE_RO_COMPAT_DIR_NLINK | \
ef7f3835 2193 EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE | \
0fc1b451 2194 EXT4_FEATURE_RO_COMPAT_BTREE_DIR |\
6f16b606 2195 EXT4_FEATURE_RO_COMPAT_HUGE_FILE |\
e93376c2 2196 EXT4_FEATURE_RO_COMPAT_BIGALLOC |\
7c319d32 2197 EXT4_FEATURE_RO_COMPAT_METADATA_CSUM|\
040cb378 2198 EXT4_FEATURE_RO_COMPAT_QUOTA |\
c93d8f88 2199 EXT4_FEATURE_RO_COMPAT_PROJECT |\
02f310fc
JK
2200 EXT4_FEATURE_RO_COMPAT_VERITY |\
2201 EXT4_FEATURE_RO_COMPAT_ORPHAN_PRESENT)
ac27a0ec 2202
e2b911c5
DW
2203#define EXTN_FEATURE_FUNCS(ver) \
2204static inline bool ext4_has_unknown_ext##ver##_compat_features(struct super_block *sb) \
2205{ \
2206 return ((EXT4_SB(sb)->s_es->s_feature_compat & \
2207 cpu_to_le32(~EXT##ver##_FEATURE_COMPAT_SUPP)) != 0); \
2208} \
2209static inline bool ext4_has_unknown_ext##ver##_ro_compat_features(struct super_block *sb) \
2210{ \
2211 return ((EXT4_SB(sb)->s_es->s_feature_ro_compat & \
2212 cpu_to_le32(~EXT##ver##_FEATURE_RO_COMPAT_SUPP)) != 0); \
2213} \
2214static inline bool ext4_has_unknown_ext##ver##_incompat_features(struct super_block *sb) \
2215{ \
2216 return ((EXT4_SB(sb)->s_es->s_feature_incompat & \
2217 cpu_to_le32(~EXT##ver##_FEATURE_INCOMPAT_SUPP)) != 0); \
2218}
2219
2220EXTN_FEATURE_FUNCS(2)
2221EXTN_FEATURE_FUNCS(3)
2222EXTN_FEATURE_FUNCS(4)
2223
2224static inline bool ext4_has_compat_features(struct super_block *sb)
2225{
2226 return (EXT4_SB(sb)->s_es->s_feature_compat != 0);
2227}
2228static inline bool ext4_has_ro_compat_features(struct super_block *sb)
2229{
2230 return (EXT4_SB(sb)->s_es->s_feature_ro_compat != 0);
2231}
2232static inline bool ext4_has_incompat_features(struct super_block *sb)
2233{
2234 return (EXT4_SB(sb)->s_es->s_feature_incompat != 0);
2235}
2236
25c6d98f
JK
2237extern int ext4_feature_set_ok(struct super_block *sb, int readonly);
2238
9549a168
TT
2239/*
2240 * Superblock flags
2241 */
2242#define EXT4_FLAGS_RESIZING 0
0db1ff22 2243#define EXT4_FLAGS_SHUTDOWN 1
a8ab6d38 2244#define EXT4_FLAGS_BDEV_IS_DAX 2
0db1ff22 2245
eb8ab444 2246static inline int ext4_forced_shutdown(struct super_block *sb)
0db1ff22 2247{
eb8ab444 2248 return test_bit(EXT4_FLAGS_SHUTDOWN, &EXT4_SB(sb)->s_ext4_flags);
0db1ff22 2249}
9549a168 2250
ac27a0ec
DK
2251/*
2252 * Default values for user and/or group using reserved blocks
2253 */
617ba13b
MC
2254#define EXT4_DEF_RESUID 0
2255#define EXT4_DEF_RESGID 0
ac27a0ec 2256
040cb378
LX
2257/*
2258 * Default project ID
2259 */
2260#define EXT4_DEF_PROJID 0
2261
240799cd
TT
2262#define EXT4_DEF_INODE_READAHEAD_BLKS 32
2263
ac27a0ec
DK
2264/*
2265 * Default mount options
2266 */
617ba13b
MC
2267#define EXT4_DEFM_DEBUG 0x0001
2268#define EXT4_DEFM_BSDGROUPS 0x0002
2269#define EXT4_DEFM_XATTR_USER 0x0004
2270#define EXT4_DEFM_ACL 0x0008
2271#define EXT4_DEFM_UID16 0x0010
2272#define EXT4_DEFM_JMODE 0x0060
2273#define EXT4_DEFM_JMODE_DATA 0x0020
2274#define EXT4_DEFM_JMODE_ORDERED 0x0040
2275#define EXT4_DEFM_JMODE_WBACK 0x0060
8b67f04a
TT
2276#define EXT4_DEFM_NOBARRIER 0x0100
2277#define EXT4_DEFM_BLOCK_VALIDITY 0x0200
2278#define EXT4_DEFM_DISCARD 0x0400
2279#define EXT4_DEFM_NODELALLOC 0x0800
ac27a0ec 2280
30773840
TT
2281/*
2282 * Default journal batch times
2283 */
2284#define EXT4_DEF_MIN_BATCH_TIME 0
2285#define EXT4_DEF_MAX_BATCH_TIME 15000 /* 15ms */
2286
a4912123
TT
2287/*
2288 * Minimum number of groups in a flexgroup before we separate out
2289 * directories into the first block group of a flexgroup
2290 */
2291#define EXT4_FLEX_SIZE_DIR_ALLOC_SCHEME 4
2292
ac27a0ec
DK
2293/*
2294 * Structure of a directory entry
2295 */
617ba13b 2296#define EXT4_NAME_LEN 255
c186f088
YB
2297/*
2298 * Base length of the ext4 directory entry excluding the name length
2299 */
2300#define EXT4_BASE_DIR_LEN (sizeof(struct ext4_dir_entry_2) - EXT4_NAME_LEN)
ac27a0ec 2301
617ba13b 2302struct ext4_dir_entry {
ac27a0ec
DK
2303 __le32 inode; /* Inode number */
2304 __le16 rec_len; /* Directory entry length */
2305 __le16 name_len; /* Name length */
617ba13b 2306 char name[EXT4_NAME_LEN]; /* File name */
ac27a0ec
DK
2307};
2308
471fbbea
DR
2309
2310/*
2311 * Encrypted Casefolded entries require saving the hash on disk. This structure
2312 * followed ext4_dir_entry_2's name[name_len] at the next 4 byte aligned
2313 * boundary.
2314 */
2315struct ext4_dir_entry_hash {
2316 __le32 hash;
2317 __le32 minor_hash;
2318};
2319
ac27a0ec 2320/*
617ba13b 2321 * The new version of the directory entry. Since EXT4 structures are
ac27a0ec
DK
2322 * stored in intel byte order, and the name_len field could never be
2323 * bigger than 255 chars, it's safe to reclaim the extra byte for the
2324 * file_type field.
2325 */
617ba13b 2326struct ext4_dir_entry_2 {
ac27a0ec
DK
2327 __le32 inode; /* Inode number */
2328 __le16 rec_len; /* Directory entry length */
2329 __u8 name_len; /* Name length */
9f364e1d 2330 __u8 file_type; /* See file type macros EXT4_FT_* below */
617ba13b 2331 char name[EXT4_NAME_LEN]; /* File name */
ac27a0ec
DK
2332};
2333
471fbbea
DR
2334/*
2335 * Access the hashes at the end of ext4_dir_entry_2
2336 */
2337#define EXT4_DIRENT_HASHES(entry) \
2338 ((struct ext4_dir_entry_hash *) \
2339 (((void *)(entry)) + \
2340 ((8 + (entry)->name_len + EXT4_DIR_ROUND) & ~EXT4_DIR_ROUND)))
2341#define EXT4_DIRENT_HASH(entry) le32_to_cpu(EXT4_DIRENT_HASHES(de)->hash)
2342#define EXT4_DIRENT_MINOR_HASH(entry) \
2343 le32_to_cpu(EXT4_DIRENT_HASHES(de)->minor_hash)
2344
2345static inline bool ext4_hash_in_dirent(const struct inode *inode)
2346{
2347 return IS_CASEFOLDED(inode) && IS_ENCRYPTED(inode);
2348}
2349
e6153918
DW
2350/*
2351 * This is a bogus directory entry at the end of each leaf block that
2352 * records checksums.
2353 */
2354struct ext4_dir_entry_tail {
2355 __le32 det_reserved_zero1; /* Pretend to be unused */
2356 __le16 det_rec_len; /* 12 */
2357 __u8 det_reserved_zero2; /* Zero name length */
2358 __u8 det_reserved_ft; /* 0xDE, fake file type */
2359 __le32 det_checksum; /* crc32c(uuid+inum+dirblock) */
2360};
2361
3c47d541
TM
2362#define EXT4_DIRENT_TAIL(block, blocksize) \
2363 ((struct ext4_dir_entry_tail *)(((void *)(block)) + \
2364 ((blocksize) - \
2365 sizeof(struct ext4_dir_entry_tail))))
2366
ac27a0ec 2367/*
617ba13b 2368 * Ext4 directory file types. Only the low 3 bits are used. The
ac27a0ec
DK
2369 * other bits are reserved for now.
2370 */
617ba13b
MC
2371#define EXT4_FT_UNKNOWN 0
2372#define EXT4_FT_REG_FILE 1
2373#define EXT4_FT_DIR 2
2374#define EXT4_FT_CHRDEV 3
2375#define EXT4_FT_BLKDEV 4
2376#define EXT4_FT_FIFO 5
2377#define EXT4_FT_SOCK 6
2378#define EXT4_FT_SYMLINK 7
ac27a0ec 2379
617ba13b 2380#define EXT4_FT_MAX 8
ac27a0ec 2381
e6153918
DW
2382#define EXT4_FT_DIR_CSUM 0xDE
2383
ac27a0ec 2384/*
617ba13b 2385 * EXT4_DIR_PAD defines the directory entries boundaries
ac27a0ec
DK
2386 *
2387 * NOTE: It must be a multiple of 4
2388 */
617ba13b
MC
2389#define EXT4_DIR_PAD 4
2390#define EXT4_DIR_ROUND (EXT4_DIR_PAD - 1)
a72d7f83
JK
2391#define EXT4_MAX_REC_LEN ((1<<16)-1)
2392
471fbbea
DR
2393/*
2394 * The rec_len is dependent on the type of directory. Directories that are
2395 * casefolded and encrypted need to store the hash as well, so we add room for
2396 * ext4_extended_dir_entry_2. For all entries related to '.' or '..' you should
2397 * pass NULL for dir, as those entries do not use the extra fields.
2398 */
2399static inline unsigned int ext4_dir_rec_len(__u8 name_len,
2400 const struct inode *dir)
2401{
2402 int rec_len = (name_len + 8 + EXT4_DIR_ROUND);
2403
2404 if (dir && ext4_hash_in_dirent(dir))
2405 rec_len += sizeof(struct ext4_dir_entry_hash);
2406 return (rec_len & ~EXT4_DIR_ROUND);
2407}
2408
0cfc9255
ES
2409/*
2410 * If we ever get support for fs block sizes > page_size, we'll need
2411 * to remove the #if statements in the next two functions...
2412 */
2413static inline unsigned int
2414ext4_rec_len_from_disk(__le16 dlen, unsigned blocksize)
2415{
2416 unsigned len = le16_to_cpu(dlen);
2417
ea1754a0 2418#if (PAGE_SIZE >= 65536)
0cfc9255
ES
2419 if (len == EXT4_MAX_REC_LEN || len == 0)
2420 return blocksize;
2421 return (len & 65532) | ((len & 3) << 16);
2422#else
2423 return len;
2424#endif
2425}
2426
2427static inline __le16 ext4_rec_len_to_disk(unsigned len, unsigned blocksize)
2428{
a2e3965d 2429 BUG_ON((len > blocksize) || (blocksize > (1 << 18)) || (len & 3));
ea1754a0 2430#if (PAGE_SIZE >= 65536)
0cfc9255
ES
2431 if (len < 65536)
2432 return cpu_to_le16(len);
2433 if (len == blocksize) {
2434 if (blocksize == 65536)
2435 return cpu_to_le16(EXT4_MAX_REC_LEN);
2436 else
2437 return cpu_to_le16(0);
2438 }
2439 return cpu_to_le16((len & 65532) | ((len >> 16) & 3));
2440#else
2441 return cpu_to_le16(len);
2442#endif
2443}
2444
ac27a0ec
DK
2445/*
2446 * Hash Tree Directory indexing
2447 * (c) Daniel Phillips, 2001
2448 */
2449
e2b911c5 2450#define is_dx(dir) (ext4_has_feature_dir_index((dir)->i_sb) && \
12e9b892 2451 ext4_test_inode_flag((dir), EXT4_INODE_INDEX))
c7414892
AD
2452#define EXT4_DIR_LINK_MAX(dir) unlikely((dir)->i_nlink >= EXT4_LINK_MAX && \
2453 !(ext4_has_feature_dir_nlink((dir)->i_sb) && is_dx(dir)))
617ba13b 2454#define EXT4_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1)
ac27a0ec
DK
2455
2456/* Legal values for the dx_root hash_version field: */
2457
e7093f0d
PK
2458#define DX_HASH_LEGACY 0
2459#define DX_HASH_HALF_MD4 1
2460#define DX_HASH_TEA 2
2461#define DX_HASH_LEGACY_UNSIGNED 3
f99b2589
TT
2462#define DX_HASH_HALF_MD4_UNSIGNED 4
2463#define DX_HASH_TEA_UNSIGNED 5
471fbbea 2464#define DX_HASH_SIPHASH 6
ac27a0ec 2465
0441984a
DW
2466static inline u32 ext4_chksum(struct ext4_sb_info *sbi, u32 crc,
2467 const void *address, unsigned int length)
2468{
2469 struct {
2470 struct shash_desc shash;
3108b54b 2471 char ctx[4];
0441984a 2472 } desc;
0441984a 2473
3108b54b
TT
2474 BUG_ON(crypto_shash_descsize(sbi->s_chksum_driver)!=sizeof(desc.ctx));
2475
0441984a 2476 desc.shash.tfm = sbi->s_chksum_driver;
0441984a
DW
2477 *(u32 *)desc.ctx = crc;
2478
e7093f0d 2479 BUG_ON(crypto_shash_update(&desc.shash, address, length));
0441984a
DW
2480
2481 return *(u32 *)desc.ctx;
2482}
2483
ac27a0ec
DK
2484#ifdef __KERNEL__
2485
2486/* hash info structure used by the directory hash */
2487struct dx_hash_info
2488{
2489 u32 hash;
2490 u32 minor_hash;
2491 int hash_version;
2492 u32 *seed;
2493};
2494
d1f5273e
FY
2495
2496/* 32 and 64 bit signed EOF for dx directories */
2497#define EXT4_HTREE_EOF_32BIT ((1UL << (32 - 1)) - 1)
2498#define EXT4_HTREE_EOF_64BIT ((1ULL << (64 - 1)) - 1)
2499
ac27a0ec
DK
2500
2501/*
617ba13b 2502 * Control parameters used by ext4_htree_next_block
ac27a0ec
DK
2503 */
2504#define HASH_NB_ALWAYS 1
2505
5b643f9c
TT
2506struct ext4_filename {
2507 const struct qstr *usr_fname;
a7550b30 2508 struct fscrypt_str disk_name;
5b643f9c 2509 struct dx_hash_info hinfo;
643fa961 2510#ifdef CONFIG_FS_ENCRYPTION
a7550b30 2511 struct fscrypt_str crypto_buf;
5b643f9c 2512#endif
5298d4bf 2513#if IS_ENABLED(CONFIG_UNICODE)
3ae72562
GKB
2514 struct fscrypt_str cf_name;
2515#endif
5b643f9c
TT
2516};
2517
2518#define fname_name(p) ((p)->disk_name.name)
471fbbea 2519#define fname_usr_name(p) ((p)->usr_fname->name)
5b643f9c 2520#define fname_len(p) ((p)->disk_name.len)
ac27a0ec
DK
2521
2522/*
2523 * Describe an inode's exact location on disk and in memory
2524 */
617ba13b 2525struct ext4_iloc
ac27a0ec
DK
2526{
2527 struct buffer_head *bh;
2528 unsigned long offset;
fd2d4291 2529 ext4_group_t block_group;
ac27a0ec
DK
2530};
2531
617ba13b 2532static inline struct ext4_inode *ext4_raw_inode(struct ext4_iloc *iloc)
ac27a0ec 2533{
617ba13b 2534 return (struct ext4_inode *) (iloc->bh->b_data + iloc->offset);
ac27a0ec
DK
2535}
2536
dec214d0
TE
2537static inline bool ext4_is_quota_file(struct inode *inode)
2538{
2539 return IS_NOQUOTA(inode) &&
2540 !(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL);
2541}
02749a4c 2542
ac27a0ec
DK
2543/*
2544 * This structure is stuffed into the struct file's private_data field
2545 * for directories. It is where we put information so that we can do
2546 * readdir operations in hash tree order.
2547 */
2548struct dir_private_info {
2549 struct rb_root root;
2550 struct rb_node *curr_node;
2551 struct fname *extra_fname;
2552 loff_t last_pos;
2553 __u32 curr_hash;
2554 __u32 curr_minor_hash;
2555 __u32 next_hash;
2556};
2557
2558/* calculate the first block number of the group */
617ba13b 2559static inline ext4_fsblk_t
fd2d4291 2560ext4_group_first_block_no(struct super_block *sb, ext4_group_t group_no)
ac27a0ec 2561{
617ba13b
MC
2562 return group_no * (ext4_fsblk_t)EXT4_BLOCKS_PER_GROUP(sb) +
2563 le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block);
ac27a0ec
DK
2564}
2565
2566/*
2567 * Special error return code only used by dx_probe() and its callers.
2568 */
36de9286 2569#define ERR_BAD_DX_DIR (-(MAX_ERRNO - 1))
ac27a0ec 2570
e08ac99f
AB
2571/* htree levels for ext4 */
2572#define EXT4_HTREE_LEVEL_COMPAT 2
2573#define EXT4_HTREE_LEVEL 3
2574
2575static inline int ext4_dir_htree_level(struct super_block *sb)
2576{
2577 return ext4_has_feature_largedir(sb) ?
2578 EXT4_HTREE_LEVEL : EXT4_HTREE_LEVEL_COMPAT;
2579}
2580
bfff6873
LC
2581/*
2582 * Timeout and state flag for lazy initialization inode thread.
2583 */
2584#define EXT4_DEF_LI_WAIT_MULT 10
2585#define EXT4_DEF_LI_MAX_START_DELAY 5
2586#define EXT4_LAZYINIT_QUIT 0x0001
2587#define EXT4_LAZYINIT_RUNNING 0x0002
2588
2589/*
2590 * Lazy inode table initialization info
2591 */
2592struct ext4_lazy_init {
2593 unsigned long li_state;
bfff6873
LC
2594 struct list_head li_request_list;
2595 struct mutex li_list_mtx;
2596};
2597
3d392b26
TT
2598enum ext4_li_mode {
2599 EXT4_LI_MODE_PREFETCH_BBITMAP,
2600 EXT4_LI_MODE_ITABLE,
2601};
2602
bfff6873
LC
2603struct ext4_li_request {
2604 struct super_block *lr_super;
3d392b26
TT
2605 enum ext4_li_mode lr_mode;
2606 ext4_group_t lr_first_not_zeroed;
bfff6873
LC
2607 ext4_group_t lr_next_group;
2608 struct list_head lr_request;
2609 unsigned long lr_next_sched;
2610 unsigned long lr_timeout;
2611};
2612
857ac889
LC
2613struct ext4_features {
2614 struct kobject f_kobj;
2615 struct completion f_kobj_unregister;
2616};
2617
c5e06d10
JL
2618/*
2619 * This structure will be used for multiple mount protection. It will be
2620 * written into the block number saved in the s_mmp_block field in the
2621 * superblock. Programs that check MMP should assume that if
2622 * SEQ_FSCK (or any unknown code above SEQ_MAX) is present then it is NOT safe
2623 * to use the filesystem, regardless of how old the timestamp is.
2624 */
2625#define EXT4_MMP_MAGIC 0x004D4D50U /* ASCII for MMP */
2626#define EXT4_MMP_SEQ_CLEAN 0xFF4D4D50U /* mmp_seq value for clean unmount */
2627#define EXT4_MMP_SEQ_FSCK 0xE24D4D50U /* mmp_seq value when being fscked */
2628#define EXT4_MMP_SEQ_MAX 0xE24D4D4FU /* maximum valid mmp_seq value */
2629
2630struct mmp_struct {
2631 __le32 mmp_magic; /* Magic number for MMP */
2632 __le32 mmp_seq; /* Sequence no. updated periodically */
2633
2634 /*
2635 * mmp_time, mmp_nodename & mmp_bdevname are only used for information
2636 * purposes and do not affect the correctness of the algorithm
2637 */
2638 __le64 mmp_time; /* Time last updated */
2639 char mmp_nodename[64]; /* Node which last updated MMP block */
2640 char mmp_bdevname[32]; /* Bdev which last updated MMP block */
2641
2642 /*
2643 * mmp_check_interval is used to verify if the MMP block has been
2644 * updated on the block device. The value is updated based on the
2645 * maximum time to write the MMP block during an update cycle.
2646 */
2647 __le16 mmp_check_interval;
2648
2649 __le16 mmp_pad1;
e6153918
DW
2650 __le32 mmp_pad2[226];
2651 __le32 mmp_checksum; /* crc32c(uuid+mmp_block) */
c5e06d10
JL
2652};
2653
2654/* arguments passed to the mmp thread */
2655struct mmpd_data {
2656 struct buffer_head *bh; /* bh from initial read_mmp_block() */
2657 struct super_block *sb; /* super block of the fs */
2658};
2659
2660/*
2661 * Check interval multiplier
2662 * The MMP block is written every update interval and initially checked every
2663 * update interval x the multiplier (the value is then adapted based on the
2664 * write latency). The reason is that writes can be delayed under load and we
2665 * don't want readers to incorrectly assume that the filesystem is no longer
2666 * in use.
2667 */
2668#define EXT4_MMP_CHECK_MULT 2UL
2669
2670/*
2671 * Minimum interval for MMP checking in seconds.
2672 */
2673#define EXT4_MMP_MIN_CHECK_INTERVAL 5UL
2674
2675/*
2676 * Maximum interval for MMP checking in seconds.
2677 */
2678#define EXT4_MMP_MAX_CHECK_INTERVAL 300UL
2679
ac27a0ec
DK
2680/*
2681 * Function prototypes
2682 */
2683
2684/*
2685 * Ok, these declarations are also in <linux/kernel.h> but none of the
617ba13b 2686 * ext4 source programs needs to include it so they are duplicated here.
ac27a0ec 2687 */
8c55e204
DK
2688# define NORET_TYPE /**/
2689# define ATTRIB_NORET __attribute__((noreturn))
2690# define NORET_AND noreturn,
ac27a0ec 2691
498e5f24 2692/* bitmap.c */
f6fb99ca 2693extern unsigned int ext4_count_free(char *bitmap, unsigned numchars);
4fd873c8 2694void ext4_inode_bitmap_csum_set(struct super_block *sb,
41a246d1
DW
2695 struct ext4_group_desc *gdp,
2696 struct buffer_head *bh, int sz);
b83acc77 2697int ext4_inode_bitmap_csum_verify(struct super_block *sb,
41a246d1
DW
2698 struct ext4_group_desc *gdp,
2699 struct buffer_head *bh, int sz);
1df9bde4 2700void ext4_block_bitmap_csum_set(struct super_block *sb,
fa77dcfa 2701 struct ext4_group_desc *gdp,
79f1ba49 2702 struct buffer_head *bh);
82483dfe 2703int ext4_block_bitmap_csum_verify(struct super_block *sb,
fa77dcfa 2704 struct ext4_group_desc *gdp,
79f1ba49 2705 struct buffer_head *bh);
498e5f24 2706
ac27a0ec 2707/* balloc.c */
bd86298e
LC
2708extern void ext4_get_group_no_and_offset(struct super_block *sb,
2709 ext4_fsblk_t blocknr,
2710 ext4_group_t *blockgrpp,
2711 ext4_grpblk_t *offsetp);
2712extern ext4_group_t ext4_get_group_number(struct super_block *sb,
2713 ext4_fsblk_t block);
2714
fd2d4291
AM
2715extern int ext4_bg_has_super(struct super_block *sb, ext4_group_t group);
2716extern unsigned long ext4_bg_num_gdb(struct super_block *sb,
2717 ext4_group_t group);
7061eba7 2718extern ext4_fsblk_t ext4_new_meta_blocks(handle_t *handle, struct inode *inode,
55f020db
AH
2719 ext4_fsblk_t goal,
2720 unsigned int flags,
2721 unsigned long *count,
2722 int *errp);
e7d5f315
TT
2723extern int ext4_claim_free_clusters(struct ext4_sb_info *sbi,
2724 s64 nclusters, unsigned int flags);
5dee5437 2725extern ext4_fsblk_t ext4_count_free_clusters(struct super_block *);
617ba13b 2726extern struct ext4_group_desc * ext4_get_group_desc(struct super_block * sb,
fd2d4291 2727 ext4_group_t block_group,
ac27a0ec 2728 struct buffer_head ** bh);
5354b2af
TT
2729extern struct ext4_group_info *ext4_get_group_info(struct super_block *sb,
2730 ext4_group_t group);
617ba13b 2731extern int ext4_should_retry_alloc(struct super_block *sb, int *retries);
813e5727
TT
2732
2733extern struct buffer_head *ext4_read_block_bitmap_nowait(struct super_block *sb,
cfd73237
AZ
2734 ext4_group_t block_group,
2735 bool ignore_locked);
813e5727
TT
2736extern int ext4_wait_block_bitmap(struct super_block *sb,
2737 ext4_group_t block_group,
2738 struct buffer_head *bh);
2739extern struct buffer_head *ext4_read_block_bitmap(struct super_block *sb,
2740 ext4_group_t block_group);
cff1dfd7
TT
2741extern unsigned ext4_free_clusters_after_init(struct super_block *sb,
2742 ext4_group_t block_group,
2743 struct ext4_group_desc *gdp);
f86186b4 2744ext4_fsblk_t ext4_inode_to_goal_block(struct inode *);
ac27a0ec 2745
5298d4bf 2746#if IS_ENABLED(CONFIG_UNICODE)
1ae98e29 2747extern int ext4_fname_setup_ci_filename(struct inode *dir,
3ae72562 2748 const struct qstr *iname,
1ae98e29 2749 struct ext4_filename *fname);
3ae72562
GKB
2750#endif
2751
b1241c8e 2752/* ext4 encryption related stuff goes here crypto.c */
643fa961 2753#ifdef CONFIG_FS_ENCRYPTION
b1241c8e
RH
2754extern const struct fscrypt_operations ext4_cryptops;
2755
3030b59c
RH
2756int ext4_fname_setup_filename(struct inode *dir, const struct qstr *iname,
2757 int lookup, struct ext4_filename *fname);
d5d0e8c7 2758
3030b59c
RH
2759int ext4_fname_prepare_lookup(struct inode *dir, struct dentry *dentry,
2760 struct ext4_filename *fname);
b7236e21 2761
3030b59c 2762void ext4_fname_free_filename(struct ext4_filename *fname);
3ae72562 2763
72f63f4a
RH
2764int ext4_ioctl_get_encryption_pwsalt(struct file *filp, void __user *arg);
2765
b01531db 2766#else /* !CONFIG_FS_ENCRYPTION */
a7550b30 2767static inline int ext4_fname_setup_filename(struct inode *dir,
b01531db
EB
2768 const struct qstr *iname,
2769 int lookup,
2770 struct ext4_filename *fname)
b7236e21 2771{
1ae98e29 2772 int err = 0;
a7550b30
JK
2773 fname->usr_fname = iname;
2774 fname->disk_name.name = (unsigned char *) iname->name;
2775 fname->disk_name.len = iname->len;
3ae72562 2776
5298d4bf 2777#if IS_ENABLED(CONFIG_UNICODE)
1ae98e29 2778 err = ext4_fname_setup_ci_filename(dir, iname, fname);
3ae72562
GKB
2779#endif
2780
1ae98e29 2781 return err;
b7236e21 2782}
88bd6ccd 2783
b01531db
EB
2784static inline int ext4_fname_prepare_lookup(struct inode *dir,
2785 struct dentry *dentry,
2786 struct ext4_filename *fname)
2787{
2788 return ext4_fname_setup_filename(dir, &dentry->d_name, 1, fname);
2789}
2790
3ae72562
GKB
2791static inline void ext4_fname_free_filename(struct ext4_filename *fname)
2792{
5298d4bf 2793#if IS_ENABLED(CONFIG_UNICODE)
3ae72562
GKB
2794 kfree(fname->cf_name.name);
2795 fname->cf_name.name = NULL;
2796#endif
2797}
72f63f4a
RH
2798
2799static inline int ext4_ioctl_get_encryption_pwsalt(struct file *filp,
2800 void __user *arg)
2801{
2802 return -EOPNOTSUPP;
2803}
b01531db 2804#endif /* !CONFIG_FS_ENCRYPTION */
88bd6ccd 2805
ac27a0ec 2806/* dir.c */
60fd4da3 2807extern int __ext4_check_dir_entry(const char *, unsigned int, struct inode *,
f7c21177 2808 struct file *,
60fd4da3 2809 struct ext4_dir_entry_2 *,
226ba972
TM
2810 struct buffer_head *, char *, int,
2811 unsigned int);
471fbbea 2812#define ext4_check_dir_entry(dir, filp, de, bh, buf, size, offset) \
f7c21177 2813 unlikely(__ext4_check_dir_entry(__func__, __LINE__, (dir), (filp), \
471fbbea 2814 (de), (bh), (buf), (size), (offset)))
617ba13b 2815extern int ext4_htree_store_dirent(struct file *dir_file, __u32 hash,
2f61830a
TT
2816 __u32 minor_hash,
2817 struct ext4_dir_entry_2 *dirent,
a7550b30 2818 struct fscrypt_str *ent_name);
617ba13b 2819extern void ext4_htree_free_dir_info(struct dir_private_info *p);
978fef91
TM
2820extern int ext4_find_dest_de(struct inode *dir, struct inode *inode,
2821 struct buffer_head *bh,
2822 void *buf, int buf_size,
5b643f9c 2823 struct ext4_filename *fname,
978fef91 2824 struct ext4_dir_entry_2 **dest_de);
471fbbea 2825void ext4_insert_dentry(struct inode *dir, struct inode *inode,
1bc0af60
EB
2826 struct ext4_dir_entry_2 *de,
2827 int buf_size,
2828 struct ext4_filename *fname);
978fef91
TM
2829static inline void ext4_update_dx_flag(struct inode *inode)
2830{
f902b216
JK
2831 if (!ext4_has_feature_dir_index(inode->i_sb) &&
2832 ext4_test_inode_flag(inode, EXT4_INODE_INDEX)) {
48a34311
JK
2833 /* ext4_iget() should have caught this... */
2834 WARN_ON_ONCE(ext4_has_feature_metadata_csum(inode->i_sb));
978fef91 2835 ext4_clear_inode_flag(inode, EXT4_INODE_INDEX);
48a34311 2836 }
978fef91 2837}
d6006186 2838static const unsigned char ext4_filetype_table[] = {
65d165d9
TM
2839 DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
2840};
2841
2842static inline unsigned char get_dtype(struct super_block *sb, int filetype)
2843{
e2b911c5 2844 if (!ext4_has_feature_filetype(sb) || filetype >= EXT4_FT_MAX)
65d165d9
TM
2845 return DT_UNKNOWN;
2846
2847 return ext4_filetype_table[filetype];
2848}
40b163f1
DW
2849extern int ext4_check_all_de(struct inode *dir, struct buffer_head *bh,
2850 void *buf, int buf_size);
ac27a0ec
DK
2851
2852/* fsync.c */
02c24a82 2853extern int ext4_sync_file(struct file *, loff_t, loff_t, int);
ac27a0ec
DK
2854
2855/* hash.c */
b886ee3e
GKB
2856extern int ext4fs_dirhash(const struct inode *dir, const char *name, int len,
2857 struct dx_hash_info *hinfo);
ac27a0ec
DK
2858
2859/* ialloc.c */
8016e29f 2860extern int ext4_mark_inode_used(struct super_block *sb, int ino);
f2d40141 2861extern struct inode *__ext4_new_inode(struct mnt_idmap *, handle_t *,
14f3db55 2862 struct inode *, umode_t,
1139575a 2863 const struct qstr *qstr, __u32 goal,
1b917ed8
TE
2864 uid_t *owner, __u32 i_flags,
2865 int handle_type, unsigned int line_no,
2866 int nblocks);
1139575a 2867
14f3db55 2868#define ext4_new_inode(handle, dir, mode, qstr, goal, owner, i_flags) \
f2d40141 2869 __ext4_new_inode(&nop_mnt_idmap, (handle), (dir), (mode), (qstr), \
14f3db55 2870 (goal), (owner), i_flags, 0, 0, 0)
f2d40141 2871#define ext4_new_inode_start_handle(idmap, dir, mode, qstr, goal, owner, \
1139575a 2872 type, nblocks) \
f2d40141 2873 __ext4_new_inode((idmap), NULL, (dir), (mode), (qstr), (goal), (owner), \
1b917ed8 2874 0, (type), __LINE__, (nblocks))
1139575a
TT
2875
2876
af5bc92d
TT
2877extern void ext4_free_inode(handle_t *, struct inode *);
2878extern struct inode * ext4_orphan_get(struct super_block *, unsigned long);
2879extern unsigned long ext4_count_free_inodes(struct super_block *);
2880extern unsigned long ext4_count_dirs(struct super_block *);
61d08673 2881extern void ext4_mark_bitmap_end(int start_bit, int end_bit, char *bitmap);
bfff6873
LC
2882extern int ext4_init_inode_table(struct super_block *sb,
2883 ext4_group_t group, int barrier);
813e5727 2884extern void ext4_end_bitmap_read(struct buffer_head *bh, int uptodate);
ac27a0ec 2885
6866d7b3 2886/* fast_commit.c */
ce8c59d1 2887int ext4_fc_info_show(struct seq_file *seq, void *v);
6866d7b3 2888void ext4_fc_init(struct super_block *sb, journal_t *journal);
aa75f4d3 2889void ext4_fc_init_inode(struct inode *inode);
a80f7fcf 2890void ext4_fc_track_range(handle_t *handle, struct inode *inode, ext4_lblk_t start,
aa75f4d3 2891 ext4_lblk_t end);
a80f7fcf
HS
2892void __ext4_fc_track_unlink(handle_t *handle, struct inode *inode,
2893 struct dentry *dentry);
2894void __ext4_fc_track_link(handle_t *handle, struct inode *inode,
2895 struct dentry *dentry);
2896void ext4_fc_track_unlink(handle_t *handle, struct dentry *dentry);
2897void ext4_fc_track_link(handle_t *handle, struct dentry *dentry);
8210bb29
HS
2898void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
2899 struct dentry *dentry);
a80f7fcf
HS
2900void ext4_fc_track_create(handle_t *handle, struct dentry *dentry);
2901void ext4_fc_track_inode(handle_t *handle, struct inode *inode);
e85c81ba 2902void ext4_fc_mark_ineligible(struct super_block *sb, int reason, handle_t *handle);
aa75f4d3
HS
2903void ext4_fc_start_update(struct inode *inode);
2904void ext4_fc_stop_update(struct inode *inode);
2905void ext4_fc_del(struct inode *inode);
8016e29f
HS
2906bool ext4_fc_replay_check_excluded(struct super_block *sb, ext4_fsblk_t block);
2907void ext4_fc_replay_cleanup(struct super_block *sb);
aa75f4d3
HS
2908int ext4_fc_commit(journal_t *journal, tid_t commit_tid);
2909int __init ext4_fc_init_dentry_cache(void);
ab047d51 2910void ext4_fc_destroy_dentry_cache(void);
599ea31d
XY
2911int ext4_fc_record_regions(struct super_block *sb, int ino,
2912 ext4_lblk_t lblk, ext4_fsblk_t pblk,
2913 int len, int replay);
aa75f4d3 2914
c9de560d 2915/* mballoc.c */
247dbed8 2916extern const struct seq_operations ext4_mb_seq_groups_ops;
f68f4063 2917extern const struct seq_operations ext4_mb_seq_structs_summary_ops;
a6c75eaf 2918extern int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset);
9d99012f 2919extern int ext4_mb_init(struct super_block *);
90817717 2920extern void ext4_mb_release(struct super_block *);
c9de560d
AT
2921extern ext4_fsblk_t ext4_mb_new_blocks(handle_t *,
2922 struct ext4_allocation_request *, int *);
2ffd2a6a 2923extern void ext4_discard_preallocations(struct inode *);
5dabfc78
TT
2924extern int __init ext4_init_mballoc(void);
2925extern void ext4_exit_mballoc(void);
3d392b26
TT
2926extern ext4_group_t ext4_mb_prefetch(struct super_block *sb,
2927 ext4_group_t group,
2928 unsigned int nr, int *cnt);
2929extern void ext4_mb_prefetch_fini(struct super_block *sb, ext4_group_t group,
2930 unsigned int nr);
2931
44338711 2932extern void ext4_free_blocks(handle_t *handle, struct inode *inode,
e6362609
TT
2933 struct buffer_head *bh, ext4_fsblk_t block,
2934 unsigned long count, int flags);
28623c2f
TT
2935extern int ext4_mb_alloc_groupinfo(struct super_block *sb,
2936 ext4_group_t ngroups);
920313a7 2937extern int ext4_mb_add_groupinfo(struct super_block *sb,
5f21b0e6 2938 ext4_group_t i, struct ext4_group_desc *desc);
cc7365df 2939extern int ext4_group_add_blocks(handle_t *handle, struct super_block *sb,
2846e820 2940 ext4_fsblk_t block, unsigned long count);
7360d173 2941extern int ext4_trim_fs(struct super_block *, struct fstrim_range *);
a0154344 2942extern void ext4_process_freed_data(struct super_block *sb, tid_t commit_tid);
8016e29f 2943extern void ext4_mb_mark_bb(struct super_block *sb, ext4_fsblk_t block,
d2f7cf40 2944 int len, bool state);
304749c0
OM
2945static inline bool ext4_mb_cr_expensive(enum criteria cr)
2946{
2947 return cr >= CR_GOAL_LEN_SLOW;
2948}
7360d173 2949
ac27a0ec 2950/* inode.c */
8016e29f
HS
2951void ext4_inode_csum_set(struct inode *inode, struct ext4_inode *raw,
2952 struct ext4_inode_info *ei);
f348c252 2953int ext4_inode_is_fast_symlink(struct inode *inode);
10560082 2954struct buffer_head *ext4_getblk(handle_t *, struct inode *, ext4_lblk_t, int);
1c215028 2955struct buffer_head *ext4_bread(handle_t *, struct inode *, ext4_lblk_t, int);
9699d4f9
TE
2956int ext4_bread_batch(struct inode *inode, ext4_lblk_t block, int bh_count,
2957 bool wait, struct buffer_head **bhs);
705965bd
JK
2958int ext4_get_block_unwritten(struct inode *inode, sector_t iblock,
2959 struct buffer_head *bh_result, int create);
6873fa0d 2960int ext4_get_block(struct inode *inode, sector_t iblock,
705965bd 2961 struct buffer_head *bh_result, int create);
9c3569b5
TM
2962int ext4_da_get_block_prep(struct inode *inode, sector_t iblock,
2963 struct buffer_head *bh, int create);
f19d5870 2964int ext4_walk_page_buffers(handle_t *handle,
188c299e 2965 struct inode *inode,
f19d5870
TM
2966 struct buffer_head *head,
2967 unsigned from,
2968 unsigned to,
2969 int *partial,
188c299e 2970 int (*fn)(handle_t *handle, struct inode *inode,
f19d5870 2971 struct buffer_head *bh));
188c299e 2972int do_journal_get_write_access(handle_t *handle, struct inode *inode,
f19d5870 2973 struct buffer_head *bh);
9c3569b5
TM
2974#define FALL_BACK_TO_NONDELALLOC 1
2975#define CONVERT_INLINE_DATA 2
ac27a0ec 2976
8a363970
TT
2977typedef enum {
2978 EXT4_IGET_NORMAL = 0,
2979 EXT4_IGET_SPECIAL = 0x0001, /* OK to iget a system inode */
63b1e9bc 2980 EXT4_IGET_HANDLE = 0x0002, /* Inode # is from a handle */
b3e6bcb9
TT
2981 EXT4_IGET_BAD = 0x0004, /* Allow to iget a bad inode */
2982 EXT4_IGET_EA_INODE = 0x0008 /* Inode should contain an EA value */
8a363970
TT
2983} ext4_iget_flags;
2984
2985extern struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
2986 ext4_iget_flags flags, const char *function,
2987 unsigned int line);
2988
2989#define ext4_iget(sb, ino, flags) \
2990 __ext4_iget((sb), (ino), (flags), __func__, __LINE__)
2991
a9185b41 2992extern int ext4_write_inode(struct inode *, struct writeback_control *);
c1632a0f 2993extern int ext4_setattr(struct mnt_idmap *, struct dentry *,
549c7297 2994 struct iattr *);
8434ef1d 2995extern u32 ext4_dio_alignment(struct inode *inode);
b74d24f7 2996extern int ext4_getattr(struct mnt_idmap *, const struct path *,
549c7297 2997 struct kstat *, u32, unsigned int);
0930fcc1
AV
2998extern void ext4_evict_inode(struct inode *);
2999extern void ext4_clear_inode(struct inode *);
b74d24f7 3000extern int ext4_file_getattr(struct mnt_idmap *, const struct path *,
549c7297 3001 struct kstat *, u32, unsigned int);
aa385729 3002extern void ext4_dirty_inode(struct inode *, int);
617ba13b
MC
3003extern int ext4_change_inode_journal_flag(struct inode *, int);
3004extern int ext4_get_inode_loc(struct inode *, struct ext4_iloc *);
8016e29f
HS
3005extern int ext4_get_fc_inode_loc(struct super_block *sb, unsigned long ino,
3006 struct ext4_iloc *iloc);
a361293f 3007extern int ext4_inode_attach_jinode(struct inode *inode);
91ef4caf 3008extern int ext4_can_truncate(struct inode *inode);
2c98eb5e 3009extern int ext4_truncate(struct inode *);
430657b6 3010extern int ext4_break_layouts(struct inode *);
ad5cd4f4 3011extern int ext4_punch_hole(struct file *file, loff_t offset, loff_t length);
043546e4 3012extern void ext4_set_inode_flags(struct inode *, bool init);
ccd2506b 3013extern int ext4_alloc_da_blocks(struct inode *inode);
617ba13b 3014extern void ext4_set_aops(struct inode *inode);
a86c6181 3015extern int ext4_writepage_trans_blocks(struct inode *);
59205c8d 3016extern int ext4_normal_submit_inode_data_buffers(struct jbd2_inode *jinode);
f3bd1f3f 3017extern int ext4_chunk_trans_blocks(struct inode *, int nrblocks);
a87dd18c
LC
3018extern int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode,
3019 loff_t lstart, loff_t lend);
401b25aa 3020extern vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf);
a9e7f447 3021extern qsize_t *ext4_get_reserved_space(struct inode *inode);
040cb378 3022extern int ext4_get_projid(struct inode *inode, kprojid_t *projid);
f456767d 3023extern void ext4_da_release_space(struct inode *inode, int to_free);
5f634d06
AK
3024extern void ext4_da_update_reserve_space(struct inode *inode,
3025 int used, int quota_claim);
53085fac
JK
3026extern int ext4_issue_zeroout(struct inode *inode, ext4_lblk_t lblk,
3027 ext4_fsblk_t pblk, ext4_lblk_t len);
dae1e52c
AG
3028
3029/* indirect.c */
3030extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode,
3031 struct ext4_map_blocks *map, int flags);
fa55a0ed 3032extern int ext4_ind_trans_blocks(struct inode *inode, int nrblocks);
819c4920 3033extern void ext4_ind_truncate(handle_t *, struct inode *inode);
4f579ae7
LC
3034extern int ext4_ind_remove_space(handle_t *handle, struct inode *inode,
3035 ext4_lblk_t start, ext4_lblk_t end);
ff9893dc 3036
ac27a0ec 3037/* ioctl.c */
5cdd7b2d 3038extern long ext4_ioctl(struct file *, unsigned int, unsigned long);
af5bc92d 3039extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long);
8782a9ae 3040int ext4_fileattr_set(struct mnt_idmap *idmap,
4db5c2e6
MS
3041 struct dentry *dentry, struct fileattr *fa);
3042int ext4_fileattr_get(struct dentry *dentry, struct fileattr *fa);
8016e29f 3043extern void ext4_reset_inode_seed(struct inode *inode);
827891a3 3044int ext4_update_overhead(struct super_block *sb, bool force);
97524b45 3045int ext4_force_shutdown(struct super_block *sb, u32 flags);
ac27a0ec 3046
c14c6fd5 3047/* migrate.c */
2a43a878 3048extern int ext4_ext_migrate(struct inode *);
0d14b098 3049extern int ext4_ind_migrate(struct inode *inode);
3d0518f4 3050
ac27a0ec 3051/* namei.c */
8016e29f
HS
3052extern int ext4_init_new_dir(handle_t *handle, struct inode *dir,
3053 struct inode *inode);
f036adb3
TT
3054extern int ext4_dirblock_csum_verify(struct inode *inode,
3055 struct buffer_head *bh);
617ba13b 3056extern int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash,
ac27a0ec 3057 __u32 start_minor_hash, __u32 *next_hash);
5b643f9c
TT
3058extern int ext4_search_dir(struct buffer_head *bh,
3059 char *search_buf,
3060 int buf_size,
3061 struct inode *dir,
3062 struct ext4_filename *fname,
5b643f9c
TT
3063 unsigned int offset,
3064 struct ext4_dir_entry_2 **res_dir);
2fe34d29 3065extern int ext4_generic_delete_entry(struct inode *dir,
05019a9e
TM
3066 struct ext4_dir_entry_2 *de_del,
3067 struct buffer_head *bh,
3068 void *entry_buf,
3069 int buf_size,
3070 int csum_size);
a7550b30 3071extern bool ext4_empty_dir(struct inode *inode);
ac27a0ec
DK
3072
3073/* resize.c */
1d0c3924 3074extern void ext4_kvfree_array_rcu(void *to_free);
617ba13b
MC
3075extern int ext4_group_add(struct super_block *sb,
3076 struct ext4_new_group_data *input);
3077extern int ext4_group_extend(struct super_block *sb,
3078 struct ext4_super_block *es,
3079 ext4_fsblk_t n_blocks_count);
19c5246d 3080extern int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count);
bbc605cd
LC
3081extern unsigned int ext4_list_backups(struct super_block *sb,
3082 unsigned int *three, unsigned int *five,
3083 unsigned int *seven);
ac27a0ec
DK
3084
3085/* super.c */
fb265c9c 3086extern struct buffer_head *ext4_sb_bread(struct super_block *sb,
67c0f556 3087 sector_t block, blk_opf_t op_flags);
8394a6ab 3088extern struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb,
3089 sector_t block);
67c0f556 3090extern void ext4_read_bh_nowait(struct buffer_head *bh, blk_opf_t op_flags,
fa491b14 3091 bh_end_io_t *end_io);
67c0f556 3092extern int ext4_read_bh(struct buffer_head *bh, blk_opf_t op_flags,
fa491b14 3093 bh_end_io_t *end_io);
67c0f556 3094extern int ext4_read_bh_lock(struct buffer_head *bh, blk_opf_t op_flags, bool wait);
5df1d412 3095extern void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block);
ebd173be 3096extern int ext4_seq_options_show(struct seq_file *seq, void *offset);
952fc18e 3097extern int ext4_calculate_overhead(struct super_block *sb);
bbc605cd
LC
3098extern __le32 ext4_superblock_csum(struct super_block *sb,
3099 struct ext4_super_block *es);
06db49e6 3100extern void ext4_superblock_csum_set(struct super_block *sb);
117fff10
TT
3101extern int ext4_alloc_flex_bg_array(struct super_block *sb,
3102 ext4_group_t ngroup);
722887dd
TT
3103extern const char *ext4_decode_error(struct super_block *sb, int errno,
3104 char nbuf[16]);
db79e6d1
WS
3105extern void ext4_mark_group_bitmap_corrupted(struct super_block *sb,
3106 ext4_group_t block_group,
3107 unsigned int flags);
68228da5
WJ
3108extern unsigned int ext4_num_base_meta_blocks(struct super_block *sb,
3109 ext4_group_t block_group);
e7c96e8e 3110
014c9caa
JK
3111extern __printf(7, 8)
3112void __ext4_error(struct super_block *, const char *, unsigned int, bool,
3113 int, __u64, const char *, ...);
54d3adbc
TT
3114extern __printf(6, 7)
3115void __ext4_error_inode(struct inode *, const char *, unsigned int,
3116 ext4_fsblk_t, int, const char *, ...);
b9075fa9 3117extern __printf(5, 6)
e7c96e8e 3118void __ext4_error_file(struct file *, const char *, unsigned int, ext4_fsblk_t,
b9075fa9 3119 const char *, ...);
c398eda0
TT
3120extern void __ext4_std_error(struct super_block *, const char *,
3121 unsigned int, int);
b9075fa9
JP
3122extern __printf(4, 5)
3123void __ext4_warning(struct super_block *, const char *, unsigned int,
3124 const char *, ...);
b03a2f7e
AD
3125extern __printf(4, 5)
3126void __ext4_warning_inode(const struct inode *inode, const char *function,
3127 unsigned int line, const char *fmt, ...);
b9075fa9 3128extern __printf(3, 4)
e7c96e8e 3129void __ext4_msg(struct super_block *, const char *, const char *, ...);
c5e06d10
JL
3130extern void __dump_mmp_msg(struct super_block *, struct mmp_struct *mmp,
3131 const char *, unsigned int, const char *);
b9075fa9
JP
3132extern __printf(7, 8)
3133void __ext4_grp_locked_error(const char *, unsigned int,
3134 struct super_block *, ext4_group_t,
3135 unsigned long, ext4_fsblk_t,
3136 const char *, ...);
e7c96e8e 3137
b03a2f7e
AD
3138#define EXT4_ERROR_INODE(inode, fmt, a...) \
3139 ext4_error_inode((inode), __func__, __LINE__, 0, (fmt), ## a)
3140
54d3adbc
TT
3141#define EXT4_ERROR_INODE_ERR(inode, err, fmt, a...) \
3142 __ext4_error_inode((inode), __func__, __LINE__, 0, (err), (fmt), ## a)
3143
3144#define ext4_error_inode_block(inode, block, err, fmt, a...) \
3145 __ext4_error_inode((inode), __func__, __LINE__, (block), (err), \
3146 (fmt), ## a)
b03a2f7e
AD
3147
3148#define EXT4_ERROR_FILE(file, block, fmt, a...) \
3149 ext4_error_file((file), __func__, __LINE__, (block), (fmt), ## a)
3150
014c9caa
JK
3151#define ext4_abort(sb, err, fmt, a...) \
3152 __ext4_error((sb), __func__, __LINE__, true, (err), 0, (fmt), ## a)
3153
e7c96e8e
JP
3154#ifdef CONFIG_PRINTK
3155
3156#define ext4_error_inode(inode, func, line, block, fmt, ...) \
54d3adbc
TT
3157 __ext4_error_inode(inode, func, line, block, 0, fmt, ##__VA_ARGS__)
3158#define ext4_error_inode_err(inode, func, line, block, err, fmt, ...) \
3159 __ext4_error_inode((inode), (func), (line), (block), \
3160 (err), (fmt), ##__VA_ARGS__)
e7c96e8e
JP
3161#define ext4_error_file(file, func, line, block, fmt, ...) \
3162 __ext4_error_file(file, func, line, block, fmt, ##__VA_ARGS__)
3163#define ext4_error(sb, fmt, ...) \
014c9caa
JK
3164 __ext4_error((sb), __func__, __LINE__, false, 0, 0, (fmt), \
3165 ##__VA_ARGS__)
54d3adbc 3166#define ext4_error_err(sb, err, fmt, ...) \
014c9caa
JK
3167 __ext4_error((sb), __func__, __LINE__, false, (err), 0, (fmt), \
3168 ##__VA_ARGS__)
e7c96e8e
JP
3169#define ext4_warning(sb, fmt, ...) \
3170 __ext4_warning(sb, __func__, __LINE__, fmt, ##__VA_ARGS__)
b03a2f7e
AD
3171#define ext4_warning_inode(inode, fmt, ...) \
3172 __ext4_warning_inode(inode, __func__, __LINE__, fmt, ##__VA_ARGS__)
e7c96e8e
JP
3173#define ext4_msg(sb, level, fmt, ...) \
3174 __ext4_msg(sb, level, fmt, ##__VA_ARGS__)
3175#define dump_mmp_msg(sb, mmp, msg) \
3176 __dump_mmp_msg(sb, mmp, __func__, __LINE__, msg)
3177#define ext4_grp_locked_error(sb, grp, ino, block, fmt, ...) \
3178 __ext4_grp_locked_error(__func__, __LINE__, sb, grp, ino, block, \
3179 fmt, ##__VA_ARGS__)
3180
3181#else
3182
3183#define ext4_error_inode(inode, func, line, block, fmt, ...) \
3184do { \
3185 no_printk(fmt, ##__VA_ARGS__); \
54d3adbc
TT
3186 __ext4_error_inode(inode, "", 0, block, 0, " "); \
3187} while (0)
3188#define ext4_error_inode_err(inode, func, line, block, err, fmt, ...) \
3189do { \
3190 no_printk(fmt, ##__VA_ARGS__); \
3191 __ext4_error_inode(inode, "", 0, block, err, " "); \
e7c96e8e
JP
3192} while (0)
3193#define ext4_error_file(file, func, line, block, fmt, ...) \
3194do { \
3195 no_printk(fmt, ##__VA_ARGS__); \
3196 __ext4_error_file(file, "", 0, block, " "); \
3197} while (0)
3198#define ext4_error(sb, fmt, ...) \
3199do { \
3200 no_printk(fmt, ##__VA_ARGS__); \
014c9caa 3201 __ext4_error(sb, "", 0, false, 0, 0, " "); \
54d3adbc
TT
3202} while (0)
3203#define ext4_error_err(sb, err, fmt, ...) \
3204do { \
3205 no_printk(fmt, ##__VA_ARGS__); \
014c9caa 3206 __ext4_error(sb, "", 0, false, err, 0, " "); \
e7c96e8e
JP
3207} while (0)
3208#define ext4_warning(sb, fmt, ...) \
3209do { \
3210 no_printk(fmt, ##__VA_ARGS__); \
3211 __ext4_warning(sb, "", 0, " "); \
3212} while (0)
b03a2f7e
AD
3213#define ext4_warning_inode(inode, fmt, ...) \
3214do { \
3215 no_printk(fmt, ##__VA_ARGS__); \
3216 __ext4_warning_inode(inode, "", 0, " "); \
3217} while (0)
e7c96e8e
JP
3218#define ext4_msg(sb, level, fmt, ...) \
3219do { \
3220 no_printk(fmt, ##__VA_ARGS__); \
3221 __ext4_msg(sb, "", " "); \
3222} while (0)
3223#define dump_mmp_msg(sb, mmp, msg) \
3224 __dump_mmp_msg(sb, mmp, "", 0, "")
3225#define ext4_grp_locked_error(sb, grp, ino, block, fmt, ...) \
3226do { \
3227 no_printk(fmt, ##__VA_ARGS__); \
3228 __ext4_grp_locked_error("", 0, sb, grp, ino, block, " "); \
3229} while (0)
3230
3231#endif
3232
8fadc143
AR
3233extern ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,
3234 struct ext4_group_desc *bg);
3235extern ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb,
3236 struct ext4_group_desc *bg);
3237extern ext4_fsblk_t ext4_inode_table(struct super_block *sb,
3238 struct ext4_group_desc *bg);
021b65bb
TT
3239extern __u32 ext4_free_group_clusters(struct super_block *sb,
3240 struct ext4_group_desc *bg);
560671a0
AK
3241extern __u32 ext4_free_inodes_count(struct super_block *sb,
3242 struct ext4_group_desc *bg);
3243extern __u32 ext4_used_dirs_count(struct super_block *sb,
3244 struct ext4_group_desc *bg);
3245extern __u32 ext4_itable_unused_count(struct super_block *sb,
3246 struct ext4_group_desc *bg);
8fadc143
AR
3247extern void ext4_block_bitmap_set(struct super_block *sb,
3248 struct ext4_group_desc *bg, ext4_fsblk_t blk);
3249extern void ext4_inode_bitmap_set(struct super_block *sb,
3250 struct ext4_group_desc *bg, ext4_fsblk_t blk);
3251extern void ext4_inode_table_set(struct super_block *sb,
3252 struct ext4_group_desc *bg, ext4_fsblk_t blk);
021b65bb
TT
3253extern void ext4_free_group_clusters_set(struct super_block *sb,
3254 struct ext4_group_desc *bg,
3255 __u32 count);
560671a0
AK
3256extern void ext4_free_inodes_set(struct super_block *sb,
3257 struct ext4_group_desc *bg, __u32 count);
3258extern void ext4_used_dirs_set(struct super_block *sb,
3259 struct ext4_group_desc *bg, __u32 count);
3260extern void ext4_itable_unused_set(struct super_block *sb,
3261 struct ext4_group_desc *bg, __u32 count);
feb0ab32 3262extern int ext4_group_desc_csum_verify(struct super_block *sb, __u32 group,
bb23c20a 3263 struct ext4_group_desc *gdp);
feb0ab32
DW
3264extern void ext4_group_desc_csum_set(struct super_block *sb, __u32 group,
3265 struct ext4_group_desc *gdp);
7f511862
TT
3266extern int ext4_register_li_request(struct super_block *sb,
3267 ext4_group_t first_not_zeroed);
bd81d8ee 3268
9aa5d32b
DM
3269static inline int ext4_has_metadata_csum(struct super_block *sb)
3270{
e2b911c5 3271 WARN_ON_ONCE(ext4_has_feature_metadata_csum(sb) &&
9aa5d32b
DM
3272 !EXT4_SB(sb)->s_chksum_driver);
3273
dec214d0
TE
3274 return ext4_has_feature_metadata_csum(sb) &&
3275 (EXT4_SB(sb)->s_chksum_driver != NULL);
9aa5d32b 3276}
dec214d0
TE
3277
3278static inline int ext4_has_group_desc_csum(struct super_block *sb)
3279{
3280 return ext4_has_feature_gdt_csum(sb) || ext4_has_metadata_csum(sb);
3281}
3282
81e8c3c5
PM
3283#define ext4_read_incompat_64bit_val(es, name) \
3284 (((es)->s_feature_incompat & cpu_to_le32(EXT4_FEATURE_INCOMPAT_64BIT) \
3285 ? (ext4_fsblk_t)le32_to_cpu(es->name##_hi) << 32 : 0) | \
3286 le32_to_cpu(es->name##_lo))
3287
bd81d8ee
LV
3288static inline ext4_fsblk_t ext4_blocks_count(struct ext4_super_block *es)
3289{
81e8c3c5 3290 return ext4_read_incompat_64bit_val(es, s_blocks_count);
bd81d8ee
LV
3291}
3292
3293static inline ext4_fsblk_t ext4_r_blocks_count(struct ext4_super_block *es)
3294{
81e8c3c5 3295 return ext4_read_incompat_64bit_val(es, s_r_blocks_count);
bd81d8ee
LV
3296}
3297
3298static inline ext4_fsblk_t ext4_free_blocks_count(struct ext4_super_block *es)
3299{
81e8c3c5 3300 return ext4_read_incompat_64bit_val(es, s_free_blocks_count);
bd81d8ee
LV
3301}
3302
3303static inline void ext4_blocks_count_set(struct ext4_super_block *es,
3304 ext4_fsblk_t blk)
3305{
6bc9feff 3306 es->s_blocks_count_lo = cpu_to_le32((u32)blk);
bd81d8ee
LV
3307 es->s_blocks_count_hi = cpu_to_le32(blk >> 32);
3308}
3309
3310static inline void ext4_free_blocks_count_set(struct ext4_super_block *es,
3311 ext4_fsblk_t blk)
3312{
308ba3ec 3313 es->s_free_blocks_count_lo = cpu_to_le32((u32)blk);
bd81d8ee
LV
3314 es->s_free_blocks_count_hi = cpu_to_le32(blk >> 32);
3315}
3316
3317static inline void ext4_r_blocks_count_set(struct ext4_super_block *es,
3318 ext4_fsblk_t blk)
3319{
308ba3ec 3320 es->s_r_blocks_count_lo = cpu_to_le32((u32)blk);
bd81d8ee
LV
3321 es->s_r_blocks_count_hi = cpu_to_le32(blk >> 32);
3322}
3323
e08ac99f
AB
3324static inline loff_t ext4_isize(struct super_block *sb,
3325 struct ext4_inode *raw_inode)
a48380f7 3326{
e08ac99f
AB
3327 if (ext4_has_feature_largedir(sb) ||
3328 S_ISREG(le16_to_cpu(raw_inode->i_mode)))
06a279d6
TT
3329 return ((loff_t)le32_to_cpu(raw_inode->i_size_high) << 32) |
3330 le32_to_cpu(raw_inode->i_size_lo);
e08ac99f
AB
3331
3332 return (loff_t) le32_to_cpu(raw_inode->i_size_lo);
a48380f7 3333}
bd81d8ee 3334
a48380f7
AK
3335static inline void ext4_isize_set(struct ext4_inode *raw_inode, loff_t i_size)
3336{
3337 raw_inode->i_size_lo = cpu_to_le32(i_size);
3338 raw_inode->i_size_high = cpu_to_le32(i_size >> 32);
3339}
ac27a0ec 3340
8df9675f
TT
3341/*
3342 * Reading s_groups_count requires using smp_rmb() afterwards. See
3343 * the locking protocol documented in the comments of ext4_group_add()
3344 * in resize.c
3345 */
3346static inline ext4_group_t ext4_get_groups_count(struct super_block *sb)
3347{
3348 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count;
3349
3350 smp_rmb();
3351 return ngroups;
3352}
c9de560d 3353
772cb7c8
JS
3354static inline ext4_group_t ext4_flex_group(struct ext4_sb_info *sbi,
3355 ext4_group_t block_group)
3356{
3357 return block_group >> sbi->s_log_groups_per_flex;
3358}
3359
3360static inline unsigned int ext4_flex_bg_size(struct ext4_sb_info *sbi)
3361{
3362 return 1 << sbi->s_log_groups_per_flex;
3363}
3364
617ba13b 3365#define ext4_std_error(sb, errno) \
ac27a0ec
DK
3366do { \
3367 if ((errno)) \
c398eda0 3368 __ext4_std_error((sb), __func__, __LINE__, (errno)); \
ac27a0ec
DK
3369} while (0)
3370
a30d542a 3371#ifdef CONFIG_SMP
df55c99d
TT
3372/* Each CPU can accumulate percpu_counter_batch clusters in their local
3373 * counters. So we need to make sure we have free clusters more
179f7ebf 3374 * than percpu_counter_batch * nr_cpu_ids. Also add a window of 4 times.
a30d542a 3375 */
df55c99d 3376#define EXT4_FREECLUSTERS_WATERMARK (4 * (percpu_counter_batch * nr_cpu_ids))
a30d542a 3377#else
df55c99d 3378#define EXT4_FREECLUSTERS_WATERMARK 0
a30d542a
AK
3379#endif
3380
f340b3d9 3381/* Update i_disksize. Requires i_rwsem to avoid races with truncate */
cf17fea6
AK
3382static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize)
3383{
90e775b7 3384 WARN_ON_ONCE(S_ISREG(inode->i_mode) &&
5955102c 3385 !inode_is_locked(inode));
90e775b7
JK
3386 down_write(&EXT4_I(inode)->i_data_sem);
3387 if (newsize > EXT4_I(inode)->i_disksize)
35df4299 3388 WRITE_ONCE(EXT4_I(inode)->i_disksize, newsize);
90e775b7
JK
3389 up_write(&EXT4_I(inode)->i_data_sem);
3390}
3391
f340b3d9 3392/* Update i_size, i_disksize. Requires i_rwsem to avoid races with truncate */
4631dbf6
DM
3393static inline int ext4_update_inode_size(struct inode *inode, loff_t newsize)
3394{
3395 int changed = 0;
3396
3397 if (newsize > inode->i_size) {
3398 i_size_write(inode, newsize);
3399 changed = 1;
3400 }
3401 if (newsize > EXT4_I(inode)->i_disksize) {
3402 ext4_update_i_disksize(inode, newsize);
3403 changed |= 2;
3404 }
3405 return changed;
3406}
3407
01127848
JK
3408int ext4_update_disksize_before_punch(struct inode *inode, loff_t offset,
3409 loff_t len);
3410
5d1b1b3f
AK
3411struct ext4_group_info {
3412 unsigned long bb_state;
addd752c
CX
3413#ifdef AGGRESSIVE_CHECK
3414 unsigned long bb_check_counter;
3415#endif
5d1b1b3f 3416 struct rb_root bb_free_root;
a36b4498
ES
3417 ext4_grpblk_t bb_first_free; /* first free block */
3418 ext4_grpblk_t bb_free; /* total free blocks */
3419 ext4_grpblk_t bb_fragments; /* nr of freespace fragments */
83e80a6e
JK
3420 int bb_avg_fragment_size_order; /* order of average
3421 fragment in BG */
8a57d9d6 3422 ext4_grpblk_t bb_largest_free_order;/* order of largest frag in BG */
196e402a 3423 ext4_group_t bb_group; /* Group number */
5d1b1b3f
AK
3424 struct list_head bb_prealloc_list;
3425#ifdef DOUBLE_CHECK
3426 void *bb_bitmap;
3427#endif
3428 struct rw_semaphore alloc_sem;
83e80a6e 3429 struct list_head bb_avg_fragment_size_node;
196e402a 3430 struct list_head bb_largest_free_order_node;
a36b4498
ES
3431 ext4_grpblk_t bb_counters[]; /* Nr of free power-of-two-block
3432 * regions, index is order.
3433 * bb_counters[3] = 5 means
3434 * 5 free 8-block regions. */
5d1b1b3f
AK
3435};
3436
3d56b8d2
TM
3437#define EXT4_GROUP_INFO_NEED_INIT_BIT 0
3438#define EXT4_GROUP_INFO_WAS_TRIMMED_BIT 1
163a203d 3439#define EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT 2
87a39389 3440#define EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT 3
db79e6d1
WS
3441#define EXT4_GROUP_INFO_BBITMAP_CORRUPT \
3442 (1 << EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT)
3443#define EXT4_GROUP_INFO_IBITMAP_CORRUPT \
3444 (1 << EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT)
cfd73237 3445#define EXT4_GROUP_INFO_BBITMAP_READ_BIT 4
5d1b1b3f
AK
3446
3447#define EXT4_MB_GRP_NEED_INIT(grp) \
3448 (test_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &((grp)->bb_state)))
163a203d
DW
3449#define EXT4_MB_GRP_BBITMAP_CORRUPT(grp) \
3450 (test_bit(EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT, &((grp)->bb_state)))
87a39389
DW
3451#define EXT4_MB_GRP_IBITMAP_CORRUPT(grp) \
3452 (test_bit(EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT, &((grp)->bb_state)))
5d1b1b3f 3453
3d56b8d2
TM
3454#define EXT4_MB_GRP_WAS_TRIMMED(grp) \
3455 (test_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
3456#define EXT4_MB_GRP_SET_TRIMMED(grp) \
3457 (set_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
3458#define EXT4_MB_GRP_CLEAR_TRIMMED(grp) \
3459 (clear_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
cfd73237
AZ
3460#define EXT4_MB_GRP_TEST_AND_SET_READ(grp) \
3461 (test_and_set_bit(EXT4_GROUP_INFO_BBITMAP_READ_BIT, &((grp)->bb_state)))
3d56b8d2 3462
50797481
TT
3463#define EXT4_MAX_CONTENTION 8
3464#define EXT4_CONTENTION_THRESHOLD 2
3465
955ce5f5
AK
3466static inline spinlock_t *ext4_group_lock_ptr(struct super_block *sb,
3467 ext4_group_t group)
5d1b1b3f 3468{
955ce5f5
AK
3469 return bgl_lock_ptr(EXT4_SB(sb)->s_blockgroup_lock, group);
3470}
5d1b1b3f 3471
50797481
TT
3472/*
3473 * Returns true if the filesystem is busy enough that attempts to
3474 * access the block group locks has run into contention.
3475 */
3476static inline int ext4_fs_is_busy(struct ext4_sb_info *sbi)
3477{
3478 return (atomic_read(&sbi->s_lock_busy) > EXT4_CONTENTION_THRESHOLD);
3479}
3480
955ce5f5
AK
3481static inline void ext4_lock_group(struct super_block *sb, ext4_group_t group)
3482{
50797481
TT
3483 spinlock_t *lock = ext4_group_lock_ptr(sb, group);
3484 if (spin_trylock(lock))
3485 /*
3486 * We're able to grab the lock right away, so drop the
3487 * lock contention counter.
3488 */
3489 atomic_add_unless(&EXT4_SB(sb)->s_lock_busy, -1, 0);
3490 else {
3491 /*
3492 * The lock is busy, so bump the contention counter,
3493 * and then wait on the spin lock.
3494 */
3495 atomic_add_unless(&EXT4_SB(sb)->s_lock_busy, 1,
3496 EXT4_MAX_CONTENTION);
3497 spin_lock(lock);
3498 }
5d1b1b3f
AK
3499}
3500
3501static inline void ext4_unlock_group(struct super_block *sb,
3502 ext4_group_t group)
3503{
955ce5f5 3504 spin_unlock(ext4_group_lock_ptr(sb, group));
5d1b1b3f
AK
3505}
3506
f177ee08
RA
3507#ifdef CONFIG_QUOTA
3508static inline bool ext4_quota_capable(struct super_block *sb)
3509{
3510 return (test_opt(sb, QUOTA) || ext4_has_feature_quota(sb));
3511}
3512
3513static inline bool ext4_is_quota_journalled(struct super_block *sb)
3514{
3515 struct ext4_sb_info *sbi = EXT4_SB(sb);
3516
3517 return (ext4_has_feature_quota(sb) ||
3518 sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]);
3519}
25c6d98f 3520int ext4_enable_quotas(struct super_block *sb);
f177ee08
RA
3521#endif
3522
1f7d1e77
TT
3523/*
3524 * Block validity checking
3525 */
3526#define ext4_check_indirect_blockref(inode, bh) \
3527 ext4_check_blockref(__func__, __LINE__, inode, \
3528 (__le32 *)(bh)->b_data, \
3529 EXT4_ADDR_PER_BLOCK((inode)->i_sb))
3530
3531#define ext4_ind_check_inode(inode) \
3532 ext4_check_blockref(__func__, __LINE__, inode, \
3533 EXT4_I(inode)->i_data, \
3534 EXT4_NDIR_BLOCKS)
3535
ac27a0ec
DK
3536/*
3537 * Inodes and files operations
3538 */
3539
3540/* dir.c */
617ba13b 3541extern const struct file_operations ext4_dir_operations;
ac27a0ec
DK
3542
3543/* file.c */
c5ef1c42 3544extern const struct inode_operations ext4_file_inode_operations;
617ba13b 3545extern const struct file_operations ext4_file_operations;
e0d10bfa 3546extern loff_t ext4_llseek(struct file *file, loff_t offset, int origin);
ac27a0ec 3547
95eaefbd 3548/* inline.c */
95eaefbd
TT
3549extern int ext4_get_max_inline_size(struct inode *inode);
3550extern int ext4_find_inline_data_nolock(struct inode *inode);
95eaefbd
TT
3551extern int ext4_destroy_inline_data(handle_t *handle, struct inode *inode);
3552
3edde93e 3553int ext4_readpage_inline(struct inode *inode, struct folio *folio);
95eaefbd
TT
3554extern int ext4_try_to_write_inline_data(struct address_space *mapping,
3555 struct inode *inode,
3556 loff_t pos, unsigned len,
95eaefbd 3557 struct page **pagep);
d19500da
RH
3558int ext4_write_inline_data_end(struct inode *inode, loff_t pos, unsigned len,
3559 unsigned copied, struct folio *folio);
95eaefbd
TT
3560extern int ext4_da_write_inline_data_begin(struct address_space *mapping,
3561 struct inode *inode,
3562 loff_t pos, unsigned len,
95eaefbd
TT
3563 struct page **pagep,
3564 void **fsdata);
5b643f9c
TT
3565extern int ext4_try_add_inline_entry(handle_t *handle,
3566 struct ext4_filename *fname,
56a04915 3567 struct inode *dir, struct inode *inode);
95eaefbd
TT
3568extern int ext4_try_create_inline_dir(handle_t *handle,
3569 struct inode *parent,
3570 struct inode *inode);
3571extern int ext4_read_inline_dir(struct file *filp,
725bebb2 3572 struct dir_context *ctx,
95eaefbd 3573 int *has_inline_data);
7633b08b
TT
3574extern int ext4_inlinedir_to_tree(struct file *dir_file,
3575 struct inode *dir, ext4_lblk_t block,
3576 struct dx_hash_info *hinfo,
3577 __u32 start_hash, __u32 start_minor_hash,
3578 int *has_inline_data);
95eaefbd 3579extern struct buffer_head *ext4_find_inline_entry(struct inode *dir,
5b643f9c 3580 struct ext4_filename *fname,
95eaefbd
TT
3581 struct ext4_dir_entry_2 **res_dir,
3582 int *has_inline_data);
3583extern int ext4_delete_inline_entry(handle_t *handle,
3584 struct inode *dir,
3585 struct ext4_dir_entry_2 *de_del,
3586 struct buffer_head *bh,
3587 int *has_inline_data);
a7550b30 3588extern bool empty_inline_dir(struct inode *dir, int *has_inline_data);
95eaefbd
TT
3589extern struct buffer_head *ext4_get_first_inline_block(struct inode *inode,
3590 struct ext4_dir_entry_2 **parent_de,
3591 int *retval);
5a57bca9 3592extern void *ext4_read_inline_link(struct inode *inode);
7046ae35
AG
3593
3594struct iomap;
3595extern int ext4_inline_data_iomap(struct inode *inode, struct iomap *iomap);
3596
01daf945 3597extern int ext4_inline_data_truncate(struct inode *inode, int *has_inline);
95eaefbd
TT
3598
3599extern int ext4_convert_inline_data(struct inode *inode);
3600
83447ccb
ZL
3601static inline int ext4_has_inline_data(struct inode *inode)
3602{
3603 return ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA) &&
3604 EXT4_I(inode)->i_inline_off;
3605}
3606
ac27a0ec 3607/* namei.c */
c5ef1c42
AV
3608extern const struct inode_operations ext4_dir_inode_operations;
3609extern const struct inode_operations ext4_special_inode_operations;
596397b7 3610extern struct dentry *ext4_get_parent(struct dentry *child);
a774f9c2
TM
3611extern struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode,
3612 struct ext4_dir_entry_2 *de,
3613 int blocksize, int csum_size,
3614 unsigned int parent_ino, int dotdot_real_len);
ddce3b94
TT
3615extern void ext4_initialize_dirent_tail(struct buffer_head *bh,
3616 unsigned int blocksize);
f036adb3
TT
3617extern int ext4_handle_dirty_dirblock(handle_t *handle, struct inode *inode,
3618 struct buffer_head *bh);
4c0d5778
EB
3619extern int __ext4_unlink(struct inode *dir, const struct qstr *d_name,
3620 struct inode *inode, struct dentry *dentry);
8016e29f
HS
3621extern int __ext4_link(struct inode *dir, struct inode *inode,
3622 struct dentry *dentry);
b886ee3e 3623
8af0f082 3624#define S_SHIFT 12
381cebfe 3625static const unsigned char ext4_type_by_mode[(S_IFMT >> S_SHIFT) + 1] = {
8af0f082
TM
3626 [S_IFREG >> S_SHIFT] = EXT4_FT_REG_FILE,
3627 [S_IFDIR >> S_SHIFT] = EXT4_FT_DIR,
3628 [S_IFCHR >> S_SHIFT] = EXT4_FT_CHRDEV,
3629 [S_IFBLK >> S_SHIFT] = EXT4_FT_BLKDEV,
3630 [S_IFIFO >> S_SHIFT] = EXT4_FT_FIFO,
3631 [S_IFSOCK >> S_SHIFT] = EXT4_FT_SOCK,
3632 [S_IFLNK >> S_SHIFT] = EXT4_FT_SYMLINK,
3633};
3634
3635static inline void ext4_set_de_type(struct super_block *sb,
3636 struct ext4_dir_entry_2 *de,
3637 umode_t mode) {
e2b911c5 3638 if (ext4_has_feature_filetype(sb))
8af0f082
TM
3639 de->file_type = ext4_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
3640}
3641
f64e02fe 3642/* readpages.c */
a07f624b 3643extern int ext4_mpage_readpages(struct inode *inode,
c0be8e6f 3644 struct readahead_control *rac, struct folio *folio);
22cfe4b4
EB
3645extern int __init ext4_init_post_read_processing(void);
3646extern void ext4_exit_post_read_processing(void);
ac27a0ec
DK
3647
3648/* symlink.c */
a7a67e8a 3649extern const struct inode_operations ext4_encrypted_symlink_inode_operations;
c5ef1c42
AV
3650extern const struct inode_operations ext4_symlink_inode_operations;
3651extern const struct inode_operations ext4_fast_symlink_inode_operations;
ac27a0ec 3652
b5799018 3653/* sysfs.c */
d578b994 3654extern void ext4_notify_error_sysfs(struct ext4_sb_info *sbi);
b5799018 3655extern int ext4_register_sysfs(struct super_block *sb);
ebd173be 3656extern void ext4_unregister_sysfs(struct super_block *sb);
b5799018
TT
3657extern int __init ext4_init_sysfs(void);
3658extern void ext4_exit_sysfs(void);
3659
6fd058f7
TT
3660/* block_validity */
3661extern void ext4_release_system_zone(struct super_block *sb);
3662extern int ext4_setup_system_zone(struct super_block *sb);
5dabfc78
TT
3663extern int __init ext4_init_system_zone(void);
3664extern void ext4_exit_system_zone(void);
ce9f24cc
JK
3665extern int ext4_inode_block_valid(struct inode *inode,
3666 ext4_fsblk_t start_blk,
3667 unsigned int count);
1f7d1e77
TT
3668extern int ext4_check_blockref(const char *, unsigned int,
3669 struct inode *, __le32 *, unsigned int);
6bc6c2bd
RH
3670extern int ext4_sb_block_valid(struct super_block *sb, struct inode *inode,
3671 ext4_fsblk_t start_blk, unsigned int count);
3672
6fd058f7 3673
a86c6181 3674/* extents.c */
4a092d73
TT
3675struct ext4_ext_path;
3676struct ext4_extent;
3677
d7b2a00c
ZL
3678/*
3679 * Maximum number of logical blocks in a file; ext4_extent's ee_block is
3680 * __le32.
3681 */
3682#define EXT_MAX_BLOCKS 0xffffffff
3683
4209ae12 3684extern void ext4_ext_tree_init(handle_t *handle, struct inode *inode);
fffb2739 3685extern int ext4_ext_index_trans_blocks(struct inode *inode, int extents);
e35fd660
TT
3686extern int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,
3687 struct ext4_map_blocks *map, int flags);
d0abb36d 3688extern int ext4_ext_truncate(handle_t *, struct inode *);
26a4c0c6
TT
3689extern int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start,
3690 ext4_lblk_t end);
a86c6181
AT
3691extern void ext4_ext_init(struct super_block *);
3692extern void ext4_ext_release(struct super_block *);
2fe17c10 3693extern long ext4_fallocate(struct file *file, int mode, loff_t offset,
a2df2a63 3694 loff_t len);
6b523df4
JK
3695extern int ext4_convert_unwritten_extents(handle_t *handle, struct inode *inode,
3696 loff_t offset, ssize_t len);
a00713ea
RH
3697extern int ext4_convert_unwritten_io_end_vec(handle_t *handle,
3698 ext4_io_end_t *io_end);
e35fd660
TT
3699extern int ext4_map_blocks(handle_t *handle, struct inode *inode,
3700 struct ext4_map_blocks *map, int flags);
4a092d73
TT
3701extern int ext4_ext_calc_credits_for_single_extent(struct inode *inode,
3702 int num,
3703 struct ext4_ext_path *path);
4a092d73 3704extern int ext4_ext_insert_extent(handle_t *, struct inode *,
dfe50809 3705 struct ext4_ext_path **,
4a092d73 3706 struct ext4_extent *, int);
ed8a1a76
TT
3707extern struct ext4_ext_path *ext4_find_extent(struct inode *, ext4_lblk_t,
3708 struct ext4_ext_path **,
3709 int flags);
7ff5fdda 3710extern void ext4_free_ext_path(struct ext4_ext_path *);
4a092d73 3711extern int ext4_ext_check_inode(struct inode *inode);
fcf6b1b7 3712extern ext4_lblk_t ext4_ext_next_allocated_block(struct ext4_ext_path *path);
3a06d778
AK
3713extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
3714 __u64 start, __u64 len);
bb5835ed
TT
3715extern int ext4_get_es_cache(struct inode *inode,
3716 struct fiemap_extent_info *fieinfo,
3717 __u64 start, __u64 len);
7869a4a6 3718extern int ext4_ext_precache(struct inode *inode);
fcf6b1b7
DM
3719extern int ext4_swap_extents(handle_t *handle, struct inode *inode1,
3720 struct inode *inode2, ext4_lblk_t lblk1,
3721 ext4_lblk_t lblk2, ext4_lblk_t count,
3722 int mark_unwritten,int *err);
0b02f4c0 3723extern int ext4_clu_mapped(struct inode *inode, ext4_lblk_t lclu);
a4130367 3724extern int ext4_datasem_ensure_credits(handle_t *handle, struct inode *inode,
83448bdf
JK
3725 int check_cred, int restart_cred,
3726 int revoke_cred);
8016e29f
HS
3727extern void ext4_ext_replay_shrink_inode(struct inode *inode, ext4_lblk_t end);
3728extern int ext4_ext_replay_set_iblocks(struct inode *inode);
3729extern int ext4_ext_replay_update_ex(struct inode *inode, ext4_lblk_t start,
3730 int len, int unwritten, ext4_fsblk_t pblk);
3731extern int ext4_ext_clear_bb(struct inode *inode);
a4130367 3732
4a092d73 3733
748de673 3734/* move_extent.c */
393d1d1d
DTB
3735extern void ext4_double_down_write_data_sem(struct inode *first,
3736 struct inode *second);
3737extern void ext4_double_up_write_data_sem(struct inode *orig_inode,
3738 struct inode *donor_inode);
748de673
AF
3739extern int ext4_move_extents(struct file *o_filp, struct file *d_filp,
3740 __u64 start_orig, __u64 start_donor,
3741 __u64 len, __u64 *moved_len);
3742
bd2d0210 3743/* page-io.c */
5dabfc78
TT
3744extern int __init ext4_init_pageio(void);
3745extern void ext4_exit_pageio(void);
bd2d0210 3746extern ext4_io_end_t *ext4_init_io_end(struct inode *inode, gfp_t flags);
97a851ed
JK
3747extern ext4_io_end_t *ext4_get_io_end(ext4_io_end_t *io_end);
3748extern int ext4_put_io_end(ext4_io_end_t *io_end);
3749extern void ext4_put_io_end_defer(ext4_io_end_t *io_end);
3750extern void ext4_io_submit_init(struct ext4_io_submit *io,
3751 struct writeback_control *wbc);
2e8fa54e 3752extern void ext4_end_io_rsv_work(struct work_struct *work);
bd2d0210 3753extern void ext4_io_submit(struct ext4_io_submit *io);
e8d6062c
MW
3754int ext4_bio_write_folio(struct ext4_io_submit *io, struct folio *page,
3755 size_t len);
c8cc8816
RH
3756extern struct ext4_io_end_vec *ext4_alloc_io_end_vec(ext4_io_end_t *io_end);
3757extern struct ext4_io_end_vec *ext4_last_io_end_vec(ext4_io_end_t *io_end);
3a06d778 3758
c5e06d10
JL
3759/* mmp.c */
3760extern int ext4_multi_mount_protect(struct super_block *, ext4_fsblk_t);
3761
618f0031
PS
3762/* mmp.c */
3763extern void ext4_stop_mmpd(struct ext4_sb_info *sbi);
3764
c93d8f88
EB
3765/* verity.c */
3766extern const struct fsverity_operations ext4_verityops;
3767
25c6d98f
JK
3768/* orphan.c */
3769extern int ext4_orphan_add(handle_t *, struct inode *);
3770extern int ext4_orphan_del(handle_t *, struct inode *);
3771extern void ext4_orphan_cleanup(struct super_block *sb,
3772 struct ext4_super_block *es);
02f310fc
JK
3773extern void ext4_release_orphan_info(struct super_block *sb);
3774extern int ext4_init_orphan_info(struct super_block *sb);
3775extern int ext4_orphan_file_empty(struct super_block *sb);
3776extern void ext4_orphan_file_block_trigger(
3777 struct jbd2_buffer_trigger_type *triggers,
3778 struct buffer_head *bh,
3779 void *data, size_t size);
25c6d98f 3780
2ccb5fb9 3781/*
48fc7f7e 3782 * Add new method to test whether block and inode bitmaps are properly
2ccb5fb9
AK
3783 * initialized. With uninit_bg reading the block from disk is not enough
3784 * to mark the bitmap uptodate. We need to also zero-out the bitmap
3785 */
3786#define BH_BITMAP_UPTODATE BH_JBDPrivateStart
3787
3788static inline int bitmap_uptodate(struct buffer_head *bh)
3789{
3790 return (buffer_uptodate(bh) &&
3791 test_bit(BH_BITMAP_UPTODATE, &(bh)->b_state));
3792}
3793static inline void set_bitmap_uptodate(struct buffer_head *bh)
3794{
3795 set_bit(BH_BITMAP_UPTODATE, &(bh)->b_state);
3796}
3797
e9e3bcec
ES
3798/* For ioend & aio unwritten conversion wait queues */
3799#define EXT4_WQ_HASH_SZ 37
3800#define ext4_ioend_wq(v) (&ext4__ioend_wq[((unsigned long)(v)) %\
3801 EXT4_WQ_HASH_SZ])
e9e3bcec 3802extern wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ];
e9e3bcec 3803
8f82f840 3804extern int ext4_resize_begin(struct super_block *sb);
827891a3 3805extern int ext4_resize_end(struct super_block *sb, bool update_backups);
8f82f840 3806
74c66bcb
JK
3807static inline void ext4_set_io_unwritten_flag(struct inode *inode,
3808 struct ext4_io_end *io_end)
3809{
3810 if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) {
3811 io_end->flag |= EXT4_IO_END_UNWRITTEN;
3812 atomic_inc(&EXT4_I(inode)->i_unwritten);
3813 }
3814}
3815
3816static inline void ext4_clear_io_unwritten_flag(ext4_io_end_t *io_end)
3817{
3818 struct inode *inode = io_end->inode;
3819
3820 if (io_end->flag & EXT4_IO_END_UNWRITTEN) {
3821 io_end->flag &= ~EXT4_IO_END_UNWRITTEN;
3822 /* Wake up anyone waiting on unwritten extent conversion */
3823 if (atomic_dec_and_test(&EXT4_I(inode)->i_unwritten))
3824 wake_up_all(ext4_ioend_wq(inode));
3825 }
3826}
3827
8ff6daa1 3828extern const struct iomap_ops ext4_iomap_ops;
8cd115bd 3829extern const struct iomap_ops ext4_iomap_overwrite_ops;
09edf4d3 3830extern const struct iomap_ops ext4_iomap_report_ops;
364443cb 3831
7963e5ac
Z
3832static inline int ext4_buffer_uptodate(struct buffer_head *bh)
3833{
3834 /*
3835 * If the buffer has the write error flag, we have failed
3836 * to write out data in the block. In this case, we don't
3837 * have to read the block because we may read the old data
3838 * successfully.
3839 */
5c680150 3840 if (buffer_write_io_error(bh))
7963e5ac
Z
3841 set_buffer_uptodate(bh);
3842 return buffer_uptodate(bh);
3843}
3844
ac27a0ec
DK
3845#endif /* __KERNEL__ */
3846
6a797d27
DW
3847#define EFSBADCRC EBADMSG /* Bad CRC detected */
3848#define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */
3849
3dcf5451 3850#endif /* _EXT4_H */