diff options
Diffstat (limited to 'fs/udf/udf_sb.h')
-rw-r--r-- | fs/udf/udf_sb.h | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/fs/udf/udf_sb.h b/fs/udf/udf_sb.h new file mode 100644 index 000000000000..0e54922daa09 --- /dev/null +++ b/fs/udf/udf_sb.h | |||
@@ -0,0 +1,139 @@ | |||
1 | #ifndef __LINUX_UDF_SB_H | ||
2 | #define __LINUX_UDF_SB_H | ||
3 | |||
4 | /* Since UDF 2.01 is ISO 13346 based... */ | ||
5 | #define UDF_SUPER_MAGIC 0x15013346 | ||
6 | |||
7 | #define UDF_MAX_READ_VERSION 0x0201 | ||
8 | #define UDF_MAX_WRITE_VERSION 0x0201 | ||
9 | |||
10 | #define UDF_FLAG_USE_EXTENDED_FE 0 | ||
11 | #define UDF_VERS_USE_EXTENDED_FE 0x0200 | ||
12 | #define UDF_FLAG_USE_STREAMS 1 | ||
13 | #define UDF_VERS_USE_STREAMS 0x0200 | ||
14 | #define UDF_FLAG_USE_SHORT_AD 2 | ||
15 | #define UDF_FLAG_USE_AD_IN_ICB 3 | ||
16 | #define UDF_FLAG_USE_FILE_CTIME_EA 4 | ||
17 | #define UDF_FLAG_STRICT 5 | ||
18 | #define UDF_FLAG_UNDELETE 6 | ||
19 | #define UDF_FLAG_UNHIDE 7 | ||
20 | #define UDF_FLAG_VARCONV 8 | ||
21 | #define UDF_FLAG_NLS_MAP 9 | ||
22 | #define UDF_FLAG_UTF8 10 | ||
23 | |||
24 | #define UDF_PART_FLAG_UNALLOC_BITMAP 0x0001 | ||
25 | #define UDF_PART_FLAG_UNALLOC_TABLE 0x0002 | ||
26 | #define UDF_PART_FLAG_FREED_BITMAP 0x0004 | ||
27 | #define UDF_PART_FLAG_FREED_TABLE 0x0008 | ||
28 | #define UDF_PART_FLAG_READ_ONLY 0x0010 | ||
29 | #define UDF_PART_FLAG_WRITE_ONCE 0x0020 | ||
30 | #define UDF_PART_FLAG_REWRITABLE 0x0040 | ||
31 | #define UDF_PART_FLAG_OVERWRITABLE 0x0080 | ||
32 | |||
33 | static inline struct udf_sb_info *UDF_SB(struct super_block *sb) | ||
34 | { | ||
35 | return sb->s_fs_info; | ||
36 | } | ||
37 | |||
38 | #define UDF_SB_FREE(X)\ | ||
39 | {\ | ||
40 | if (UDF_SB(X))\ | ||
41 | {\ | ||
42 | if (UDF_SB_PARTMAPS(X))\ | ||
43 | kfree(UDF_SB_PARTMAPS(X));\ | ||
44 | UDF_SB_PARTMAPS(X) = NULL;\ | ||
45 | }\ | ||
46 | } | ||
47 | |||
48 | #define UDF_SB_ALLOC_PARTMAPS(X,Y)\ | ||
49 | {\ | ||
50 | UDF_SB_PARTMAPS(X) = kmalloc(sizeof(struct udf_part_map) * Y, GFP_KERNEL);\ | ||
51 | if (UDF_SB_PARTMAPS(X) != NULL)\ | ||
52 | {\ | ||
53 | UDF_SB_NUMPARTS(X) = Y;\ | ||
54 | memset(UDF_SB_PARTMAPS(X), 0x00, sizeof(struct udf_part_map) * Y);\ | ||
55 | }\ | ||
56 | else\ | ||
57 | {\ | ||
58 | UDF_SB_NUMPARTS(X) = 0;\ | ||
59 | udf_error(X, __FUNCTION__, "Unable to allocate space for %d partition maps", Y);\ | ||
60 | }\ | ||
61 | } | ||
62 | |||
63 | #define UDF_SB_ALLOC_BITMAP(X,Y,Z)\ | ||
64 | {\ | ||
65 | int nr_groups = ((UDF_SB_PARTLEN((X),(Y)) + (sizeof(struct spaceBitmapDesc) << 3) +\ | ||
66 | ((X)->s_blocksize * 8) - 1) / ((X)->s_blocksize * 8));\ | ||
67 | int size = sizeof(struct udf_bitmap) + (sizeof(struct buffer_head *) * nr_groups);\ | ||
68 | if (size <= PAGE_SIZE)\ | ||
69 | UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap = kmalloc(size, GFP_KERNEL);\ | ||
70 | else\ | ||
71 | UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap = vmalloc(size);\ | ||
72 | if (UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap != NULL)\ | ||
73 | {\ | ||
74 | memset(UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap, 0x00, size);\ | ||
75 | UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap->s_block_bitmap =\ | ||
76 | (struct buffer_head **)(UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap + 1);\ | ||
77 | UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap->s_nr_groups = nr_groups;\ | ||
78 | }\ | ||
79 | else\ | ||
80 | {\ | ||
81 | udf_error(X, __FUNCTION__, "Unable to allocate space for bitmap and %d buffer_head pointers", nr_groups);\ | ||
82 | }\ | ||
83 | } | ||
84 | |||
85 | #define UDF_SB_FREE_BITMAP(X,Y,Z)\ | ||
86 | {\ | ||
87 | int i;\ | ||
88 | int nr_groups = UDF_SB_BITMAP_NR_GROUPS(X,Y,Z);\ | ||
89 | int size = sizeof(struct udf_bitmap) + (sizeof(struct buffer_head *) * nr_groups);\ | ||
90 | for (i=0; i<nr_groups; i++)\ | ||
91 | {\ | ||
92 | if (UDF_SB_BITMAP(X,Y,Z,i))\ | ||
93 | udf_release_data(UDF_SB_BITMAP(X,Y,Z,i));\ | ||
94 | }\ | ||
95 | if (size <= PAGE_SIZE)\ | ||
96 | kfree(UDF_SB_PARTMAPS(X)[Y].Z.s_bitmap);\ | ||
97 | else\ | ||
98 | vfree(UDF_SB_PARTMAPS(X)[Y].Z.s_bitmap);\ | ||
99 | } | ||
100 | |||
101 | #define UDF_QUERY_FLAG(X,Y) ( UDF_SB(X)->s_flags & ( 1 << (Y) ) ) | ||
102 | #define UDF_SET_FLAG(X,Y) ( UDF_SB(X)->s_flags |= ( 1 << (Y) ) ) | ||
103 | #define UDF_CLEAR_FLAG(X,Y) ( UDF_SB(X)->s_flags &= ~( 1 << (Y) ) ) | ||
104 | |||
105 | #define UDF_UPDATE_UDFREV(X,Y) ( ((Y) > UDF_SB_UDFREV(X)) ? UDF_SB_UDFREV(X) = (Y) : UDF_SB_UDFREV(X) ) | ||
106 | |||
107 | #define UDF_SB_PARTMAPS(X) ( UDF_SB(X)->s_partmaps ) | ||
108 | #define UDF_SB_PARTTYPE(X,Y) ( UDF_SB_PARTMAPS(X)[(Y)].s_partition_type ) | ||
109 | #define UDF_SB_PARTROOT(X,Y) ( UDF_SB_PARTMAPS(X)[(Y)].s_partition_root ) | ||
110 | #define UDF_SB_PARTLEN(X,Y) ( UDF_SB_PARTMAPS(X)[(Y)].s_partition_len ) | ||
111 | #define UDF_SB_PARTVSN(X,Y) ( UDF_SB_PARTMAPS(X)[(Y)].s_volumeseqnum ) | ||
112 | #define UDF_SB_PARTNUM(X,Y) ( UDF_SB_PARTMAPS(X)[(Y)].s_partition_num ) | ||
113 | #define UDF_SB_TYPESPAR(X,Y) ( UDF_SB_PARTMAPS(X)[(Y)].s_type_specific.s_sparing ) | ||
114 | #define UDF_SB_TYPEVIRT(X,Y) ( UDF_SB_PARTMAPS(X)[(Y)].s_type_specific.s_virtual ) | ||
115 | #define UDF_SB_PARTFUNC(X,Y) ( UDF_SB_PARTMAPS(X)[(Y)].s_partition_func ) | ||
116 | #define UDF_SB_PARTFLAGS(X,Y) ( UDF_SB_PARTMAPS(X)[(Y)].s_partition_flags ) | ||
117 | #define UDF_SB_BITMAP(X,Y,Z,I) ( UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap->s_block_bitmap[I] ) | ||
118 | #define UDF_SB_BITMAP_NR_GROUPS(X,Y,Z) ( UDF_SB_PARTMAPS(X)[(Y)].Z.s_bitmap->s_nr_groups ) | ||
119 | |||
120 | #define UDF_SB_VOLIDENT(X) ( UDF_SB(X)->s_volident ) | ||
121 | #define UDF_SB_NUMPARTS(X) ( UDF_SB(X)->s_partitions ) | ||
122 | #define UDF_SB_PARTITION(X) ( UDF_SB(X)->s_partition ) | ||
123 | #define UDF_SB_SESSION(X) ( UDF_SB(X)->s_session ) | ||
124 | #define UDF_SB_ANCHOR(X) ( UDF_SB(X)->s_anchor ) | ||
125 | #define UDF_SB_LASTBLOCK(X) ( UDF_SB(X)->s_lastblock ) | ||
126 | #define UDF_SB_LVIDBH(X) ( UDF_SB(X)->s_lvidbh ) | ||
127 | #define UDF_SB_LVID(X) ( (struct logicalVolIntegrityDesc *)UDF_SB_LVIDBH(X)->b_data ) | ||
128 | #define UDF_SB_LVIDIU(X) ( (struct logicalVolIntegrityDescImpUse *)&(UDF_SB_LVID(X)->impUse[le32_to_cpu(UDF_SB_LVID(X)->numOfPartitions) * 2 * sizeof(uint32_t)/sizeof(uint8_t)]) ) | ||
129 | |||
130 | #define UDF_SB_UMASK(X) ( UDF_SB(X)->s_umask ) | ||
131 | #define UDF_SB_GID(X) ( UDF_SB(X)->s_gid ) | ||
132 | #define UDF_SB_UID(X) ( UDF_SB(X)->s_uid ) | ||
133 | #define UDF_SB_RECORDTIME(X) ( UDF_SB(X)->s_recordtime ) | ||
134 | #define UDF_SB_SERIALNUM(X) ( UDF_SB(X)->s_serialnum ) | ||
135 | #define UDF_SB_UDFREV(X) ( UDF_SB(X)->s_udfrev ) | ||
136 | #define UDF_SB_FLAGS(X) ( UDF_SB(X)->s_flags ) | ||
137 | #define UDF_SB_VAT(X) ( UDF_SB(X)->s_vat ) | ||
138 | |||
139 | #endif /* __LINUX_UDF_SB_H */ | ||