diff options
author | Theodore Ts'o <tytso@mit.edu> | 2008-10-28 13:21:55 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2008-10-28 13:21:55 -0400 |
commit | 5e1f8c9e20a92743eefc9a82c2db835213905e26 (patch) | |
tree | 0c945d1e31b87d1d8c18381f4ffe99122ddb797b /include/linux | |
parent | 8f72fbdf0d92e6127583cc548bf043c60cd4720f (diff) |
ext3: Add support for non-native signed/unsigned htree hash algorithms
The original ext3 hash algorithms assumed that variables of type char
were signed, as God and K&R intended. Unfortunately, this assumption
is not true on some architectures. Userspace support for marking
filesystems with non-native signed/unsigned chars was added two years
ago, but the kernel-side support was never added (until now).
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Cc: akpm@linux-foundation.org
Cc: linux-kernel@vger.kernel.org
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/ext3_fs.h | 28 | ||||
-rw-r--r-- | include/linux/ext3_fs_sb.h | 1 |
2 files changed, 28 insertions, 1 deletions
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index d14f02918483..9004794a35fe 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h | |||
@@ -354,6 +354,13 @@ struct ext3_inode { | |||
354 | #define EXT3_ORPHAN_FS 0x0004 /* Orphans being recovered */ | 354 | #define EXT3_ORPHAN_FS 0x0004 /* Orphans being recovered */ |
355 | 355 | ||
356 | /* | 356 | /* |
357 | * Misc. filesystem flags | ||
358 | */ | ||
359 | #define EXT2_FLAGS_SIGNED_HASH 0x0001 /* Signed dirhash in use */ | ||
360 | #define EXT2_FLAGS_UNSIGNED_HASH 0x0002 /* Unsigned dirhash in use */ | ||
361 | #define EXT2_FLAGS_TEST_FILESYS 0x0004 /* to test development code */ | ||
362 | |||
363 | /* | ||
357 | * Mount flags | 364 | * Mount flags |
358 | */ | 365 | */ |
359 | #define EXT3_MOUNT_CHECK 0x00001 /* Do mount-time checks */ | 366 | #define EXT3_MOUNT_CHECK 0x00001 /* Do mount-time checks */ |
@@ -489,7 +496,23 @@ struct ext3_super_block { | |||
489 | __u16 s_reserved_word_pad; | 496 | __u16 s_reserved_word_pad; |
490 | __le32 s_default_mount_opts; | 497 | __le32 s_default_mount_opts; |
491 | __le32 s_first_meta_bg; /* First metablock block group */ | 498 | __le32 s_first_meta_bg; /* First metablock block group */ |
492 | __u32 s_reserved[190]; /* Padding to the end of the block */ | 499 | __le32 s_mkfs_time; /* When the filesystem was created */ |
500 | __le32 s_jnl_blocks[17]; /* Backup of the journal inode */ | ||
501 | /* 64bit support valid if EXT4_FEATURE_COMPAT_64BIT */ | ||
502 | /*150*/ __le32 s_blocks_count_hi; /* Blocks count */ | ||
503 | __le32 s_r_blocks_count_hi; /* Reserved blocks count */ | ||
504 | __le32 s_free_blocks_count_hi; /* Free blocks count */ | ||
505 | __le16 s_min_extra_isize; /* All inodes have at least # bytes */ | ||
506 | __le16 s_want_extra_isize; /* New inodes should reserve # bytes */ | ||
507 | __le32 s_flags; /* Miscellaneous flags */ | ||
508 | __le16 s_raid_stride; /* RAID stride */ | ||
509 | __le16 s_mmp_interval; /* # seconds to wait in MMP checking */ | ||
510 | __le64 s_mmp_block; /* Block for multi-mount protection */ | ||
511 | __le32 s_raid_stripe_width; /* blocks on all data disks (N*stride)*/ | ||
512 | __u8 s_log_groups_per_flex; /* FLEX_BG group size */ | ||
513 | __u8 s_reserved_char_pad2; | ||
514 | __le16 s_reserved_pad; | ||
515 | __u32 s_reserved[162]; /* Padding to the end of the block */ | ||
493 | }; | 516 | }; |
494 | 517 | ||
495 | #ifdef __KERNEL__ | 518 | #ifdef __KERNEL__ |
@@ -694,6 +717,9 @@ static inline __le16 ext3_rec_len_to_disk(unsigned len) | |||
694 | #define DX_HASH_LEGACY 0 | 717 | #define DX_HASH_LEGACY 0 |
695 | #define DX_HASH_HALF_MD4 1 | 718 | #define DX_HASH_HALF_MD4 1 |
696 | #define DX_HASH_TEA 2 | 719 | #define DX_HASH_TEA 2 |
720 | #define DX_HASH_LEGACY_UNSIGNED 3 | ||
721 | #define DX_HASH_HALF_MD4_UNSIGNED 4 | ||
722 | #define DX_HASH_TEA_UNSIGNED 5 | ||
697 | 723 | ||
698 | #ifdef __KERNEL__ | 724 | #ifdef __KERNEL__ |
699 | 725 | ||
diff --git a/include/linux/ext3_fs_sb.h b/include/linux/ext3_fs_sb.h index e024e38248ff..a4e9216b3a6d 100644 --- a/include/linux/ext3_fs_sb.h +++ b/include/linux/ext3_fs_sb.h | |||
@@ -57,6 +57,7 @@ struct ext3_sb_info { | |||
57 | u32 s_next_generation; | 57 | u32 s_next_generation; |
58 | u32 s_hash_seed[4]; | 58 | u32 s_hash_seed[4]; |
59 | int s_def_hash_version; | 59 | int s_def_hash_version; |
60 | int s_hash_unsigned; /* 3 if hash should be signed, 0 if not */ | ||
60 | struct percpu_counter s_freeblocks_counter; | 61 | struct percpu_counter s_freeblocks_counter; |
61 | struct percpu_counter s_freeinodes_counter; | 62 | struct percpu_counter s_freeinodes_counter; |
62 | struct percpu_counter s_dirs_counter; | 63 | struct percpu_counter s_dirs_counter; |