2008-02-22 14:39:12 +03:00
# ifndef _UDF_I_H
# define _UDF_I_H
2013-01-19 06:17:14 +04:00
struct extent_position {
struct buffer_head * bh ;
uint32_t offset ;
struct kernel_lb_addr block ;
} ;
struct udf_ext_cache {
/* Extent position */
struct extent_position epos ;
/* Start logical offset in bytes */
loff_t lstart ;
} ;
2010-11-16 20:40:47 +03:00
/*
* The i_data_sem and i_mutex serve for protection of allocation information
* of a regular files and symlinks . This includes all extents belonging to
* the file / symlink , a fact whether data are in - inode or in external data
* blocks , preallocation , goal block information . . . When extents are read ,
* i_mutex or i_data_sem must be held ( for reading is enough in case of
* i_data_sem ) . When extents are changed , i_data_sem must be held for writing
* and also i_mutex must be held .
*
* For directories i_mutex is used for all the necessary protection .
*/
2008-02-22 14:39:12 +03:00
struct udf_inode_info {
struct timespec i_crtime ;
/* Physical address of inode */
2008-10-15 14:28:03 +04:00
struct kernel_lb_addr i_location ;
2008-02-22 14:39:12 +03:00
__u64 i_unique ;
__u32 i_lenEAttr ;
__u32 i_lenAlloc ;
__u64 i_lenExtents ;
__u32 i_next_alloc_block ;
__u32 i_next_alloc_goal ;
2012-02-14 09:28:42 +04:00
__u32 i_checkpoint ;
2008-02-22 14:39:12 +03:00
unsigned i_alloc_type : 3 ;
2008-01-31 00:03:59 +03:00
unsigned i_efe : 1 ; /* extendedFileEntry */
unsigned i_use : 1 ; /* unallocSpaceEntry */
2008-02-22 14:39:12 +03:00
unsigned i_strat4096 : 1 ;
unsigned reserved : 26 ;
union {
2008-10-15 14:28:03 +04:00
struct short_ad * i_sad ;
struct long_ad * i_lad ;
2008-02-22 14:39:12 +03:00
__u8 * i_data ;
} i_ext ;
2010-11-16 20:40:47 +03:00
struct rw_semaphore i_data_sem ;
2013-01-19 06:17:14 +04:00
struct udf_ext_cache cached_extent ;
/* Spinlock for protecting extent cache */
spinlock_t i_extent_cache_lock ;
2008-02-22 14:39:12 +03:00
struct inode vfs_inode ;
} ;
2005-04-17 02:20:36 +04:00
static inline struct udf_inode_info * UDF_I ( struct inode * inode )
{
2015-03-19 14:28:04 +03:00
return container_of ( inode , struct udf_inode_info , vfs_inode ) ;
2005-04-17 02:20:36 +04:00
}
2008-02-22 14:39:12 +03:00
# endif /* _UDF_I_H) */