linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps
@ 2018-07-13 14:47 Arnd Bergmann
  2018-07-13 14:47 ` [PATCH 2/2] [RESEND] jffs2: use unsigned 32-bit timstamps consistently Arnd Bergmann
  2018-07-13 20:47 ` [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps Richard Weinberger
  0 siblings, 2 replies; 5+ messages in thread
From: Arnd Bergmann @ 2018-07-13 14:47 UTC (permalink / raw)
  To: Andrew Morton, Alexander Viro
  Cc: y2038, linux-fsdevel, Arnd Bergmann, David Woodhouse,
	Deepa Dinamani, Jan Kara, Richard Weinberger, David Howells,
	linux-mtd, linux-kernel

The VFS now uses timespec64 timestamps consistently, but jffs2 still
converts them to 32-bit numbers on the storage medium. As the helper
functions for the conversion (get_seconds() and timespec_to_timespec64())
are now deprecated, let's change them over to the more modern
replacements.

This keeps the traditional interpretation of those values, where
the on-disk 32-bit numbers are taken to be negative numbers, i.e.
dates before 1970, on 32-bit machines, but future numbers past 2038
on 64-bit machines.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
I originally sent these two patches on Jun 19, but got no reply aside
from a harmless sparse warning reported by the kbuild test robot.

Looking at the git history for jffs2, it seems that David Woodhouse
hasn't applied any patches for over two years, so I suppose he's
not taking these either.

Al or Andrew, could you pick these up instead?
---
 fs/jffs2/dir.c      | 32 ++++++++++++++++----------------
 fs/jffs2/file.c     |  6 +++---
 fs/jffs2/fs.c       | 12 ++++++------
 fs/jffs2/os-linux.h |  3 ++-
 4 files changed, 27 insertions(+), 26 deletions(-)

diff --git a/fs/jffs2/dir.c b/fs/jffs2/dir.c
index b2944f9218f7..f20cff1194bb 100644
--- a/fs/jffs2/dir.c
+++ b/fs/jffs2/dir.c
@@ -201,7 +201,7 @@ static int jffs2_create(struct inode *dir_i, struct dentry *dentry,
 	if (ret)
 		goto fail;
 
-	dir_i->i_mtime = dir_i->i_ctime = timespec_to_timespec64(ITIME(je32_to_cpu(ri->ctime)));
+	dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(ri->ctime));
 
 	jffs2_free_raw_inode(ri);
 
@@ -227,14 +227,14 @@ static int jffs2_unlink(struct inode *dir_i, struct dentry *dentry)
 	struct jffs2_inode_info *dir_f = JFFS2_INODE_INFO(dir_i);
 	struct jffs2_inode_info *dead_f = JFFS2_INODE_INFO(d_inode(dentry));
 	int ret;
-	uint32_t now = get_seconds();
+	uint32_t now = JFFS2_NOW();
 
 	ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name,
 			      dentry->d_name.len, dead_f, now);
 	if (dead_f->inocache)
 		set_nlink(d_inode(dentry), dead_f->inocache->pino_nlink);
 	if (!ret)
-		dir_i->i_mtime = dir_i->i_ctime = timespec_to_timespec64(ITIME(now));
+		dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
 	return ret;
 }
 /***********************************************************************/
@@ -260,7 +260,7 @@ static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct de
 	type = (d_inode(old_dentry)->i_mode & S_IFMT) >> 12;
 	if (!type) type = DT_REG;
 
