lkml.org 
[lkml]   [1998]   [Sep]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectPATCH: Remove X86 assumptions in SYS5 fs

This patch

o Removes the assumption that a long is 32bit
o Adds explicit padding for the implied x86 structure padding
o Understands the 3 byte packing used in big endian SYS5 file systems

With this patch I can now also read big endian System 5 partitions on big
endian machines. The code still doesnt support reading big endian on litt.le
endian hosts and vice versa. Such a mount still fails cleanly as the magic
number for the superblock is inverted and thus doesn't match.

Tested with A/UX partitions on a Mac68K.

This should now allow the Alpha to read sys5 1K partitions. If anyone has
an Alpha and a sys5 1K partition to test on please give me feedback.

I still can't read A/UX UFS partitions with Linux. Thats on the to look at
later list.

diff -u --new-file --recursive --exclude-from ../exclude linux.vanilla/fs/sysv/balloc.c linux/fs/sysv/balloc.c
--- linux.vanilla/fs/sysv/balloc.c Tue Sep 8 18:47:11 1998
+++ linux/fs/sysv/balloc.c Sun Sep 13 17:28:35 1998
@@ -52,8 +52,8 @@
* into this block being freed:
*/
if (*sb->sv_sb_flc_count == sb->sv_flc_size) {
- unsigned short * flc_count;
- unsigned long * flc_blocks;
+ u16 * flc_count;
+ u32 * flc_blocks;

bh = sv_getblk(sb, sb->s_dev, block);
if (!bh) {
@@ -154,8 +154,8 @@
return 0;
}
if (*sb->sv_sb_flc_count == 0) { /* the last block continues the free list */
- unsigned short * flc_count;
- unsigned long * flc_blocks;
+ u16 * flc_count;
+ u32 * flc_blocks;

if (!(bh = sv_bread(sb, sb->s_dev, block))) {
printk("sysv_new_block: cannot read free-list block\n");
@@ -247,8 +247,8 @@
}
/* block = sb->sv_sb_flc_blocks[0], the last block continues the free list */
while (1) {
- unsigned short * flc_count;
- unsigned long * flc_blocks;
+ u16 * flc_count;
+ u32 * flc_blocks;

if (block < sb->sv_firstdatazone || block >= sb->sv_nzones) {
printk("sysv_count_free_blocks: new block %d is not in data zone\n",block);
diff -u --new-file --recursive --exclude-from ../exclude linux.vanilla/fs/sysv/fsync.c linux/fs/sysv/fsync.c
--- linux.vanilla/fs/sysv/fsync.c Tue Sep 8 18:47:11 1998
+++ linux/fs/sysv/fsync.c Sun Sep 13 17:51:57 1998
@@ -26,10 +26,10 @@
/* Sync one block. The block number is
* from_coh_ulong(*blockp) if convert=1, *blockp if convert=0.
*/
-static int sync_block (struct inode * inode, unsigned long * blockp, int convert, int wait)
+static int sync_block (struct inode * inode, u32 *blockp, int convert, int wait)
{
struct buffer_head * bh;
- unsigned long tmp, block;
+ u32 tmp, block;
struct super_block * sb;

block = tmp = *blockp;
@@ -59,11 +59,11 @@
}

/* Sync one block full of indirect pointers and read it because we'll need it. */
-static int sync_iblock (struct inode * inode, unsigned long * iblockp, int convert,
+static int sync_iblock (struct inode * inode, u32 * iblockp, int convert,
struct buffer_head * *bh, int wait)
{
int rc;
- unsigned long tmp, block;
+ u32 tmp, block;

*bh = NULL;
block = tmp = *iblockp;
@@ -101,7 +101,7 @@
return err;
}

-static int sync_indirect(struct inode *inode, unsigned long *iblockp, int convert, int wait)
+static int sync_indirect(struct inode *inode, u32 *iblockp, int convert, int wait)
{
int i;
struct buffer_head * ind_bh;
@@ -115,7 +115,7 @@
sb = inode->i_sb;
for (i = 0; i < sb->sv_ind_per_block; i++) {
rc = sync_block (inode,
- ((unsigned long *) ind_bh->b_data) + i, sb->sv_convert,
+ ((u32 *) ind_bh->b_data) + i, sb->sv_convert,
wait);
if (rc > 0)
break;
@@ -141,7 +141,7 @@
sb = inode->i_sb;
for (i = 0; i < sb->sv_ind_per_block; i++) {
rc = sync_indirect (inode,
- ((unsigned long *) dind_bh->b_data) + i, sb->sv_convert,
+ ((u32 *) dind_bh->b_data) + i, sb->sv_convert,
wait);
if (rc > 0)
break;
@@ -152,7 +152,7 @@
return err;
}

-static int sync_tindirect(struct inode *inode, unsigned long *tiblockp, int convert,
+static int sync_tindirect(struct inode *inode, u32 *tiblockp, int convert,
int wait)
{
int i;
@@ -167,7 +167,7 @@
sb = inode->i_sb;
for (i = 0; i < sb->sv_ind_per_block; i++) {
rc = sync_dindirect (inode,
- ((unsigned long *) tind_bh->b_data) + i, sb->sv_convert,
+ ((u32 *) tind_bh->b_data) + i, sb->sv_convert,
wait);
if (rc > 0)
break;
diff -u --new-file --recursive --exclude-from ../exclude linux.vanilla/fs/sysv/inode.c linux/fs/sysv/inode.c
--- linux.vanilla/fs/sysv/inode.c Tue Sep 8 18:47:11 1998
+++ linux/fs/sysv/inode.c Sun Sep 13 17:29:49 1998
@@ -30,7 +30,7 @@
#include <linux/string.h>
#include <linux/locks.h>
#include <linux/init.h>
-
+#include <asm/byteorder.h>
#include <asm/uaccess.h>

#if 0
@@ -648,14 +648,15 @@
static struct buffer_head * inode_getblk(struct inode * inode, int nr, int create)
{
struct super_block *sb;
- unsigned long tmp;
- unsigned long *p;
+ u32 tmp;
+ u32 *p;
struct buffer_head * result;

sb = inode->i_sb;
p = inode->u.sysv_i.i_data + nr;
repeat:
tmp = *p;
+ printk("getblk(%x)\n", tmp);
if (tmp) {
result = sv_getblk(sb, inode->i_dev, tmp);
if (tmp == *p)
@@ -684,7 +685,7 @@
struct buffer_head * bh, int nr, int create)
{
struct super_block *sb;
- unsigned long tmp, block;
+ u32 tmp, block;
sysv_zone_t *p;
struct buffer_head * result;

@@ -782,26 +783,43 @@
return NULL;
}

+#ifdef __BIG_ENDIAN
+
+static inline unsigned long read3byte (unsigned char * p)
+{
+ return (p[2] | (p[1]<<8) | (p[0]<<16));
+}
+
+static inline void write3byte (unsigned char *p , unsigned long val)
+{
+ p[2]=val&0xFF;
+ p[1]=(val>>8)&0xFF;
+ p[0]=(val>>16)&0xFF;
+}
+
+#else

-static inline unsigned long read3byte (char * p)
+static inline unsigned long read3byte (unsigned char * p)
{
return (unsigned long)(*(unsigned short *)p)
| (unsigned long)(*(unsigned char *)(p+2)) << 16;
}

-static inline void write3byte (char * p, unsigned long val)
+static inline void write3byte (unsigned char * p, unsigned long val)
{
*(unsigned short *)p = (unsigned short) val;
*(unsigned char *)(p+2) = val >> 16;
}

-static inline unsigned long coh_read3byte (char * p)
+#endif
+
+static inline unsigned long coh_read3byte (unsigned char * p)
{
return (unsigned long)(*(unsigned char *)p) << 16
| (unsigned long)(*(unsigned short *)(p+1));
}

-static inline void coh_write3byte (char * p, unsigned long val)
+static inline void coh_write3byte (unsigned char * p, unsigned long val)
{
*(unsigned char *)p = val >> 16;
*(unsigned short *)(p+1) = (unsigned short) val;
diff -u --new-file --recursive --exclude-from ../exclude linux.vanilla/fs/sysv/truncate.c linux/fs/sysv/truncate.c
--- linux.vanilla/fs/sysv/truncate.c Tue Sep 8 18:47:11 1998
+++ linux/fs/sysv/truncate.c Sun Sep 13 17:49:28 1998
@@ -41,8 +41,8 @@
{
struct super_block * sb;
unsigned int i;
- unsigned long * p;
- unsigned long block;
+ u32 * p;
+ u32 block;
struct buffer_head * bh;
int retry = 0;

@@ -71,7 +71,7 @@
return retry;
}

-static int trunc_indirect(struct inode * inode, unsigned long offset, unsigned long * p, int convert, unsigned char * dirt)
+static int trunc_indirect(struct inode * inode, unsigned long offset, sysv_zone_t * p, int convert, unsigned char * dirt)
{
unsigned long indtmp, indblock;
struct super_block * sb;
@@ -140,14 +140,14 @@
return retry;
}

-static int trunc_dindirect(struct inode * inode, unsigned long offset, unsigned long * p, int convert, unsigned char * dirt)
+static int trunc_dindirect(struct inode * inode, unsigned long offset, sysv_zone_t * p, int convert, unsigned char * dirt)
{
- unsigned long indtmp, indblock;
+ u32 indtmp, indblock;
struct super_block * sb;
struct buffer_head * indbh;
unsigned int i;
sysv_zone_t * ind;
- unsigned long tmp, block;
+ u32 tmp, block;
int retry = 0;

indblock = indtmp = *p;
@@ -197,14 +197,14 @@
return retry;
}

-static int trunc_tindirect(struct inode * inode, unsigned long offset, unsigned long * p, int convert, unsigned char * dirt)
+static int trunc_tindirect(struct inode * inode, unsigned long offset, sysv_zone_t * p, int convert, unsigned char * dirt)
{
- unsigned long indtmp, indblock;
+ u32 indtmp, indblock;
struct super_block * sb;
struct buffer_head * indbh;
unsigned int i;
sysv_zone_t * ind;
- unsigned long tmp, block;
+ u32 tmp, block;
int retry = 0;

indblock = indtmp = *p;
diff -u --new-file --recursive --exclude-from ../exclude linux.vanilla/include/linux/sysv_fs.h linux/include/linux/sysv_fs.h
--- linux.vanilla/include/linux/sysv_fs.h Tue Sep 8 18:47:22 1998
+++ linux/include/linux/sysv_fs.h Sun Sep 13 17:34:41 1998
@@ -37,28 +37,28 @@
as { byte2, byte3, byte0, byte1 }. We need conversions.
*/

-typedef unsigned long coh_ulong;
+typedef u32 coh_ulong;

-static inline coh_ulong to_coh_ulong (unsigned long x)
+static inline coh_ulong to_coh_ulong (u32 x)
{
return ((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16);
}

-static inline unsigned long from_coh_ulong (coh_ulong x)
+static inline u32 from_coh_ulong (coh_ulong x)
{
return ((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16);
}

/* inode numbers are 16 bit */

-typedef unsigned short sysv_ino_t;
+typedef u16 sysv_ino_t;

/* Block numbers are 24 bit, sometimes stored in 32 bit.
On Coherent FS, they are always stored in PDP-11 manner: the least
significant 16 bits come last.
*/

-typedef unsigned long sysv_zone_t;
+typedef u32 sysv_zone_t;

/* Among the blocks ... */
/* Xenix FS, Coherent FS: block 0 is the boot block, block 1 the super-block.
@@ -75,36 +75,36 @@
#define XENIX_NICINOD 100 /* number of inode cache entries */
#define XENIX_NICFREE 100 /* number of free block list chunk entries */
struct xenix_super_block {
- unsigned short s_isize; /* index of first data zone */
- unsigned long s_fsize __packed2__; /* total number of zones of this fs */
+ u16 s_isize; /* index of first data zone */
+ u32 s_fsize __packed2__; /* total number of zones of this fs */
/* the start of the free block list: */
- unsigned short s_nfree; /* number of free blocks in s_free, <= XENIX_NICFREE */
- unsigned long s_free[XENIX_NICFREE]; /* first free block list chunk */
+ u16 s_nfree; /* number of free blocks in s_free, <= XENIX_NICFREE */
+ u32 s_free[XENIX_NICFREE]; /* first free block list chunk */
/* the cache of free inodes: */
- unsigned short s_ninode; /* number of free inodes in s_inode, <= XENIX_NICINOD */
- sysv_ino_t s_inode[XENIX_NICINOD]; /* some free inodes */
+ u16 s_ninode; /* number of free inodes in s_inode, <= XENIX_NICINOD */
+ sysv_ino_t s_inode[XENIX_NICINOD]; /* some free inodes */
/* locks, not used by Linux: */
- char s_flock; /* lock during free block list manipulation */
- char s_ilock; /* lock during inode cache manipulation */
- char s_fmod; /* super-block modified flag */
- char s_ronly; /* flag whether fs is mounted read-only */
- unsigned long s_time __packed2__; /* time of last super block update */
- unsigned long s_tfree __packed2__; /* total number of free zones */
- unsigned short s_tinode; /* total number of free inodes */
- short s_dinfo[4]; /* device information ?? */
- char s_fname[6]; /* file system volume name */
- char s_fpack[6]; /* file system pack name */
- char s_clean; /* set to 0x46 when filesystem is properly unmounted */
- char s_fill[371];
- long s_magic; /* version of file system */
- long s_type; /* type of file system: 1 for 512 byte blocks
+ char s_flock; /* lock during free block list manipulation */
+ char s_ilock; /* lock during inode cache manipulation */
+ char s_fmod; /* super-block modified flag */
+ char s_ronly; /* flag whether fs is mounted read-only */
+ u32 s_time __packed2__; /* time of last super block update */
+ u32 s_tfree __packed2__; /* total number of free zones */
+ u16 s_tinode; /* total number of free inodes */
+ s16 s_dinfo[4]; /* device information ?? */
+ char s_fname[6]; /* file system volume name */
+ char s_fpack[6]; /* file system pack name */
+ char s_clean; /* set to 0x46 when filesystem is properly unmounted */
+ char s_fill[371];
+ s32 s_magic; /* version of file system */
+ s32 s_type; /* type of file system: 1 for 512 byte blocks
2 for 1024 byte blocks */
};

/* Xenix free list block on disk */
struct xenix_freelist_chunk {
- unsigned short fl_nfree; /* number of free blocks in fl_free, <= XENIX_NICFREE] */
- unsigned long fl_free[XENIX_NICFREE] __packed2__;
+ u16 fl_nfree; /* number of free blocks in fl_free, <= XENIX_NICFREE] */
+ u32 fl_free[XENIX_NICFREE] __packed2__;
};

/* SystemV FS comes in two variants:
@@ -116,116 +116,120 @@

/* SystemV4 super-block data on disk */
struct sysv4_super_block {
- unsigned short s_isize; /* index of first data zone */
- unsigned long s_fsize; /* total number of zones of this fs */
+ u16 s_isize; /* index of first data zone */
+ u16 s_pad0;
+ u32 s_fsize; /* total number of zones of this fs */
/* the start of the free block list: */
- unsigned short s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */
- unsigned long s_free[SYSV_NICFREE]; /* first free block list chunk */
+ u16 s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */
+ u16 s_pad1;
+ u32 s_free[SYSV_NICFREE]; /* first free block list chunk */
/* the cache of free inodes: */
- unsigned short s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */
+ u16 s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */
+ u16 s_pad2;
sysv_ino_t s_inode[SYSV_NICINOD]; /* some free inodes */
/* locks, not used by Linux: */
- char s_flock; /* lock during free block list manipulation */
- char s_ilock; /* lock during inode cache manipulation */
- char s_fmod; /* super-block modified flag */
- char s_ronly; /* flag whether fs is mounted read-only */
- unsigned long s_time; /* time of last super block update */
- short s_dinfo[4]; /* device information ?? */
- unsigned long s_tfree; /* total number of free zones */
- unsigned short s_tinode; /* total number of free inodes */
- char s_fname[6]; /* file system volume name */
- char s_fpack[6]; /* file system pack name */
- long s_fill[12];
- long s_state; /* file system state: 0x7c269d38-s_time means clean */
- long s_magic; /* version of file system */
- long s_type; /* type of file system: 1 for 512 byte blocks
+ char s_flock; /* lock during free block list manipulation */
+ char s_ilock; /* lock during inode cache manipulation */
+ char s_fmod; /* super-block modified flag */
+ char s_ronly; /* flag whether fs is mounted read-only */
+ u32 s_time; /* time of last super block update */
+ s16 s_dinfo[4]; /* device information ?? */
+ u32 s_tfree; /* total number of free zones */
+ u16 s_tinode; /* total number of free inodes */
+ u16 s_pad3;
+ char s_fname[6]; /* file system volume name */
+ char s_fpack[6]; /* file system pack name */
+ s32 s_fill[12];
+ s32 s_state; /* file system state: 0x7c269d38-s_time means clean */
+ s32 s_magic; /* version of file system */
+ s32 s_type; /* type of file system: 1 for 512 byte blocks
2 for 1024 byte blocks */
};

/* SystemV4 free list block on disk */
struct sysv4_freelist_chunk {
- unsigned short fl_nfree; /* number of free blocks in fl_free, <= SYSV_NICFREE] */
- unsigned long fl_free[SYSV_NICFREE];
+ u16 fl_nfree; /* number of free blocks in fl_free, <= SYSV_NICFREE] */
+ u32 fl_free[SYSV_NICFREE];
};

/* SystemV2 super-block data on disk */
struct sysv2_super_block {
- unsigned short s_isize; /* index of first data zone */
- unsigned long s_fsize __packed2__; /* total number of zones of this fs */
+ u16 s_isize; /* index of first data zone */
+ u32 s_fsize __packed2__; /* total number of zones of this fs */
/* the start of the free block list: */
- unsigned short s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */
- unsigned long s_free[SYSV_NICFREE]; /* first free block list chunk */
+ u16 s_nfree; /* number of free blocks in s_free, <= SYSV_NICFREE */
+ u32 s_free[SYSV_NICFREE]; /* first free block list chunk */
/* the cache of free inodes: */
- unsigned short s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */
+ u16 s_ninode; /* number of free inodes in s_inode, <= SYSV_NICINOD */
sysv_ino_t s_inode[SYSV_NICINOD]; /* some free inodes */
/* locks, not used by Linux: */
- char s_flock; /* lock during free block list manipulation */
- char s_ilock; /* lock during inode cache manipulation */
- char s_fmod; /* super-block modified flag */
- char s_ronly; /* flag whether fs is mounted read-only */
- unsigned long s_time __packed2__; /* time of last super block update */
- short s_dinfo[4]; /* device information ?? */
- unsigned long s_tfree __packed2__; /* total number of free zones */
- unsigned short s_tinode; /* total number of free inodes */
- char s_fname[6]; /* file system volume name */
- char s_fpack[6]; /* file system pack name */
- long s_fill[14];
- long s_state; /* file system state: 0xcb096f43 means clean */
- long s_magic; /* version of file system */
- long s_type; /* type of file system: 1 for 512 byte blocks
+ char s_flock; /* lock during free block list manipulation */
+ char s_ilock; /* lock during inode cache manipulation */
+ char s_fmod; /* super-block modified flag */
+ char s_ronly; /* flag whether fs is mounted read-only */
+ u32 s_time __packed2__; /* time of last super block update */
+ s16 s_dinfo[4]; /* device information ?? */
+ u32 s_tfree __packed2__; /* total number of free zones */
+ u16 s_tinode; /* total number of free inodes */
+ char s_fname[6]; /* file system volume name */
+ char s_fpack[6]; /* file system pack name */
+ s32 s_fill[14];
+ s32 s_state; /* file system state: 0xcb096f43 means clean */
+ s32 s_magic; /* version of file system */
+ s32 s_type; /* type of file system: 1 for 512 byte blocks
2 for 1024 byte blocks */
};

/* SystemV2 free list block on disk */
struct sysv2_freelist_chunk {
- unsigned short fl_nfree; /* number of free blocks in fl_free, <= SYSV_NICFREE] */
- unsigned long fl_free[SYSV_NICFREE] __packed2__;
+ u16 fl_nfree; /* number of free blocks in fl_free, <= SYSV_NICFREE] */
+ u32 fl_free[SYSV_NICFREE] __packed2__;
};

/* Coherent super-block data on disk */
#define COH_NICINOD 100 /* number of inode cache entries */
#define COH_NICFREE 64 /* number of free block list chunk entries */
struct coh_super_block {
- unsigned short s_isize; /* index of first data zone */
- coh_ulong s_fsize __packed2__; /* total number of zones of this fs */
+ u16 s_isize; /* index of first data zone */
+ coh_ulong s_fsize __packed2__; /* total number of zones of this fs */
/* the start of the free block list: */
- unsigned short s_nfree; /* number of free blocks in s_free, <= COH_NICFREE */
- coh_ulong s_free[COH_NICFREE] __packed2__; /* first free block list chunk */
+ u16 s_nfree; /* number of free blocks in s_free, <= COH_NICFREE */
+ coh_ulong s_free[COH_NICFREE] __packed2__; /* first free block list chunk */
/* the cache of free inodes: */
- unsigned short s_ninode; /* number of free inodes in s_inode, <= COH_NICINOD */
- sysv_ino_t s_inode[COH_NICINOD]; /* some free inodes */
+ u16 s_ninode; /* number of free inodes in s_inode, <= COH_NICINOD */
+ sysv_ino_t s_inode[COH_NICINOD]; /* some free inodes */
/* locks, not used by Linux: */
- char s_flock; /* lock during free block list manipulation */
- char s_ilock; /* lock during inode cache manipulation */
- char s_fmod; /* super-block modified flag */
- char s_ronly; /* flag whether fs is mounted read-only */
- coh_ulong s_time __packed2__; /* time of last super block update */
- coh_ulong s_tfree __packed2__; /* total number of free zones */
- unsigned short s_tinode; /* total number of free inodes */
- unsigned short s_interleave_m; /* interleave factor */
- unsigned short s_interleave_n;
- char s_fname[6]; /* file system volume name */
- char s_fpack[6]; /* file system pack name */
- unsigned long s_unique; /* zero, not used */
+ char s_flock; /* lock during free block list manipulation */
+ char s_ilock; /* lock during inode cache manipulation */
+ char s_fmod; /* super-block modified flag */
+ char s_ronly; /* flag whether fs is mounted read-only */
+ coh_ulong s_time __packed2__; /* time of last super block update */
+ coh_ulong s_tfree __packed2__; /* total number of free zones */
+ u16 s_tinode; /* total number of free inodes */
+ u16 s_interleave_m; /* interleave factor */
+ u16 s_interleave_n;
+ char s_fname[6]; /* file system volume name */
+ char s_fpack[6]; /* file system pack name */
+ u32 s_unique; /* zero, not used */
};

/* Coherent free list block on disk */
struct coh_freelist_chunk {
- unsigned short fl_nfree; /* number of free blocks in fl_free, <= COH_NICFREE] */
- unsigned long fl_free[COH_NICFREE] __packed2__;
+ u16 fl_nfree; /* number of free blocks in fl_free, <= COH_NICFREE] */
+ u32 fl_free[COH_NICFREE] __packed2__;
};


/* SystemV/Coherent inode data on disk */

struct sysv_inode {
- unsigned short i_mode;
- unsigned short i_nlink;
- unsigned short i_uid;
- unsigned short i_gid;
- unsigned long i_size;
+ u16 i_mode;
+ u16 i_nlink;
+ u16 i_uid;
+ u16 i_gid;
+ u32 i_size;
union { /* directories, regular files, ... */
- char i_addb[3*(10+1+1+1)+1]; /* zone numbers: max. 10 data blocks,
+ unsigned char i_addb[3*(10+1+1+1)+1]; /* zone numbers: max. 10 data blocks,
* then 1 indirection block,
* then 1 double indirection block,
* then 1 triple indirection block.
@@ -236,14 +240,14 @@
/* named pipes on Coherent */
struct {
char p_addp[30];
- short p_pnc;
- short p_prx;
- short p_pwx;
+ s16 p_pnc;
+ s16 p_prx;
+ s16 p_pwx;
} i_p;
} i_a;
- unsigned long i_atime; /* time of last access */
- unsigned long i_mtime; /* time of last modification */
- unsigned long i_ctime; /* time of creation */
+ u32 i_atime; /* time of last access */
+ u32 i_mtime; /* time of last modification */
+ u32 i_ctime; /* time of creation */
};

/* The admissible values for i_mode are listed in <linux/stat.h> :
@@ -301,7 +305,7 @@
/* The number of inodes per block is
sb->sv_inodes_per_block = block_size / sizeof(struct sysv_inode) */
/* The number of indirect pointers per block is
- sb->sv_ind_per_block = block_size / sizeof(unsigned long) */
+ sb->sv_ind_per_block = block_size / sizeof(u32) */


/* SystemV/Coherent directory entry on disk */
diff -u --new-file --recursive --exclude-from ../exclude linux.vanilla/include/linux/sysv_fs_i.h linux/include/linux/sysv_fs_i.h
--- linux.vanilla/include/linux/sysv_fs_i.h Tue Sep 8 18:47:22 1998
+++ linux/include/linux/sysv_fs_i.h Sun Sep 13 17:29:43 1998
@@ -5,11 +5,11 @@
* SystemV/Coherent FS inode data in memory
*/
struct sysv_inode_info {
- unsigned long i_data[10+1+1+1]; /* zone numbers: max. 10 data blocks,
- * then 1 indirection block,
- * then 1 double indirection block,
- * then 1 triple indirection block.
- */
+ u32 i_data[10+1+1+1]; /* zone numbers: max. 10 data blocks,
+ * then 1 indirection block,
+ * then 1 double indirection block,
+ * then 1 triple indirection block.
+ */
};

#endif
diff -u --new-file --recursive --exclude-from ../exclude linux.vanilla/include/linux/sysv_fs_sb.h linux/include/linux/sysv_fs_sb.h
--- linux.vanilla/include/linux/sysv_fs_sb.h Tue Sep 8 18:47:22 1998
+++ linux/include/linux/sysv_fs_sb.h Sun Sep 13 05:57:51 1998
@@ -50,21 +50,21 @@
different superblock layout. */
char * s_sbd1; /* entire superblock data, for part 1 */
char * s_sbd2; /* entire superblock data, for part 2 */
- unsigned short *s_sb_fic_count; /* pointer to s_sbd->s_ninode */
- unsigned short *s_sb_fic_inodes; /* pointer to s_sbd->s_inode */
- unsigned short *s_sb_total_free_inodes; /* pointer to s_sbd->s_tinode */
- unsigned short *s_sb_flc_count; /* pointer to s_sbd->s_nfree */
- unsigned long *s_sb_flc_blocks; /* pointer to s_sbd->s_free */
- unsigned long *s_sb_total_free_blocks;/* pointer to s_sbd->s_tfree */
- unsigned long *s_sb_time; /* pointer to s_sbd->s_time */
- unsigned long *s_sb_state; /* pointer to s_sbd->s_state, only FSTYPE_SYSV */
+ u16 *s_sb_fic_count; /* pointer to s_sbd->s_ninode */
+ u16 *s_sb_fic_inodes; /* pointer to s_sbd->s_inode */
+ u16 *s_sb_total_free_inodes; /* pointer to s_sbd->s_tinode */
+ u16 *s_sb_flc_count; /* pointer to s_sbd->s_nfree */
+ u32 *s_sb_flc_blocks; /* pointer to s_sbd->s_free */
+ u32 *s_sb_total_free_blocks;/* pointer to s_sbd->s_tfree */
+ u32 *s_sb_time; /* pointer to s_sbd->s_time */
+ u32 *s_sb_state; /* pointer to s_sbd->s_state, only FSTYPE_SYSV */
/* We keep those superblock entities that don't change here;
this saves us an indirection and perhaps a conversion. */
- unsigned long s_firstinodezone; /* index of first inode zone */
- unsigned long s_firstdatazone; /* same as s_sbd->s_isize */
- unsigned long s_ninodes; /* total number of inodes */
- unsigned long s_ndatazones; /* total number of data zones */
- unsigned long s_nzones; /* same as s_sbd->s_fsize */
+ u32 s_firstinodezone; /* index of first inode zone */
+ u32 s_firstdatazone; /* same as s_sbd->s_isize */
+ u32 s_ninodes; /* total number of inodes */
+ u32 s_ndatazones; /* total number of data zones */
+ u32 s_nzones; /* same as s_sbd->s_fsize */
};
/* The fields s_ind_per_block_2_1, s_toobig_block are currently unused. */

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/faq.html

\
 
 \ /
  Last update: 2005-03-22 13:44    [W:0.080 / U:0.220 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site