brintos

brintos / linux-shallow public Read only

0
0
Text · 4.3 KiB · 08ec875 Raw
186 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __LINUX_UDF_SB_H3#define __LINUX_UDF_SB_H4 5#include <linux/mutex.h>6#include <linux/bitops.h>7#include <linux/magic.h>8 9/*10 * Even UDF 2.6 media should have version <= 0x250 but apparently there are11 * some broken filesystems with version set to 0x260. Accommodate those.12 */13#define UDF_MAX_READ_VERSION		0x026014#define UDF_MAX_WRITE_VERSION		0x020115 16#define UDF_FLAG_USE_EXTENDED_FE	017#define UDF_VERS_USE_EXTENDED_FE	0x020018#define UDF_FLAG_USE_STREAMS		119#define UDF_VERS_USE_STREAMS		0x020020#define UDF_FLAG_USE_SHORT_AD		221#define UDF_FLAG_USE_AD_IN_ICB		322#define UDF_FLAG_USE_FILE_CTIME_EA	423#define UDF_FLAG_STRICT			524#define UDF_FLAG_UNDELETE		625#define UDF_FLAG_UNHIDE			726#define UDF_FLAG_NOVRS			827#define UDF_FLAG_UID_FORGET     11    /* save -1 for uid to disk */28#define UDF_FLAG_GID_FORGET     1229#define UDF_FLAG_UID_SET	1330#define UDF_FLAG_GID_SET	1431#define UDF_FLAG_SESSION_SET	1532#define UDF_FLAG_LASTBLOCK_SET	1633#define UDF_FLAG_BLOCKSIZE_SET	1734#define UDF_FLAG_INCONSISTENT	1835#define UDF_FLAG_RW_INCOMPAT	19	/* Set when we find RW incompatible36					 * feature */37 38#define UDF_PART_FLAG_UNALLOC_BITMAP	0x000139#define UDF_PART_FLAG_UNALLOC_TABLE	0x000240#define UDF_PART_FLAG_READ_ONLY		0x001041#define UDF_PART_FLAG_WRITE_ONCE	0x002042#define UDF_PART_FLAG_REWRITABLE	0x004043#define UDF_PART_FLAG_OVERWRITABLE	0x008044 45#define UDF_MAX_BLOCK_LOADED	846 47#define UDF_TYPE1_MAP15			0x1511U48#define UDF_VIRTUAL_MAP15		0x1512U49#define UDF_VIRTUAL_MAP20		0x2012U50#define UDF_SPARABLE_MAP15		0x1522U51#define UDF_METADATA_MAP25		0x2511U52 53#define UDF_INVALID_MODE		((umode_t)-1)54 55#define MF_DUPLICATE_MD		0x0156#define MF_MIRROR_FE_LOADED	0x0257 58#define EFSCORRUPTED EUCLEAN59 60struct udf_meta_data {61	__u32	s_meta_file_loc;62	__u32	s_mirror_file_loc;63	__u32	s_bitmap_file_loc;64	__u32	s_alloc_unit_size;65	__u16	s_align_unit_size;66	/*67	 * Partition Reference Number of the associated physical / sparable68	 * partition69	 */70	__u16   s_phys_partition_ref;71	int	s_flags;72	struct inode *s_metadata_fe;73	struct inode *s_mirror_fe;74	struct inode *s_bitmap_fe;75};76 77struct udf_sparing_data {78	__u16	s_packet_len;79	struct buffer_head *s_spar_map[4];80};81 82struct udf_virtual_data {83	__u32	s_num_entries;84	__u16	s_start_offset;85};86 87struct udf_bitmap {88	__u32			s_extPosition;89	int			s_nr_groups;90	struct buffer_head	*s_block_bitmap[] __counted_by(s_nr_groups);91};92 93struct udf_part_map {94	union {95		struct udf_bitmap	*s_bitmap;96		struct inode		*s_table;97	} s_uspace;98	__u32	s_partition_root;99	__u32	s_partition_len;100	__u16	s_partition_type;101	__u16	s_partition_num;102	union {103		struct udf_sparing_data s_sparing;104		struct udf_virtual_data s_virtual;105		struct udf_meta_data s_metadata;106	} s_type_specific;107	__u32	(*s_partition_func)(struct super_block *, __u32, __u16, __u32);108	__u16	s_volumeseqnum;109	__u16	s_partition_flags;110};111 112#pragma pack()113 114struct udf_sb_info {115	struct udf_part_map	*s_partmaps;116	__u8			s_volume_ident[32];117 118	/* Overall info */119	__u16			s_partitions;120	__u16			s_partition;121 122	/* Sector headers */123	__s32			s_session;124	__u32			s_anchor;125	__u32			s_last_block;126 127	struct buffer_head	*s_lvid_bh;128 129	/* Default permissions */130	umode_t			s_umask;131	kgid_t			s_gid;132	kuid_t			s_uid;133	umode_t			s_fmode;134	umode_t			s_dmode;135	/* Lock protecting consistency of above permission settings */136	rwlock_t		s_cred_lock;137 138	/* Root Info */139	struct timespec64	s_record_time;140 141	/* Fileset Info */142	__u16			s_serial_number;143 144	/* highest UDF revision we have recorded to this media */145	__u16			s_udfrev;146 147	/* Miscellaneous flags */148	unsigned long		s_flags;149 150	/* Encoding info */151	struct nls_table	*s_nls_map;152 153	/* VAT inode */154	struct inode		*s_vat_inode;155 156	struct mutex		s_alloc_mutex;157	/* Protected by s_alloc_mutex */158	unsigned int		s_lvid_dirty;159};160 161static inline struct udf_sb_info *UDF_SB(struct super_block *sb)162{163	return sb->s_fs_info;164}165 166struct logicalVolIntegrityDescImpUse *udf_sb_lvidiu(struct super_block *sb);167 168int udf_compute_nr_groups(struct super_block *sb, u32 partition);169 170static inline int UDF_QUERY_FLAG(struct super_block *sb, int flag)171{172	return test_bit(flag, &UDF_SB(sb)->s_flags);173}174 175static inline void UDF_SET_FLAG(struct super_block *sb, int flag)176{177	set_bit(flag, &UDF_SB(sb)->s_flags);178}179 180static inline void UDF_CLEAR_FLAG(struct super_block *sb, int flag)181{182	clear_bit(flag, &UDF_SB(sb)->s_flags);183}184 185#endif /* __LINUX_UDF_SB_H */186