-	now = get_seconds();
+	now = JFFS2_NOW();
 	ret = jffs2_do_link(c, dir_f, f->inocache->ino, type, dentry->d_name.name, dentry->d_name.len, now);
 
 	if (!ret) {
@@ -268,7 +268,7 @@ static int jffs2_link (struct dentry *old_dentry, struct inode *dir_i, struct de
 		set_nlink(d_inode(old_dentry), ++f->inocache->pino_nlink);
 		mutex_unlock(&f->sem);
 		d_instantiate(dentry, d_inode(old_dentry));
-		dir_i->i_mtime = dir_i->i_ctime = timespec_to_timespec64(ITIME(now));
+		dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
 		ihold(d_inode(old_dentry));
 	}
 	return ret;
@@ -400,7 +400,7 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
 	rd->pino = cpu_to_je32(dir_i->i_ino);
 	rd->version = cpu_to_je32(++dir_f->highest_version);
 	rd->ino = cpu_to_je32(inode->i_ino);
-	rd->mctime = cpu_to_je32(get_seconds());
+	rd->mctime = cpu_to_je32(JFFS2_NOW());
 	rd->nsize = namelen;
 	rd->type = DT_LNK;
 	rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
@@ -418,7 +418,7 @@ static int jffs2_symlink (struct inode *dir_i, struct dentry *dentry, const char
 		goto fail;
 	}
 
-	dir_i->i_mtime = dir_i->i_ctime = timespec_to_timespec64(ITIME(je32_to_cpu(rd->mctime)));
+	dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime));
 
 	jffs2_free_raw_dirent(rd);
 
@@ -543,7 +543,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, umode_t mode
 	rd->pino = cpu_to_je32(dir_i->i_ino);
 	rd->version = cpu_to_je32(++dir_f->highest_version);
 	rd->ino = cpu_to_je32(inode->i_ino);
-	rd->mctime = cpu_to_je32(get_seconds());
+	rd->mctime = cpu_to_je32(JFFS2_NOW());
 	rd->nsize = namelen;
 	rd->type = DT_DIR;
 	rd->node_crc = cpu_to_je32(crc32(0, rd, sizeof(*rd)-8));
@@ -561,7 +561,7 @@ static int jffs2_mkdir (struct inode *dir_i, struct dentry *dentry, umode_t mode
 		goto fail;
 	}
 
-	dir_i->i_mtime = dir_i->i_ctime = timespec_to_timespec64(ITIME(je32_to_cpu(rd->mctime)));
+	dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime));
 	inc_nlink(dir_i);
 
 	jffs2_free_raw_dirent(rd);
@@ -588,7 +588,7 @@ static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry)
 	struct jffs2_inode_info *f = JFFS2_INODE_INFO(d_inode(dentry));
 	struct jffs2_full_dirent *fd;
 	int ret;
-	uint32_t now = get_seconds();
+	uint32_t now = JFFS2_NOW();
 
 	for (fd = f->dents ; fd; fd = fd->next) {
 		if (fd->ino)
@@ -598,7 +598,7 @@ static int jffs2_rmdir (struct inode *dir_i, struct dentry *dentry)
 	ret = jffs2_do_unlink(c, dir_f, dentry->d_name.name,
 			      dentry->d_name.len, f, now);
 	if (!ret) {
-		dir_i->i_mtime = dir_i->i_ctime = timespec_to_timespec64(ITIME(now));
+		dir_i->i_mtime = dir_i->i_ctime = ITIME(now);
 		clear_nlink(d_inode(dentry));
 		drop_nlink(dir_i);
 	}
@@ -712,7 +712,7 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, umode_t mode
 	rd->pino = cpu_to_je32(dir_i->i_ino);
 	rd->version = cpu_to_je32(++dir_f->highest_version);
 	rd->ino = cpu_to_je32(inode->i_ino);
-	rd->mctime = cpu_to_je32(get_seconds());
+	rd->mctime = cpu_to_je32(JFFS2_NOW());
 	rd->nsize = namelen;
 
 	/* XXX: This is ugly. */
@@ -733,7 +733,7 @@ static int jffs2_mknod (struct inode *dir_i, struct dentry *dentry, umode_t mode
 		goto fail;
 	}
 
-	dir_i->i_mtime = dir_i->i_ctime = timespec_to_timespec64(ITIME(je32_to_cpu(rd->mctime)));
+	dir_i->i_mtime = dir_i->i_ctime = ITIME(je32_to_cpu(rd->mctime));
 
 	jffs2_free_raw_dirent(rd);
 
@@ -797,7 +797,7 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
 	type = (d_inode(old_dentry)->i_mode & S_IFMT) >> 12;
 	if (!type) type = DT_REG;
 
-	now = get_seconds();
+	now = JFFS2_NOW();
 	ret = jffs2_do_link(c, JFFS2_INODE_INFO(new_dir_i),
 			    d_inode(old_dentry)->i_ino, type,
 			    new_dentry->d_name.name, new_dentry->d_name.len, now);
@@ -853,14 +853,14 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
 		 * caller won't do it on its own since we are returning an error.
 		 */
 		d_invalidate(new_dentry);
-		new_dir_i->i_mtime = new_dir_i->i_ctime = timespec_to_timespec64(ITIME(now));
+		new_dir_i->i_mtime = new_dir_i->i_ctime = ITIME(now);
 		return ret;
 	}
 
 	if (d_is_dir(old_dentry))
 		drop_nlink(old_dir_i);
 
