udf: Perform preallocation only for regular files
[safe/jmp/linux-2.6] / fs / udf / udf_sb.h
index 8308a12..d113b72 100644 (file)
@@ -6,7 +6,7 @@
 /* Since UDF 2.01 is ISO 13346 based... */
 #define UDF_SUPER_MAGIC                        0x15013346
 
-#define UDF_MAX_READ_VERSION           0x0201
+#define UDF_MAX_READ_VERSION           0x0250
 #define UDF_MAX_WRITE_VERSION          0x0201
 
 #define UDF_FLAG_USE_EXTENDED_FE       0
@@ -30,6 +30,7 @@
 #define UDF_FLAG_GID_SET       16
 #define UDF_FLAG_SESSION_SET   17
 #define UDF_FLAG_LASTBLOCK_SET 18
+#define UDF_FLAG_BLOCKSIZE_SET 19
 
 #define UDF_PART_FLAG_UNALLOC_BITMAP   0x0001
 #define UDF_PART_FLAG_UNALLOC_TABLE    0x0002
 #define UDF_VIRTUAL_MAP15              0x1512U
 #define UDF_VIRTUAL_MAP20              0x2012U
 #define UDF_SPARABLE_MAP15             0x1522U
+#define UDF_METADATA_MAP25             0x2511U
+
+#define UDF_INVALID_MODE               ((mode_t)-1)
 
 #pragma pack(1) /* XXX(hch): Why?  This file just defines in-core structures */
 
+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;
+};
+
 struct udf_sparing_data {
        __u16   s_packet_len;
        struct buffer_head *s_spar_map[4];
@@ -82,6 +98,7 @@ struct udf_part_map {
        union {
                struct udf_sparing_data s_sparing;
                struct udf_virtual_data s_virtual;
+               struct udf_meta_data s_metadata;
        } s_type_specific;
        __u32   (*s_partition_func)(struct super_block *, __u32, __u16, __u32);
        __u16   s_volumeseqnum;
@@ -100,7 +117,7 @@ struct udf_sb_info {
 
        /* Sector headers */
        __s32                   s_session;
-       __u32                   s_anchor[3];
+       __u32                   s_anchor;
        __u32                   s_last_block;
 
        struct buffer_head      *s_lvid_bh;
@@ -109,6 +126,8 @@ struct udf_sb_info {
        mode_t                  s_umask;
        gid_t                   s_gid;
        uid_t                   s_uid;
+       mode_t                  s_fmode;
+       mode_t                  s_dmode;
 
        /* Root Info */
        struct timespec         s_record_time;
@@ -129,6 +148,8 @@ struct udf_sb_info {
        struct inode            *s_vat_inode;
 
        struct mutex            s_alloc_mutex;
+       /* Protected by s_alloc_mutex */
+       unsigned int            s_lvid_dirty;
 };
 
 static inline struct udf_sb_info *UDF_SB(struct super_block *sb)