Commit cdd62b5b authored by Deepa Dinamani's avatar Deepa Dinamani
Browse files

fs: hpfs: Initialize filesystem timestamp ranges



Fill in the appropriate limits to avoid inconsistencies
in the vfs cached inode times when timestamps are
outside the permitted range.

Also change the local_to_gmt() to use time64_t instead
of time32_t.

Signed-off-by: default avatarDeepa Dinamani <deepa.kernel@gmail.com>
Acked-by: default avatarJeff Layton <jlayton@kernel.org>
Cc: mikulas@artax.karlin.mff.cuni.cz
parent 028ca4db
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -334,7 +334,7 @@ long hpfs_ioctl(struct file *file, unsigned cmd, unsigned long arg);
 * local time (HPFS) to GMT (Unix)
 */

static inline time64_t local_to_gmt(struct super_block *s, time32_t t)
static inline time64_t local_to_gmt(struct super_block *s, time64_t t)
{
	extern struct timezone sys_tz;
	return t + sys_tz.tz_minuteswest * 60 + hpfs_sb(s)->sb_timeshift;
@@ -343,9 +343,7 @@ static inline time64_t local_to_gmt(struct super_block *s, time32_t t)
static inline time32_t gmt_to_local(struct super_block *s, time64_t t)
{
	extern struct timezone sys_tz;
	t = t - sys_tz.tz_minuteswest * 60 - hpfs_sb(s)->sb_timeshift;

	return clamp_t(time64_t, t, 0, U32_MAX);
	return t - sys_tz.tz_minuteswest * 60 - hpfs_sb(s)->sb_timeshift;
}

static inline time32_t local_get_seconds(struct super_block *s)
+2 −0
Original line number Diff line number Diff line
@@ -614,6 +614,8 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
	s->s_magic = HPFS_SUPER_MAGIC;
	s->s_op = &hpfs_sops;
	s->s_d_op = &hpfs_dentry_operations;
	s->s_time_min =  local_to_gmt(s, 0);
	s->s_time_max =  local_to_gmt(s, U32_MAX);

	sbi->sb_root = le32_to_cpu(superblock->root);
	sbi->sb_fs_size = le32_to_cpu(superblock->n_sectors);