-	new_dir_i->i_mtime = new_dir_i->i_ctime = old_dir_i->i_mtime = old_dir_i->i_ctime = timespec_to_timespec64(ITIME(now));
+	new_dir_i->i_mtime = new_dir_i->i_ctime = old_dir_i->i_mtime = old_dir_i->i_ctime = ITIME(now);
 
 	return 0;
 }
diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c
index 481afd4c2e1a..7d8654a1472e 100644
--- a/fs/jffs2/file.c
+++ b/fs/jffs2/file.c
@@ -175,7 +175,7 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping,
 		ri.uid = cpu_to_je16(i_uid_read(inode));
 		ri.gid = cpu_to_je16(i_gid_read(inode));
 		ri.isize = cpu_to_je32(max((uint32_t)inode->i_size, pageofs));
-		ri.atime = ri.ctime = ri.mtime = cpu_to_je32(get_seconds());
+		ri.atime = ri.ctime = ri.mtime = cpu_to_je32(JFFS2_NOW());
 		ri.offset = cpu_to_je32(inode->i_size);
 		ri.dsize = cpu_to_je32(pageofs - inode->i_size);
 		ri.csize = cpu_to_je32(0);
@@ -283,7 +283,7 @@ static int jffs2_write_end(struct file *filp, struct address_space *mapping,
 	ri->uid = cpu_to_je16(i_uid_read(inode));
 	ri->gid = cpu_to_je16(i_gid_read(inode));
 	ri->isize = cpu_to_je32((uint32_t)inode->i_size);
-	ri->atime = ri->ctime = ri->mtime = cpu_to_je32(get_seconds());
+	ri->atime = ri->ctime = ri->mtime = cpu_to_je32(JFFS2_NOW());
 
 	/* In 2.4, it was already kmapped by generic_file_write(). Doesn't
 	   hurt to do it again. The alternative is ifdefs, which are ugly. */
@@ -308,7 +308,7 @@ static int jffs2_write_end(struct file *filp, struct address_space *mapping,
 			inode->i_size = pos + writtenlen;
 			inode->i_blocks = (inode->i_size + 511) >> 9;
 
-			inode->i_ctime = inode->i_mtime = timespec_to_timespec64(ITIME(je32_to_cpu(ri->ctime)));
+			inode->i_ctime = inode->i_mtime = ITIME(je32_to_cpu(ri->ctime));
 		}
 	}
 
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c
index 0ecfb8ea38cd..eab04eca95a3 100644
--- a/fs/jffs2/fs.c
+++ b/fs/jffs2/fs.c
@@ -146,9 +146,9 @@ int jffs2_do_setattr (struct inode *inode, struct iattr *iattr)
 		return PTR_ERR(new_metadata);
 	}
 	/* It worked. Update the inode */
-	inode->i_atime = timespec_to_timespec64(ITIME(je32_to_cpu(ri->atime)));
-	inode->i_ctime = timespec_to_timespec64(ITIME(je32_to_cpu(ri->ctime)));
-	inode->i_mtime = timespec_to_timespec64(ITIME(je32_to_cpu(ri->mtime)));
+	inode->i_atime = ITIME(je32_to_cpu(ri->atime));
+	inode->i_ctime = ITIME(je32_to_cpu(ri->ctime));
+	inode->i_mtime = ITIME(je32_to_cpu(ri->mtime));
 	inode->i_mode = jemode_to_cpu(ri->mode);
 	i_uid_write(inode, je16_to_cpu(ri->uid));
 	i_gid_write(inode, je16_to_cpu(ri->gid));
