11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _SYSV_H 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _SYSV_H 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/buffer_head.h> 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef __u16 __bitwise __fs16; 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef __u32 __bitwise __fs32; 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/sysv_fs.h> 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * SystemV/V7/Coherent super-block data in memory 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The SystemV/V7/Coherent superblock contains dynamic data (it gets modified 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * while the system is running). This is in contrast to the Minix and Berkeley 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * filesystems (where the superblock is never modified). This affects the 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * sync() operation: we must keep the superblock in a disk buffer and use this 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * one as our "working copy". 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct sysv_sb_info { 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct super_block *s_sb; /* VFS superblock */ 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int s_type; /* file system type: FSTYPE_{XENIX|SYSV|COH} */ 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char s_bytesex; /* bytesex (le/be/pdp) */ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char s_truncate; /* if 1: names > SYSV_NAMELEN chars are truncated */ 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* if 0: they are disallowed (ENAMETOOLONG) */ 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int s_inodes_per_block; /* number of inodes per block */ 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int s_inodes_per_block_1; /* inodes_per_block - 1 */ 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int s_inodes_per_block_bits; /* log2(inodes_per_block) */ 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int s_ind_per_block; /* number of indirections per block */ 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int s_ind_per_block_bits; /* log2(ind_per_block) */ 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int s_ind_per_block_2; /* ind_per_block ^ 2 */ 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int s_toobig_block; /* 10 + ipb + ipb^2 + ipb^3 */ 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int s_block_base; /* physical block number of block 0 */ 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short s_fic_size; /* free inode cache size, NICINOD */ 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short s_flc_size; /* free block list chunk size, NICFREE */ 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* The superblock is kept in one or two disk buffers: */ 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct buffer_head *s_bh1; 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct buffer_head *s_bh2; 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* These are pointers into the disk buffer, to compensate for 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds different superblock layout. */ 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * s_sbd1; /* entire superblock data, for part 1 */ 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds char * s_sbd2; /* entire superblock data, for part 2 */ 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __fs16 *s_sb_fic_count; /* pointer to s_sbd->s_ninode */ 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds sysv_ino_t *s_sb_fic_inodes; /* pointer to s_sbd->s_inode */ 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __fs16 *s_sb_total_free_inodes; /* pointer to s_sbd->s_tinode */ 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __fs16 *s_bcache_count; /* pointer to s_sbd->s_nfree */ 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds sysv_zone_t *s_bcache; /* pointer to s_sbd->s_free */ 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __fs32 *s_free_blocks; /* pointer to s_sbd->s_tfree */ 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __fs32 *s_sb_time; /* pointer to s_sbd->s_time */ 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __fs32 *s_sb_state; /* pointer to s_sbd->s_state, only FSTYPE_SYSV */ 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* We keep those superblock entities that don't change here; 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds this saves us an indirection and perhaps a conversion. */ 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 s_firstinodezone; /* index of first inode zone */ 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 s_firstdatazone; /* same as s_sbd->s_isize */ 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 s_ninodes; /* total number of inodes */ 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 s_ndatazones; /* total number of data zones */ 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 s_nzones; /* same as s_sbd->s_fsize */ 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u16 s_namelen; /* max length of dir entry */ 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int s_forced_ro; 61c07cb01c45d6f5f80da63e0b17dca889dba48cc1Marco Stornelli struct mutex s_lock; 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * SystemV/V7/Coherent FS inode data in memory 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct sysv_inode_info { 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __fs32 i_data[13]; 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds u32 i_dir_start_lookup; 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct inode vfs_inode; 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline struct sysv_inode_info *SYSV_I(struct inode *inode) 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return list_entry(inode, struct sysv_inode_info, vfs_inode); 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline struct sysv_sb_info *SYSV_SB(struct super_block *sb) 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return sb->s_fs_info; 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* identify the FS in memory */ 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum { 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds FSTYPE_NONE = 0, 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds FSTYPE_XENIX, 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds FSTYPE_SYSV4, 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds FSTYPE_SYSV2, 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds FSTYPE_COH, 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds FSTYPE_V7, 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds FSTYPE_AFS, 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds FSTYPE_END, 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SYSV_MAGIC_BASE 0x012FF7B3 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XENIX_SUPER_MAGIC (SYSV_MAGIC_BASE+FSTYPE_XENIX) 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SYSV4_SUPER_MAGIC (SYSV_MAGIC_BASE+FSTYPE_SYSV4) 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SYSV2_SUPER_MAGIC (SYSV_MAGIC_BASE+FSTYPE_SYSV2) 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COH_SUPER_MAGIC (SYSV_MAGIC_BASE+FSTYPE_COH) 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Admissible values for i_nlink: 0.._LINK_MAX */ 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum { 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds XENIX_LINK_MAX = 126, /* ?? */ 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds SYSV_LINK_MAX = 126, /* 127? 251? */ 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds V7_LINK_MAX = 126, /* ?? */ 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds COH_LINK_MAX = 10000, 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void dirty_sb(struct super_block *sb) 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct sysv_sb_info *sbi = SYSV_SB(sb); 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mark_buffer_dirty(sbi->s_bh1); 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (sbi->s_bh1 != sbi->s_bh2) 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mark_buffer_dirty(sbi->s_bh2); 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ialloc.c */ 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct sysv_inode *sysv_raw_inode(struct super_block *, unsigned, 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct buffer_head **); 127dd716e64d60f2ad40e0da7db426d4bfc7eabd5d7Al Viroextern struct inode * sysv_new_inode(const struct inode *, umode_t); 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void sysv_free_inode(struct inode *); 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern unsigned long sysv_count_free_inodes(struct super_block *); 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* balloc.c */ 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern sysv_zone_t sysv_new_block(struct super_block *); 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void sysv_free_block(struct super_block *, sysv_zone_t); 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern unsigned long sysv_count_free_blocks(struct super_block *); 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* itree.c */ 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void sysv_truncate(struct inode *); 138f4e420dc423148fba637af1ab618fa8896dfb2d6Christoph Hellwigextern int sysv_prepare_chunk(struct page *page, loff_t pos, unsigned len); 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* inode.c */ 141b8e1343f67460554ca5321956c440cc064e9889bDavid Howellsextern struct inode *sysv_iget(struct super_block *, unsigned int); 142a9185b41a4f84971b930c519f0c63bd450c4810dChristoph Hellwigextern int sysv_write_inode(struct inode *, struct writeback_control *wbc); 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int sysv_sync_inode(struct inode *); 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void sysv_set_inode(struct inode *, dev_t); 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int sysv_getattr(struct vfsmount *, struct dentry *, struct kstat *); 1463b2b96abbf321891bdde5412d23bc4123c6cccecAdrian Bunkextern int sysv_init_icache(void); 1473b2b96abbf321891bdde5412d23bc4123c6cccecAdrian Bunkextern void sysv_destroy_icache(void); 1483b2b96abbf321891bdde5412d23bc4123c6cccecAdrian Bunk 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* dir.c */ 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct sysv_dir_entry *sysv_find_entry(struct dentry *, struct page **); 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int sysv_add_link(struct dentry *, struct inode *); 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int sysv_delete_entry(struct sysv_dir_entry *, struct page *); 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int sysv_make_empty(struct inode *, struct inode *); 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int sysv_empty_dir(struct inode *); 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void sysv_set_link(struct sysv_dir_entry *, struct page *, 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct inode *); 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern struct sysv_dir_entry *sysv_dotdot(struct inode *, struct page **); 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern ino_t sysv_inode_by_name(struct dentry *); 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 162c5ef1c42c51b1b5b4a401a6517bdda30933ddbafArjan van de Venextern const struct inode_operations sysv_file_inode_operations; 163c5ef1c42c51b1b5b4a401a6517bdda30933ddbafArjan van de Venextern const struct inode_operations sysv_dir_inode_operations; 164c5ef1c42c51b1b5b4a401a6517bdda30933ddbafArjan van de Venextern const struct inode_operations sysv_fast_symlink_inode_operations; 1654b6f5d20b04dcbc3d888555522b90ba6d36c4106Arjan van de Venextern const struct file_operations sysv_file_operations; 1664b6f5d20b04dcbc3d888555522b90ba6d36c4106Arjan van de Venextern const struct file_operations sysv_dir_operations; 167f5e54d6e53a20cef45af7499e86164f0e0d16bb2Christoph Hellwigextern const struct address_space_operations sysv_aops; 168ee9b6d61a2a43c5952eb43283f8db284a4e70b8aJosef 'Jeff' Sipekextern const struct super_operations sysv_sops; 169e16404ed0f3f330dc3e99b95cef69bb60bcd27f7Al Viroextern const struct dentry_operations sysv_dentry_operations; 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum { 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds BYTESEX_LE, 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds BYTESEX_PDP, 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds BYTESEX_BE, 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline u32 PDP_swab(u32 x) 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __LITTLE_ENDIAN 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return ((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16); 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __BIG_ENDIAN 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return ((x & 0xff00ff) << 8) | ((x & 0xff00ff00) >> 8); 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#error BYTESEX 1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline __u32 fs32_to_cpu(struct sysv_sb_info *sbi, __fs32 n) 1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (sbi->s_bytesex == BYTESEX_PDP) 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return PDP_swab((__force __u32)n); 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else if (sbi->s_bytesex == BYTESEX_LE) 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return le32_to_cpu((__force __le32)n); 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return be32_to_cpu((__force __be32)n); 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline __fs32 cpu_to_fs32(struct sysv_sb_info *sbi, __u32 n) 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (sbi->s_bytesex == BYTESEX_PDP) 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return (__force __fs32)PDP_swab(n); 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else if (sbi->s_bytesex == BYTESEX_LE) 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return (__force __fs32)cpu_to_le32(n); 2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else 2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return (__force __fs32)cpu_to_be32(n); 2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline __fs32 fs32_add(struct sysv_sb_info *sbi, __fs32 *n, int d) 2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (sbi->s_bytesex == BYTESEX_PDP) 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(__u32*)n = PDP_swab(PDP_swab(*(__u32*)n)+d); 2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else if (sbi->s_bytesex == BYTESEX_LE) 21607132922aac0caf807c56b9c2a388954b357a8c4Marcin Slusarz le32_add_cpu((__le32 *)n, d); 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else 21807132922aac0caf807c56b9c2a388954b357a8c4Marcin Slusarz be32_add_cpu((__be32 *)n, d); 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return *n; 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline __u16 fs16_to_cpu(struct sysv_sb_info *sbi, __fs16 n) 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (sbi->s_bytesex != BYTESEX_BE) 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return le16_to_cpu((__force __le16)n); 2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return be16_to_cpu((__force __be16)n); 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline __fs16 cpu_to_fs16(struct sysv_sb_info *sbi, __u16 n) 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (sbi->s_bytesex != BYTESEX_BE) 2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return (__force __fs16)cpu_to_le16(n); 2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else 2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return (__force __fs16)cpu_to_be16(n); 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline __fs16 fs16_add(struct sysv_sb_info *sbi, __fs16 *n, int d) 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds if (sbi->s_bytesex != BYTESEX_BE) 24107132922aac0caf807c56b9c2a388954b357a8c4Marcin Slusarz le16_add_cpu((__le16 *)n, d); 2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds else 24307132922aac0caf807c56b9c2a388954b357a8c4Marcin Slusarz be16_add_cpu((__be16 *)n, d); 2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds return *n; 2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _SYSV_H */ 248