diff options
author | Al Viro <viro@www.linux.org.uk> | 2005-05-01 11:59:17 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-01 11:59:17 -0400 |
commit | 6a3a16f2ef6f335286e2b2bf8284b0ab4ff38ec0 (patch) | |
tree | ae559ba5915bf0ca29d6d5dfbd9f44e666f388ea | |
parent | d46aa455dd5457fdbebad17db4ff4df655cbfbae (diff) |
[PATCH] reiserfs endianness: clone struct reiserfs_key
struct reiserfs_key cloned; (currently) identical struct in_core_key added.
Places that expect host-endian data in reiserfs_key switched to in_core_key.
Basically, we get annotation of reiserfs_key users and keep the resulting tree
obviously equivalent to original.
Signed-off-by: Al Viro <viro@parcelfarce.linux.theplanet.co.uk>
Cc: <reiserfs-dev@namesys.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | fs/reiserfs/bitmap.c | 4 | ||||
-rw-r--r-- | fs/reiserfs/stree.c | 1 | ||||
-rw-r--r-- | fs/reiserfs/super.c | 4 | ||||
-rw-r--r-- | include/linux/reiserfs_fs.h | 32 |
4 files changed, 34 insertions, 7 deletions
diff --git a/fs/reiserfs/bitmap.c b/fs/reiserfs/bitmap.c index a4e2ed544bbe..f4f16fada14c 100644 --- a/fs/reiserfs/bitmap.c +++ b/fs/reiserfs/bitmap.c | |||
@@ -736,7 +736,7 @@ static inline int this_blocknr_allocation_would_make_it_a_large_file(reiserfs_bl | |||
736 | #ifdef DISPLACE_NEW_PACKING_LOCALITIES | 736 | #ifdef DISPLACE_NEW_PACKING_LOCALITIES |
737 | static inline void displace_new_packing_locality (reiserfs_blocknr_hint_t *hint) | 737 | static inline void displace_new_packing_locality (reiserfs_blocknr_hint_t *hint) |
738 | { | 738 | { |
739 | struct reiserfs_key * key = &hint->key; | 739 | struct in_core_key * key = &hint->key; |
740 | 740 | ||
741 | hint->th->displace_new_blocks = 0; | 741 | hint->th->displace_new_blocks = 0; |
742 | hint->search_start = hint->beg + keyed_hash((char*)(&key->k_objectid),4) % (hint->end - hint->beg); | 742 | hint->search_start = hint->beg + keyed_hash((char*)(&key->k_objectid),4) % (hint->end - hint->beg); |
@@ -777,7 +777,7 @@ static inline int old_way (reiserfs_blocknr_hint_t * hint) | |||
777 | 777 | ||
778 | static inline void hundredth_slices (reiserfs_blocknr_hint_t * hint) | 778 | static inline void hundredth_slices (reiserfs_blocknr_hint_t * hint) |
779 | { | 779 | { |
780 | struct reiserfs_key * key = &hint->key; | 780 | struct in_core_key * key = &hint->key; |
781 | b_blocknr_t slice_start; | 781 | b_blocknr_t slice_start; |
782 | 782 | ||
783 | slice_start = (keyed_hash((char*)(&key->k_dir_id),4) % 100) * (hint->end / 100); | 783 | slice_start = (keyed_hash((char*)(&key->k_dir_id),4) % 100) * (hint->end / 100); |
diff --git a/fs/reiserfs/stree.c b/fs/reiserfs/stree.c index 73ec5212178b..1d380a5da39c 100644 --- a/fs/reiserfs/stree.c +++ b/fs/reiserfs/stree.c | |||
@@ -229,6 +229,7 @@ const struct reiserfs_key MIN_KEY = {0, 0, {{0, 0},}}; | |||
229 | 229 | ||
230 | /* Maximal possible key. It is never in the tree. */ | 230 | /* Maximal possible key. It is never in the tree. */ |
231 | const struct reiserfs_key MAX_KEY = {0xffffffff, 0xffffffff, {{0xffffffff, 0xffffffff},}}; | 231 | const struct reiserfs_key MAX_KEY = {0xffffffff, 0xffffffff, {{0xffffffff, 0xffffffff},}}; |
232 | const struct in_core_key MAX_IN_CORE_KEY = {0xffffffff, 0xffffffff, {{0xffffffff, 0xffffffff},}}; | ||
232 | 233 | ||
233 | 234 | ||
234 | /* Get delimiting key of the buffer by looking for it in the buffers in the path, starting from the bottom | 235 | /* Get delimiting key of the buffer by looking for it in the buffers in the path, starting from the bottom |
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index bc5e8893b5d5..d6d1d7e2801f 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c | |||
@@ -110,7 +110,7 @@ static void reiserfs_unlockfs(struct super_block *s) { | |||
110 | reiserfs_allow_writes(s) ; | 110 | reiserfs_allow_writes(s) ; |
111 | } | 111 | } |
112 | 112 | ||
113 | extern const struct reiserfs_key MAX_KEY; | 113 | extern const struct in_core_key MAX_IN_CORE_KEY; |
114 | 114 | ||
115 | 115 | ||
116 | /* this is used to delete "save link" when there are no items of a | 116 | /* this is used to delete "save link" when there are no items of a |
@@ -164,7 +164,7 @@ static int finish_unfinished (struct super_block * s) | |||
164 | 164 | ||
165 | /* compose key to look for "save" links */ | 165 | /* compose key to look for "save" links */ |
166 | max_cpu_key.version = KEY_FORMAT_3_5; | 166 | max_cpu_key.version = KEY_FORMAT_3_5; |
167 | max_cpu_key.on_disk_key = MAX_KEY; | 167 | max_cpu_key.on_disk_key = MAX_IN_CORE_KEY; |
168 | max_cpu_key.key_length = 3; | 168 | max_cpu_key.key_length = 3; |
169 | 169 | ||
170 | #ifdef CONFIG_QUOTA | 170 | #ifdef CONFIG_QUOTA |
diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index bccff8b17dc4..d0867873a1b5 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h | |||
@@ -433,6 +433,23 @@ static inline void set_offset_v2_k_offset( struct offset_v2 *v2, loff_t offset ) | |||
433 | # define set_offset_v2_k_offset(v2,val) (offset_v2_k_offset(v2) = (val)) | 433 | # define set_offset_v2_k_offset(v2,val) (offset_v2_k_offset(v2) = (val)) |
434 | #endif | 434 | #endif |
435 | 435 | ||
436 | struct in_core_offset_v1 { | ||
437 | __u32 k_offset; | ||
438 | __u32 k_uniqueness; | ||
439 | } __attribute__ ((__packed__)); | ||
440 | |||
441 | struct in_core_offset_v2 { | ||
442 | #ifdef __LITTLE_ENDIAN | ||
443 | /* little endian version */ | ||
444 | __u64 k_offset:60; | ||
445 | __u64 k_type: 4; | ||
446 | #else | ||
447 | /* big endian version */ | ||
448 | __u64 k_type: 4; | ||
449 | __u64 k_offset:60; | ||
450 | #endif | ||
451 | } __attribute__ ((__packed__)); | ||
452 | |||
436 | /* Key of an item determines its location in the S+tree, and | 453 | /* Key of an item determines its location in the S+tree, and |
437 | is composed of 4 components */ | 454 | is composed of 4 components */ |
438 | struct reiserfs_key { | 455 | struct reiserfs_key { |
@@ -445,9 +462,18 @@ struct reiserfs_key { | |||
445 | } __attribute__ ((__packed__)) u; | 462 | } __attribute__ ((__packed__)) u; |
446 | } __attribute__ ((__packed__)); | 463 | } __attribute__ ((__packed__)); |
447 | 464 | ||
465 | struct in_core_key { | ||
466 | __u32 k_dir_id; /* packing locality: by default parent | ||
467 | directory object id */ | ||
468 | __u32 k_objectid; /* object identifier */ | ||
469 | union { | ||
470 | struct in_core_offset_v1 k_offset_v1; | ||
471 | struct in_core_offset_v2 k_offset_v2; | ||
472 | } __attribute__ ((__packed__)) u; | ||
473 | } __attribute__ ((__packed__)); | ||
448 | 474 | ||
449 | struct cpu_key { | 475 | struct cpu_key { |
450 | struct reiserfs_key on_disk_key; | 476 | struct in_core_key on_disk_key; |
451 | int version; | 477 | int version; |
452 | int key_length; /* 3 in all cases but direct2indirect and | 478 | int key_length; /* 3 in all cases but direct2indirect and |
453 | indirect2direct conversion */ | 479 | indirect2direct conversion */ |
@@ -1476,7 +1502,7 @@ struct tree_balance | |||
1476 | int fs_gen; /* saved value of `reiserfs_generation' counter | 1502 | int fs_gen; /* saved value of `reiserfs_generation' counter |
1477 | see FILESYSTEM_CHANGED() macro in reiserfs_fs.h */ | 1503 | see FILESYSTEM_CHANGED() macro in reiserfs_fs.h */ |
1478 | #ifdef DISPLACE_NEW_PACKING_LOCALITIES | 1504 | #ifdef DISPLACE_NEW_PACKING_LOCALITIES |
1479 | struct reiserfs_key key; /* key pointer, to pass to block allocator or | 1505 | struct in_core_key key; /* key pointer, to pass to block allocator or |
1480 | another low-level subsystem */ | 1506 | another low-level subsystem */ |
1481 | #endif | 1507 | #endif |
1482 | } ; | 1508 | } ; |
@@ -2117,7 +2143,7 @@ struct buffer_head * get_FEB (struct tree_balance *); | |||
2117 | struct __reiserfs_blocknr_hint { | 2143 | struct __reiserfs_blocknr_hint { |
2118 | struct inode * inode; /* inode passed to allocator, if we allocate unf. nodes */ | 2144 | struct inode * inode; /* inode passed to allocator, if we allocate unf. nodes */ |
2119 | long block; /* file offset, in blocks */ | 2145 | long block; /* file offset, in blocks */ |
2120 | struct reiserfs_key key; | 2146 | struct in_core_key key; |
2121 | struct path * path; /* search path, used by allocator to deternine search_start by | 2147 | struct path * path; /* search path, used by allocator to deternine search_start by |
2122 | * various ways */ | 2148 | * various ways */ |
2123 | struct reiserfs_transaction_handle * th; /* transaction handle is needed to log super blocks and | 2149 | struct reiserfs_transaction_handle * th; /* transaction handle is needed to log super blocks and |