Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * Copyright (C) 2017 Oracle.  All Rights Reserved.
0004  *
0005  * Author: Darrick J. Wong <darrick.wong@oracle.com>
0006  */
0007 #ifndef __EXT4_FSMAP_H__
0008 #define __EXT4_FSMAP_H__
0009 
0010 struct fsmap;
0011 
0012 /* internal fsmap representation */
0013 struct ext4_fsmap {
0014     struct list_head    fmr_list;
0015     dev_t       fmr_device; /* device id */
0016     uint32_t    fmr_flags;  /* mapping flags */
0017     uint64_t    fmr_physical;   /* device offset of segment */
0018     uint64_t    fmr_owner;  /* owner id */
0019     uint64_t    fmr_length; /* length of segment, blocks */
0020 };
0021 
0022 struct ext4_fsmap_head {
0023     uint32_t    fmh_iflags; /* control flags */
0024     uint32_t    fmh_oflags; /* output flags */
0025     unsigned int    fmh_count;  /* # of entries in array incl. input */
0026     unsigned int    fmh_entries;    /* # of entries filled in (output). */
0027 
0028     struct ext4_fsmap fmh_keys[2];  /* low and high keys */
0029 };
0030 
0031 void ext4_fsmap_from_internal(struct super_block *sb, struct fsmap *dest,
0032         struct ext4_fsmap *src);
0033 void ext4_fsmap_to_internal(struct super_block *sb, struct ext4_fsmap *dest,
0034         struct fsmap *src);
0035 
0036 /* fsmap to userspace formatter - copy to user & advance pointer */
0037 typedef int (*ext4_fsmap_format_t)(struct ext4_fsmap *, void *);
0038 
0039 int ext4_getfsmap(struct super_block *sb, struct ext4_fsmap_head *head,
0040         ext4_fsmap_format_t formatter, void *arg);
0041 
0042 #define EXT4_QUERY_RANGE_ABORT      1
0043 #define EXT4_QUERY_RANGE_CONTINUE   0
0044 
0045 /*  fmr_owner special values for FS_IOC_GETFSMAP; some share w/ XFS */
0046 #define EXT4_FMR_OWN_FREE   FMR_OWN_FREE      /* free space */
0047 #define EXT4_FMR_OWN_UNKNOWN    FMR_OWN_UNKNOWN   /* unknown owner */
0048 #define EXT4_FMR_OWN_FS     FMR_OWNER('X', 1) /* static fs metadata */
0049 #define EXT4_FMR_OWN_LOG    FMR_OWNER('X', 2) /* journalling log */
0050 #define EXT4_FMR_OWN_INODES FMR_OWNER('X', 5) /* inodes */
0051 #define EXT4_FMR_OWN_GDT    FMR_OWNER('f', 1) /* group descriptors */
0052 #define EXT4_FMR_OWN_RESV_GDT   FMR_OWNER('f', 2) /* reserved gdt blocks */
0053 #define EXT4_FMR_OWN_BLKBM  FMR_OWNER('f', 3) /* block bitmap */
0054 #define EXT4_FMR_OWN_INOBM  FMR_OWNER('f', 4) /* inode bitmap */
0055 
0056 #endif /* __EXT4_FSMAP_H__ */