diff options
| author | Al Viro <viro@www.linux.org.uk> | 2005-05-01 08:59:17 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-01 08:59:17 -0700 | 
| commit | 6a3a16f2ef6f335286e2b2bf8284b0ab4ff38ec0 (patch) | |
| tree | ae559ba5915bf0ca29d6d5dfbd9f44e666f388ea /include/linux/reiserfs_fs.h | |
| 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>
Diffstat (limited to 'include/linux/reiserfs_fs.h')
| -rw-r--r-- | include/linux/reiserfs_fs.h | 32 | 
1 files changed, 29 insertions, 3 deletions
| 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 )  # define set_offset_v2_k_offset(v2,val) (offset_v2_k_offset(v2) = (val))  #endif +struct in_core_offset_v1 { +    __u32 k_offset; +    __u32 k_uniqueness; +} __attribute__ ((__packed__)); + +struct in_core_offset_v2 { +#ifdef __LITTLE_ENDIAN +	    /* little endian version */ +	    __u64 k_offset:60; +	    __u64 k_type: 4; +#else +	    /* big endian version */ +	    __u64 k_type: 4; +	    __u64 k_offset:60; +#endif +} __attribute__ ((__packed__)); +  /* Key of an item determines its location in the S+tree, and     is composed of 4 components */  struct reiserfs_key { @@ -445,9 +462,18 @@ struct reiserfs_key {      } __attribute__ ((__packed__)) u;  } __attribute__ ((__packed__)); +struct in_core_key { +    __u32 k_dir_id;    /* packing locality: by default parent +			  directory object id */ +    __u32 k_objectid;  /* object identifier */ +    union { +	struct in_core_offset_v1 k_offset_v1; +	struct in_core_offset_v2 k_offset_v2; +    } __attribute__ ((__packed__)) u; +} __attribute__ ((__packed__));  struct cpu_key { -    struct reiserfs_key on_disk_key; +    struct in_core_key on_disk_key;      int version;      int key_length; /* 3 in all cases but direct2indirect and  		       indirect2direct conversion */ @@ -1476,7 +1502,7 @@ struct tree_balance    int fs_gen;                  /* saved value of `reiserfs_generation' counter  			          see FILESYSTEM_CHANGED() macro in reiserfs_fs.h */  #ifdef DISPLACE_NEW_PACKING_LOCALITIES -  struct reiserfs_key  key;	      /* key pointer, to pass to block allocator or +  struct in_core_key  key;	      /* key pointer, to pass to block allocator or  				 another low-level subsystem */  #endif  } ; @@ -2117,7 +2143,7 @@ struct buffer_head * get_FEB (struct tree_balance *);   struct __reiserfs_blocknr_hint {       struct inode * inode;		/* inode passed to allocator, if we allocate unf. nodes */       long block;			/* file offset, in blocks */ -     struct reiserfs_key key; +     struct in_core_key key;       struct path * path;		/* search path, used by allocator to deternine search_start by  					 * various ways */       struct reiserfs_transaction_handle * th; /* transaction handle is needed to log super blocks and | 
