From: Max Alekseyev The provided patch fixes HPFS filesystem support under 64-bit Linux kernel and closes the bugreport http://bugme.osdl.org/show_bug.cgi?id=4333 The problem is in 'time_t' size which is 8 bytes on 64-bit systems (comparing to 4 bytes on 32-bit systems). The patch introduces local 'time32_t' type of the fixed size 4 and uses it where required. Signed-off-by: Andrew Morton --- 25-akpm/fs/hpfs/hpfs.h | 12 +++++++----- 25-akpm/fs/hpfs/hpfs_fn.h | 4 ++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff -puN fs/hpfs/hpfs_fn.h~fs-hpfs-fix-hpfs-support-under-64-bit-kernel fs/hpfs/hpfs_fn.h --- 25/fs/hpfs/hpfs_fn.h~fs-hpfs-fix-hpfs-support-under-64-bit-kernel 2005-03-21 23:02:32.000000000 -0800 +++ 25-akpm/fs/hpfs/hpfs_fn.h 2005-03-21 23:02:32.000000000 -0800 @@ -325,13 +325,13 @@ unsigned hpfs_count_one_bitmap(struct su * local time (HPFS) to GMT (Unix) */ -static inline time_t local_to_gmt(struct super_block *s, time_t t) +static inline time_t local_to_gmt(struct super_block *s, time32_t t) { extern struct timezone sys_tz; return t + sys_tz.tz_minuteswest * 60 + hpfs_sb(s)->sb_timeshift; } -static inline time_t gmt_to_local(struct super_block *s, time_t t) +static inline time32_t gmt_to_local(struct super_block *s, time_t t) { extern struct timezone sys_tz; return t - sys_tz.tz_minuteswest * 60 - hpfs_sb(s)->sb_timeshift; diff -puN fs/hpfs/hpfs.h~fs-hpfs-fix-hpfs-support-under-64-bit-kernel fs/hpfs/hpfs.h --- 25/fs/hpfs/hpfs.h~fs-hpfs-fix-hpfs-support-under-64-bit-kernel 2005-03-21 23:02:32.000000000 -0800 +++ 25-akpm/fs/hpfs/hpfs.h 2005-03-21 23:02:32.000000000 -0800 @@ -27,6 +27,8 @@ typedef secno dnode_secno; /* sector nu typedef secno fnode_secno; /* sector number of an fnode */ typedef secno anode_secno; /* sector number of an anode */ +typedef u32 time32_t; /* 32-bit time_t type */ + /* sector 0 */ /* The boot block is very like a FAT boot block, except that the @@ -84,9 +86,9 @@ struct hpfs_super_block unsigned zero1; /* 0 */ secno badblocks; /* bad block list */ unsigned zero3; /* 0 */ - time_t last_chkdsk; /* date last checked, 0 if never */ + time32_t last_chkdsk; /* date last checked, 0 if never */ /*unsigned zero4;*/ /* 0 */ - time_t last_optimize; /* date last optimized, 0 if never */ + time32_t last_optimize; /* date last optimized, 0 if never */ secno n_dir_band; /* number of sectors in dir band */ secno dir_band_start; /* first sector in dir band */ secno dir_band_end; /* last sector in dir band */ @@ -287,10 +289,10 @@ struct hpfs_dirent { unsigned not_8x3: 1; /* name is not 8.3 */ unsigned flag15: 1; fnode_secno fnode; /* fnode giving allocation info */ - time_t write_date; /* mtime */ + time32_t write_date; /* mtime */ unsigned file_size; /* file length, bytes */ - time_t read_date; /* atime */ - time_t creation_date; /* ctime */ + time32_t read_date; /* atime */ + time32_t creation_date; /* ctime */ unsigned ea_size; /* total EA length, bytes */ unsigned char no_of_acls : 3; /* number of ACL's */ unsigned char reserver : 5; _