fs/hpfs/*: fix HPFS support under 64-bit kernel
Subsystems (2)
PATCH 1/1 fs/hpfs/*: fix HPFS support under 64-bit kernel
The following 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.
Regards,
Max
hpfs/hpfs_fn.h renamed from fs/hpfs/hpfs_fn.h +2 -2
@@ -329,13 +329,13 @@* 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;
hpfs/hpfs.h renamed from fs/hpfs/hpfs.h +7 -5
@@ -27,6 +27,8 @@typedef secno fnode_secno ;/* sector number of an fnode */ typedef secno anode_secno ;/* sector number of an anode */ +typedef unsigned 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 @@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 @@ 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;