@@ -280,9 +280,9 @@ struct inode *jffs2_iget(struct super_block *sb, unsigned long ino)
 	i_uid_write(inode, je16_to_cpu(latest_node.uid));
 	i_gid_write(inode, je16_to_cpu(latest_node.gid));
 	inode->i_size = je32_to_cpu(latest_node.isize);
-	inode->i_atime = timespec_to_timespec64(ITIME(je32_to_cpu(latest_node.atime)));
-	inode->i_mtime = timespec_to_timespec64(ITIME(je32_to_cpu(latest_node.mtime)));
-	inode->i_ctime = timespec_to_timespec64(ITIME(je32_to_cpu(latest_node.ctime)));
+	inode->i_atime = ITIME(je32_to_cpu(latest_node.atime));
+	inode->i_mtime = ITIME(je32_to_cpu(latest_node.mtime));
+	inode->i_ctime = ITIME(je32_to_cpu(latest_node.ctime));
 
 	set_nlink(inode, f->inocache->pino_nlink);
 
diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h
index c2fbec19c616..acbe1f722f2d 100644
--- a/fs/jffs2/os-linux.h
+++ b/fs/jffs2/os-linux.h
@@ -31,7 +31,8 @@ struct kvec;
 #define JFFS2_F_I_GID(f) (i_gid_read(OFNI_EDONI_2SFFJ(f)))
 #define JFFS2_F_I_RDEV(f) (OFNI_EDONI_2SFFJ(f)->i_rdev)
 
-#define ITIME(sec) ((struct timespec){sec, 0})
+#define ITIME(sec) ((struct timespec64){(int32_t)sec, 0})
+#define JFFS2_NOW() (ktime_get_real_seconds())
 #define I_SEC(tv) ((tv).tv_sec)
 #define JFFS2_F_I_CTIME(f) (OFNI_EDONI_2SFFJ(f)->i_ctime.tv_sec)
 #define JFFS2_F_I_MTIME(f) (OFNI_EDONI_2SFFJ(f)->i_mtime.tv_sec)
