freevxfs: handle big endian HP-UX file systems
To support VxFS filesystems from HP-UX on x86 systems we need to implement byte swapping, and to keep support for Unixware filesystems it needs to be the complicated dual-endian kind ala sysvfs. To do this properly we have to split the on disk and in-core inode so that we can keep the in-core one in native endianness. All other structures are byteswapped on demand. Signed-off-by: Krzysztof Błaszkowski <kb@sysmikro.com.pl> [hch: make spare happy] Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:

committed by
Christoph Hellwig

parent
6b15d6650c
commit
0d83f7fc83
@@ -48,9 +48,9 @@
|
||||
* Linux driver for now.
|
||||
*/
|
||||
struct vxfs_dirblk {
|
||||
u_int16_t d_free; /* free space in dirblock */
|
||||
u_int16_t d_nhash; /* no of hash chains */
|
||||
u_int16_t d_hash[1]; /* hash chain */
|
||||
__fs16 d_free; /* free space in dirblock */
|
||||
__fs16 d_nhash; /* no of hash chains */
|
||||
__fs16 d_hash[1]; /* hash chain */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -63,10 +63,10 @@ struct vxfs_dirblk {
|
||||
* VxFS directory entry.
|
||||
*/
|
||||
struct vxfs_direct {
|
||||
vx_ino_t d_ino; /* inode number */
|
||||
u_int16_t d_reclen; /* record length */
|
||||
u_int16_t d_namelen; /* d_name length */
|
||||
u_int16_t d_hashnext; /* next hash entry */
|
||||
__fs32 d_ino; /* inode number */
|
||||
__fs16 d_reclen; /* record length */
|
||||
__fs16 d_namelen; /* d_name length */
|
||||
__fs16 d_hashnext; /* next hash entry */
|
||||
char d_name[VXFS_NAMELEN]; /* name */
|
||||
};
|
||||
|
||||
@@ -87,6 +87,7 @@ struct vxfs_direct {
|
||||
/*
|
||||
* VXFS_DIRBLKOV is the overhead of a specific dirblock.
|
||||
*/
|
||||
#define VXFS_DIRBLKOV(dbp) ((sizeof(short) * dbp->d_nhash) + 4)
|
||||
#define VXFS_DIRBLKOV(sbi, dbp) \
|
||||
((sizeof(short) * fs16_to_cpu(sbi, dbp->d_nhash)) + 4)
|
||||
|
||||
#endif /* _VXFS_DIR_H_ */
|
||||
|
Reference in New Issue
Block a user