2005-04-17 02:20:36 +04:00
# ifndef __LINUX_UDF_SB_H
# define __LINUX_UDF_SB_H
2008-02-22 14:39:12 +03:00
# include <linux/mutex.h>
2005-04-17 02:20:36 +04:00
/* Since UDF 2.01 is ISO 13346 based... */
# define UDF_SUPER_MAGIC 0x15013346
2008-04-08 22:37:21 +04:00
# define UDF_MAX_READ_VERSION 0x0250
2005-04-17 02:20:36 +04:00
# define UDF_MAX_WRITE_VERSION 0x0201
# define UDF_FLAG_USE_EXTENDED_FE 0
# define UDF_VERS_USE_EXTENDED_FE 0x0200
# define UDF_FLAG_USE_STREAMS 1
# define UDF_VERS_USE_STREAMS 0x0200
# define UDF_FLAG_USE_SHORT_AD 2
# define UDF_FLAG_USE_AD_IN_ICB 3
# define UDF_FLAG_USE_FILE_CTIME_EA 4
# define UDF_FLAG_STRICT 5
# define UDF_FLAG_UNDELETE 6
# define UDF_FLAG_UNHIDE 7
# define UDF_FLAG_VARCONV 8
# define UDF_FLAG_NLS_MAP 9
# define UDF_FLAG_UTF8 10
2007-07-21 15:37:18 +04:00
# define UDF_FLAG_UID_FORGET 11 /* save -1 for uid to disk */
# define UDF_FLAG_UID_IGNORE 12 /* use sb uid instead of on disk uid */
2006-03-08 08:55:24 +03:00
# define UDF_FLAG_GID_FORGET 13
# define UDF_FLAG_GID_IGNORE 14
2007-07-31 11:39:40 +04:00
# define UDF_FLAG_UID_SET 15
# define UDF_FLAG_GID_SET 16
2008-02-08 15:21:50 +03:00
# define UDF_FLAG_SESSION_SET 17
# define UDF_FLAG_LASTBLOCK_SET 18
2009-03-11 17:57:47 +03:00
# define UDF_FLAG_BLOCKSIZE_SET 19
2005-04-17 02:20:36 +04:00
# define UDF_PART_FLAG_UNALLOC_BITMAP 0x0001
# define UDF_PART_FLAG_UNALLOC_TABLE 0x0002
# define UDF_PART_FLAG_FREED_BITMAP 0x0004
# define UDF_PART_FLAG_FREED_TABLE 0x0008
# define UDF_PART_FLAG_READ_ONLY 0x0010
# define UDF_PART_FLAG_WRITE_ONCE 0x0020
# define UDF_PART_FLAG_REWRITABLE 0x0040
# define UDF_PART_FLAG_OVERWRITABLE 0x0080
2008-02-22 14:39:12 +03:00
# define UDF_MAX_BLOCK_LOADED 8
# define UDF_TYPE1_MAP15 0x1511U
# define UDF_VIRTUAL_MAP15 0x1512U
# define UDF_VIRTUAL_MAP20 0x2012U
# define UDF_SPARABLE_MAP15 0x1522U
2008-04-08 22:37:21 +04:00
# define UDF_METADATA_MAP25 0x2511U
2008-02-22 14:39:12 +03:00
2008-12-02 15:40:11 +03:00
# define UDF_INVALID_MODE ((mode_t)-1)
2008-02-22 14:39:12 +03:00
# pragma pack(1) /* XXX(hch): Why? This file just defines in-core structures */
2008-04-08 22:37:21 +04:00
struct udf_meta_data {
__u32 s_meta_file_loc ;
__u32 s_mirror_file_loc ;
__u32 s_bitmap_file_loc ;
__u32 s_alloc_unit_size ;
__u16 s_align_unit_size ;
__u8 s_dup_md_flag ;
struct inode * s_metadata_fe ;
struct inode * s_mirror_fe ;
struct inode * s_bitmap_fe ;
} ;
2008-02-22 14:39:12 +03:00
struct udf_sparing_data {
__u16 s_packet_len ;
struct buffer_head * s_spar_map [ 4 ] ;
} ;
struct udf_virtual_data {
__u32 s_num_entries ;
__u16 s_start_offset ;
} ;
struct udf_bitmap {
__u32 s_extLength ;
__u32 s_extPosition ;
__u16 s_nr_groups ;
struct buffer_head * * s_block_bitmap ;
} ;
struct udf_part_map {
union {
struct udf_bitmap * s_bitmap ;
struct inode * s_table ;
} s_uspace ;
union {
struct udf_bitmap * s_bitmap ;
struct inode * s_table ;
} s_fspace ;
__u32 s_partition_root ;
__u32 s_partition_len ;
__u16 s_partition_type ;
__u16 s_partition_num ;
union {
struct udf_sparing_data s_sparing ;
struct udf_virtual_data s_virtual ;
2008-04-08 22:37:21 +04:00
struct udf_meta_data s_metadata ;
2008-02-22 14:39:12 +03:00
} s_type_specific ;
__u32 ( * s_partition_func ) ( struct super_block * , __u32 , __u16 , __u32 ) ;
__u16 s_volumeseqnum ;
__u16 s_partition_flags ;
} ;
# pragma pack()
struct udf_sb_info {
struct udf_part_map * s_partmaps ;
__u8 s_volume_ident [ 32 ] ;
/* Overall info */
__u16 s_partitions ;
__u16 s_partition ;
/* Sector headers */
__s32 s_session ;
2009-03-19 18:21:38 +03:00
__u32 s_anchor ;
2008-02-22 14:39:12 +03:00
__u32 s_last_block ;
struct buffer_head * s_lvid_bh ;
/* Default permissions */
mode_t s_umask ;
gid_t s_gid ;
uid_t s_uid ;
2008-11-16 22:52:19 +03:00
mode_t s_fmode ;
mode_t s_dmode ;
2008-02-22 14:39:12 +03:00
/* Root Info */
struct timespec s_record_time ;
/* Fileset Info */
__u16 s_serial_number ;
/* highest UDF revision we have recorded to this media */
__u16 s_udfrev ;
/* Miscellaneous flags */
__u32 s_flags ;
/* Encoding info */
struct nls_table * s_nls_map ;
/* VAT inode */
struct inode * s_vat_inode ;
struct mutex s_alloc_mutex ;
2009-03-16 20:27:37 +03:00
/* Protected by s_alloc_mutex */
unsigned int s_lvid_dirty ;
2008-02-22 14:39:12 +03:00
} ;
2005-04-17 02:20:36 +04:00
static inline struct udf_sb_info * UDF_SB ( struct super_block * sb )
{
return sb - > s_fs_info ;
}
2008-02-08 15:20:30 +03:00
struct logicalVolIntegrityDescImpUse * udf_sb_lvidiu ( struct udf_sb_info * sbi ) ;
2005-04-17 02:20:36 +04:00
2008-02-08 15:20:34 +03:00
int udf_compute_nr_groups ( struct super_block * sb , u32 partition ) ;
2005-04-17 02:20:36 +04:00
# define UDF_QUERY_FLAG(X,Y) ( UDF_SB(X)->s_flags & ( 1 << (Y) ) )
# define UDF_SET_FLAG(X,Y) ( UDF_SB(X)->s_flags |= ( 1 << (Y) ) )
# define UDF_CLEAR_FLAG(X,Y) ( UDF_SB(X)->s_flags &= ~( 1 << (Y) ) )
2007-07-21 15:37:18 +04:00
# endif /* __LINUX_UDF_SB_H */