-- 
2.9.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/2] [RESEND] jffs2: use unsigned 32-bit timstamps consistently
  2018-07-13 14:47 [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps Arnd Bergmann
@ 2018-07-13 14:47 ` Arnd Bergmann
  2018-07-13 20:47 ` [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps Richard Weinberger
  1 sibling, 0 replies; 5+ messages in thread
From: Arnd Bergmann @ 2018-07-13 14:47 UTC (permalink / raw)
  To: Andrew Morton, Alexander Viro
  Cc: y2038, linux-fsdevel, Arnd Bergmann, David Woodhouse, linux-mtd,
	linux-kernel

Most users of jffs2 are 32-bit systems that traditionally only support
timestamps using a 32-bit signed time_t, in the range from years 1902 to
2038. On 64-bit systems, jffs2 however interpreted the same timestamps
as unsigned values, reading back negative times (before 1970) as times
between 2038 and 2106.

Now that Linux supports 64-bit inode timestamps even on 32-bit systems,
let's use the second interpretation everywhere to allow jffs2 to be
used on 32-bit systems beyond 2038 without a fundamental change to the
inode format.

This has a slight risk of regressions, when existing files with timestamps
before 1970 are present in file system images and are now interpreted
as future time stamps. I considered moving the wraparound point a bit,
e.g. to 1960, in order to deal with timestamps that ended up on Dec 31,
1969 due to incorrect timezone handling. However, this would complicate
the implementation unnecessarily, so I went with the simplest possible
method of extending the timestamps.

Writing files with timestamps before 1970 or after 2106 now results
in those times being clamped in the file system.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
 fs/jffs2/os-linux.h | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/fs/jffs2/os-linux.h b/fs/jffs2/os-linux.h
index acbe1f722f2d..a2dbbb3f4c74 100644
--- a/fs/jffs2/os-linux.h
+++ b/fs/jffs2/os-linux.h
@@ -31,13 +31,13 @@ struct kvec;
 #define JFFS2_F_I_GID(f) (i_gid_read(OFNI_EDONI_2SFFJ(f)))
 #define JFFS2_F_I_RDEV(f) (OFNI_EDONI_2SFFJ(f)->i_rdev)
 
-#define ITIME(sec) ((struct timespec64){(int32_t)sec, 0})
-#define JFFS2_NOW() (ktime_get_real_seconds())
-#define I_SEC(tv) ((tv).tv_sec)
-#define JFFS2_F_I_CTIME(f) (OFNI_EDONI_2SFFJ(f)->i_ctime.tv_sec)
-#define JFFS2_F_I_MTIME(f) (OFNI_EDONI_2SFFJ(f)->i_mtime.tv_sec)
-#define JFFS2_F_I_ATIME(f) (OFNI_EDONI_2SFFJ(f)->i_atime.tv_sec)
-
+#define JFFS2_CLAMP_TIME(t) ((uint32_t)clamp_t(time64_t, (t), 0, U32_MAX))
+#define ITIME(sec) ((struct timespec64){sec, 0})
+#define JFFS2_NOW() JFFS2_CLAMP_TIME(ktime_get_real_seconds())
+#define I_SEC(tv) JFFS2_CLAMP_TIME((tv).tv_sec)
+#define JFFS2_F_I_CTIME(f) I_SEC(OFNI_EDONI_2SFFJ(f)->i_ctime)
+#define JFFS2_F_I_MTIME(f) I_SEC(OFNI_EDONI_2SFFJ(f)->i_mtime)
+#define JFFS2_F_I_ATIME(f) I_SEC(OFNI_EDONI_2SFFJ(f)->i_atime)
 #define sleep_on_spinunlock(wq, s)				\
 	do {							\
 		DECLARE_WAITQUEUE(__wait, current);		\
-- 
2.9.0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps
  2018-07-13 14:47 [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps Arnd Bergmann
  2018-07-13 14:47 ` [PATCH 2/2] [RESEND] jffs2: use unsigned 32-bit timstamps consistently Arnd Bergmann
@ 2018-07-13 20:47 ` Richard Weinberger
  2018-07-17 19:54   ` Boris Brezillon
  1 sibling, 1 reply; 5+ messages in thread
From: Richard Weinberger @ 2018-07-13 20:47 UTC (permalink / raw)
  To: Arnd Bergmann
  Cc: Andrew Morton, Alexander Viro, y2038, linux-fsdevel,
	David Woodhouse, Deepa Dinamani, Jan Kara, David Howells,
	linux-mtd, linux-kernel, Boris Brezillon

Am Freitag, 13. Juli 2018, 16:47:16 CEST schrieb Arnd Bergmann:
> The VFS now uses timespec64 timestamps consistently, but jffs2 still
> converts them to 32-bit numbers on the storage medium. As the helper
> functions for the conversion (get_seconds() and timespec_to_timespec64())
> are now deprecated, let's change them over to the more modern
> replacements.
> 
> This keeps the traditional interpretation of those values, where
> the on-disk 32-bit numbers are taken to be negative numbers, i.e.
> dates before 1970, on 32-bit machines, but future numbers past 2038
> on 64-bit machines.
> 
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> I originally sent these two patches on Jun 19, but got no reply aside
> from a harmless sparse warning reported by the kbuild test robot.
> 
> Looking at the git history for jffs2, it seems that David Woodhouse
> hasn't applied any patches for over two years, so I suppose he's
> not taking these either.
> 
> Al or Andrew, could you pick these up instead?

We can carry it also via the MTD tree.

Thanks,
//richard

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps
  2018-07-13 20:47 ` [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps Richard Weinberger
@ 2018-07-17 19:54   ` Boris Brezillon
  2018-07-18 18:28     ` Boris Brezillon
  0 siblings, 1 reply; 5+ messages in thread
From: Boris Brezillon @ 2018-07-17 19:54 UTC (permalink / raw)
  To: Richard Weinberger
  Cc: Arnd Bergmann, Jan Kara, y2038, linux-kernel, David Howells,
	linux-mtd, Alexander Viro, linux-fsdevel, Andrew Morton,
	David Woodhouse, Deepa Dinamani

On Fri, 13 Jul 2018 22:47:13 +0200
Richard Weinberger <richard@nod.at> wrote:

> Am Freitag, 13. Juli 2018, 16:47:16 CEST schrieb Arnd Bergmann:
> > The VFS now uses timespec64 timestamps consistently, but jffs2 still
> > converts them to 32-bit numbers on the storage medium. As the helper
> > functions for the conversion (get_seconds() and timespec_to_timespec64())
> > are now deprecated, let's change them over to the more modern
> > replacements.
> > 
> > This keeps the traditional interpretation of those values, where
> > the on-disk 32-bit numbers are taken to be negative numbers, i.e.
> > dates before 1970, on 32-bit machines, but future numbers past 2038
> > on 64-bit machines.
> > 
> > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> > ---
> > I originally sent these two patches on Jun 19, but got no reply aside
> > from a harmless sparse warning reported by the kbuild test robot.
> > 
> > Looking at the git history for jffs2, it seems that David Woodhouse
> > hasn't applied any patches for over two years, so I suppose he's
> > not taking these either.
> > 
> > Al or Andrew, could you pick these up instead?  
> 
> We can carry it also via the MTD tree.

I'll queue them to mtd/next.

Thanks,

Boris

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps
  2018-07-17 19:54   ` Boris Brezillon
@ 2018-07-18 18:28     ` Boris Brezillon
  0 siblings, 0 replies; 5+ messages in thread
From: Boris Brezillon @ 2018-07-18 18:28 UTC (permalink / raw)
  To: Richard Weinberger
  Cc: Jan Kara, Arnd Bergmann, y2038, linux-kernel, David Howells,
	linux-mtd, Alexander Viro, linux-fsdevel, Andrew Morton,
	David Woodhouse, Deepa Dinamani

On Tue, 17 Jul 2018 21:54:53 +0200
Boris Brezillon <boris.brezillon@bootlin.com> wrote:

> On Fri, 13 Jul 2018 22:47:13 +0200
> Richard Weinberger <richard@nod.at> wrote:
> 
> > Am Freitag, 13. Juli 2018, 16:47:16 CEST schrieb Arnd Bergmann:  
> > > The VFS now uses timespec64 timestamps consistently, but jffs2 still
> > > converts them to 32-bit numbers on the storage medium. As the helper
> > > functions for the conversion (get_seconds() and timespec_to_timespec64())
> > > are now deprecated, let's change them over to the more modern
> > > replacements.
> > > 
> > > This keeps the traditional interpretation of those values, where
> > > the on-disk 32-bit numbers are taken to be negative numbers, i.e.
> > > dates before 1970, on 32-bit machines, but future numbers past 2038
> > > on 64-bit machines.
> > > 
> > > Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> > > ---
> > > I originally sent these two patches on Jun 19, but got no reply aside
> > > from a harmless sparse warning reported by the kbuild test robot.
> > > 
> > > Looking at the git history for jffs2, it seems that David Woodhouse
> > > hasn't applied any patches for over two years, so I suppose he's
> > > not taking these either.
> > > 
> > > Al or Andrew, could you pick these up instead?    
> > 
> > We can carry it also via the MTD tree.  
> 
> I'll queue them to mtd/next.

Applied.

Thanks,

Boris

> 
> Thanks,
> 
> Boris
> 
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-07-18 18:29 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-13 14:47 [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps Arnd Bergmann
2018-07-13 14:47 ` [PATCH 2/2] [RESEND] jffs2: use unsigned 32-bit timstamps consistently Arnd Bergmann
2018-07-13 20:47 ` [PATCH 1/2] [RESEND] jffs2: use 64-bit intermediate timestamps Richard Weinberger
2018-07-17 19:54   ` Boris Brezillon
2018-07-18 18:28     ` Boris Brezillon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).