xref: /openbmc/linux/fs/ext4/fsmap.h (revision ee00d6b3)
1f5166768STheodore Ts'o // SPDX-License-Identifier: GPL-2.0+
20c9ec4beSDarrick J. Wong /*
30c9ec4beSDarrick J. Wong  * Copyright (C) 2017 Oracle.  All Rights Reserved.
40c9ec4beSDarrick J. Wong  *
50c9ec4beSDarrick J. Wong  * Author: Darrick J. Wong <darrick.wong@oracle.com>
60c9ec4beSDarrick J. Wong  */
70c9ec4beSDarrick J. Wong #ifndef __EXT4_FSMAP_H__
80c9ec4beSDarrick J. Wong #define	__EXT4_FSMAP_H__
90c9ec4beSDarrick J. Wong 
100c9ec4beSDarrick J. Wong struct fsmap;
110c9ec4beSDarrick J. Wong 
120c9ec4beSDarrick J. Wong /* internal fsmap representation */
130c9ec4beSDarrick J. Wong struct ext4_fsmap {
140c9ec4beSDarrick J. Wong 	struct list_head	fmr_list;
150c9ec4beSDarrick J. Wong 	dev_t		fmr_device;	/* device id */
160c9ec4beSDarrick J. Wong 	uint32_t	fmr_flags;	/* mapping flags */
170c9ec4beSDarrick J. Wong 	uint64_t	fmr_physical;	/* device offset of segment */
180c9ec4beSDarrick J. Wong 	uint64_t	fmr_owner;	/* owner id */
190c9ec4beSDarrick J. Wong 	uint64_t	fmr_length;	/* length of segment, blocks */
200c9ec4beSDarrick J. Wong };
210c9ec4beSDarrick J. Wong 
220c9ec4beSDarrick J. Wong struct ext4_fsmap_head {
230c9ec4beSDarrick J. Wong 	uint32_t	fmh_iflags;	/* control flags */
240c9ec4beSDarrick J. Wong 	uint32_t	fmh_oflags;	/* output flags */
250c9ec4beSDarrick J. Wong 	unsigned int	fmh_count;	/* # of entries in array incl. input */
260c9ec4beSDarrick J. Wong 	unsigned int	fmh_entries;	/* # of entries filled in (output). */
270c9ec4beSDarrick J. Wong 
280c9ec4beSDarrick J. Wong 	struct ext4_fsmap fmh_keys[2];	/* low and high keys */
290c9ec4beSDarrick J. Wong };
300c9ec4beSDarrick J. Wong 
310c9ec4beSDarrick J. Wong void ext4_fsmap_from_internal(struct super_block *sb, struct fsmap *dest,
320c9ec4beSDarrick J. Wong 		struct ext4_fsmap *src);
330c9ec4beSDarrick J. Wong void ext4_fsmap_to_internal(struct super_block *sb, struct ext4_fsmap *dest,
340c9ec4beSDarrick J. Wong 		struct fsmap *src);
350c9ec4beSDarrick J. Wong 
360c9ec4beSDarrick J. Wong /* fsmap to userspace formatter - copy to user & advance pointer */
370c9ec4beSDarrick J. Wong typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
380c9ec4beSDarrick J. Wong 
390c9ec4beSDarrick J. Wong int ext4_getfsmap(struct super_block *sb, struct ext4_fsmap_head *head,
400c9ec4beSDarrick J. Wong 		ext4_fsmap_format_t formatter, void *arg);
410c9ec4beSDarrick J. Wong 
420c9ec4beSDarrick J. Wong #define EXT4_QUERY_RANGE_ABORT		1
430c9ec4beSDarrick J. Wong #define EXT4_QUERY_RANGE_CONTINUE	0
440c9ec4beSDarrick J. Wong 
450c9ec4beSDarrick J. Wong /*	fmr_owner special values for FS_IOC_GETFSMAP; some share w/ XFS */
460c9ec4beSDarrick J. Wong #define EXT4_FMR_OWN_FREE	FMR_OWN_FREE      /* free space */
470c9ec4beSDarrick J. Wong #define EXT4_FMR_OWN_UNKNOWN	FMR_OWN_UNKNOWN   /* unknown owner */
480c9ec4beSDarrick J. Wong #define EXT4_FMR_OWN_FS		FMR_OWNER('X', 1) /* static fs metadata */
490c9ec4beSDarrick J. Wong #define EXT4_FMR_OWN_LOG	FMR_OWNER('X', 2) /* journalling log */
500c9ec4beSDarrick J. Wong #define EXT4_FMR_OWN_INODES	FMR_OWNER('X', 5) /* inodes */
510c9ec4beSDarrick J. Wong #define EXT4_FMR_OWN_GDT	FMR_OWNER('f', 1) /* group descriptors */
520c9ec4beSDarrick J. Wong #define EXT4_FMR_OWN_RESV_GDT	FMR_OWNER('f', 2) /* reserved gdt blocks */
53*ee00d6b3SRitesh Harjani #define EXT4_FMR_OWN_BLKBM	FMR_OWNER('f', 3) /* block bitmap */
54*ee00d6b3SRitesh Harjani #define EXT4_FMR_OWN_INOBM	FMR_OWNER('f', 4) /* inode bitmap */
550c9ec4beSDarrick J. Wong 
560c9ec4beSDarrick J. Wong #endif /* __EXT4_FSMAP_H__ */
57