| Christoph Hellwig | 15aebd2 | 2008-02-22 12:39:12 +0100 | [diff] [blame] | 1 | #ifndef _UDF_I_H | 
|  | 2 | #define _UDF_I_H | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 3 |  | 
| Alessio Igor Bogani | 4d0fb62 | 2010-11-16 18:40:47 +0100 | [diff] [blame] | 4 | /* | 
|  | 5 | * The i_data_sem and i_mutex serve for protection of allocation information | 
|  | 6 | * of a regular files and symlinks. This includes all extents belonging to | 
|  | 7 | * the file/symlink, a fact whether data are in-inode or in external data | 
|  | 8 | * blocks, preallocation, goal block information... When extents are read, | 
|  | 9 | * i_mutex or i_data_sem must be held (for reading is enough in case of | 
|  | 10 | * i_data_sem). When extents are changed, i_data_sem must be held for writing | 
|  | 11 | * and also i_mutex must be held. | 
|  | 12 | * | 
|  | 13 | * For directories i_mutex is used for all the necessary protection. | 
|  | 14 | */ | 
|  | 15 |  | 
| Christoph Hellwig | 15aebd2 | 2008-02-22 12:39:12 +0100 | [diff] [blame] | 16 | struct udf_inode_info { | 
|  | 17 | struct timespec		i_crtime; | 
|  | 18 | /* Physical address of inode */ | 
| Pekka Enberg | 5ca4e4b | 2008-10-15 12:28:03 +0200 | [diff] [blame] | 19 | struct kernel_lb_addr		i_location; | 
| Christoph Hellwig | 15aebd2 | 2008-02-22 12:39:12 +0100 | [diff] [blame] | 20 | __u64			i_unique; | 
|  | 21 | __u32			i_lenEAttr; | 
|  | 22 | __u32			i_lenAlloc; | 
|  | 23 | __u64			i_lenExtents; | 
|  | 24 | __u32			i_next_alloc_block; | 
|  | 25 | __u32			i_next_alloc_goal; | 
|  | 26 | unsigned		i_alloc_type : 3; | 
| marcin.slusarz@gmail.com | d652eef | 2008-01-30 22:03:59 +0100 | [diff] [blame] | 27 | unsigned		i_efe : 1;	/* extendedFileEntry */ | 
|  | 28 | unsigned		i_use : 1;	/* unallocSpaceEntry */ | 
| Christoph Hellwig | 15aebd2 | 2008-02-22 12:39:12 +0100 | [diff] [blame] | 29 | unsigned		i_strat4096 : 1; | 
|  | 30 | unsigned		reserved : 26; | 
|  | 31 | union { | 
| Pekka Enberg | 5ca4e4b | 2008-10-15 12:28:03 +0200 | [diff] [blame] | 32 | struct short_ad	*i_sad; | 
|  | 33 | struct long_ad		*i_lad; | 
| Christoph Hellwig | 15aebd2 | 2008-02-22 12:39:12 +0100 | [diff] [blame] | 34 | __u8		*i_data; | 
|  | 35 | } i_ext; | 
| Alessio Igor Bogani | 4d0fb62 | 2010-11-16 18:40:47 +0100 | [diff] [blame] | 36 | struct rw_semaphore	i_data_sem; | 
| Christoph Hellwig | 15aebd2 | 2008-02-22 12:39:12 +0100 | [diff] [blame] | 37 | struct inode vfs_inode; | 
|  | 38 | }; | 
|  | 39 |  | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 40 | static inline struct udf_inode_info *UDF_I(struct inode *inode) | 
|  | 41 | { | 
|  | 42 | return list_entry(inode, struct udf_inode_info, vfs_inode); | 
|  | 43 | } | 
|  | 44 |  | 
| Christoph Hellwig | 15aebd2 | 2008-02-22 12:39:12 +0100 | [diff] [blame] | 45 | #endif /* _UDF_I_H) */ |