Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fs: Fill in max and min timestamps in superblock

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

Even though some filesystems are read-only, fill in the
timestamps to reflect the on-disk representation.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Acked-By: Tigran Aivazian <aivazian.tigran@gmail.com>
Acked-by: Jeff Layton <jlayton@kernel.org>
Cc: aivazian.tigran@gmail.com
Cc: al@alarsen.net
Cc: coda@cs.cmu.edu
Cc: darrick.wong@oracle.com
Cc: dushistov@mail.ru
Cc: dwmw2@infradead.org
Cc: hch@infradead.org
Cc: jack@suse.com
Cc: jaharkes@cs.cmu.edu
Cc: luisbg@kernel.org
Cc: nico@fluxnic.net
Cc: phillip@squashfs.org.uk
Cc: richard@nod.at
Cc: salah.triki@gmail.com
Cc: shaggy@kernel.org
Cc: linux-xfs@vger.kernel.org
Cc: codalist@coda.cs.cmu.edu
Cc: linux-ext4@vger.kernel.org
Cc: linux-mtd@lists.infradead.org
Cc: jfs-discussion@lists.sourceforge.net
Cc: reiserfs-devel@vger.kernel.org

+42
+2
fs/befs/linuxvfs.c
··· 893 893 sb_set_blocksize(sb, (ulong) befs_sb->block_size); 894 894 sb->s_op = &befs_sops; 895 895 sb->s_export_op = &befs_export_operations; 896 + sb->s_time_min = 0; 897 + sb->s_time_max = 0xffffffffffffll; 896 898 root = befs_iget(sb, iaddr2blockno(sb, &(befs_sb->root_dir))); 897 899 if (IS_ERR(root)) { 898 900 ret = PTR_ERR(root);
+2
fs/bfs/inode.c
··· 324 324 return -ENOMEM; 325 325 mutex_init(&info->bfs_lock); 326 326 s->s_fs_info = info; 327 + s->s_time_min = 0; 328 + s->s_time_max = U32_MAX; 327 329 328 330 sb_set_blocksize(s, BFS_BSIZE); 329 331
+3
fs/coda/inode.c
··· 188 188 sb->s_magic = CODA_SUPER_MAGIC; 189 189 sb->s_op = &coda_super_operations; 190 190 sb->s_d_op = &coda_dentry_operations; 191 + sb->s_time_gran = 1; 192 + sb->s_time_min = S64_MIN; 193 + sb->s_time_max = S64_MAX; 191 194 192 195 error = super_setup_bdi(sb); 193 196 if (error)
+2
fs/cramfs/inode.c
··· 597 597 598 598 /* Set it all up.. */ 599 599 sb->s_flags |= SB_RDONLY; 600 + sb->s_time_min = 0; 601 + sb->s_time_max = 0; 600 602 sb->s_op = &cramfs_ops; 601 603 root = get_cramfs_inode(sb, cramfs_root, 0); 602 604 if (IS_ERR(root))
+2
fs/efs/super.c
··· 257 257 if (!sb) 258 258 return -ENOMEM; 259 259 s->s_fs_info = sb; 260 + s->s_time_min = 0; 261 + s->s_time_max = U32_MAX; 260 262 261 263 s->s_magic = EFS_SUPER_MAGIC; 262 264 if (!sb_set_blocksize(s, EFS_BLOCKSIZE)) {
+2
fs/ext2/super.c
··· 1002 1002 1003 1003 sb->s_maxbytes = ext2_max_size(sb->s_blocksize_bits); 1004 1004 sb->s_max_links = EXT2_LINK_MAX; 1005 + sb->s_time_min = S32_MIN; 1006 + sb->s_time_max = S32_MAX; 1005 1007 1006 1008 if (le32_to_cpu(es->s_rev_level) == EXT2_GOOD_OLD_REV) { 1007 1009 sbi->s_inode_size = EXT2_GOOD_OLD_INODE_SIZE;
+2
fs/freevxfs/vxfs_super.c
··· 229 229 230 230 sbp->s_op = &vxfs_super_ops; 231 231 sbp->s_fs_info = infp; 232 + sbp->s_time_min = 0; 233 + sbp->s_time_max = U32_MAX; 232 234 233 235 if (!vxfs_try_sb_magic(sbp, silent, 1, 234 236 (__force __fs32)cpu_to_le32(VXFS_SUPER_MAGIC))) {
+3
fs/jffs2/fs.c
··· 590 590 sb->s_blocksize = PAGE_SIZE; 591 591 sb->s_blocksize_bits = PAGE_SHIFT; 592 592 sb->s_magic = JFFS2_SUPER_MAGIC; 593 + sb->s_time_min = 0; 594 + sb->s_time_max = U32_MAX; 595 + 593 596 if (!sb_rdonly(sb)) 594 597 jffs2_start_garbage_collect_thread(c); 595 598 return 0;
+2
fs/jfs/super.c
··· 503 503 504 504 sb->s_fs_info = sbi; 505 505 sb->s_max_links = JFS_LINK_MAX; 506 + sb->s_time_min = 0; 507 + sb->s_time_max = U32_MAX; 506 508 sbi->sb = sb; 507 509 sbi->uid = INVALID_UID; 508 510 sbi->gid = INVALID_GID;
+2
fs/minix/inode.c
··· 277 277 278 278 /* set up enough so that it can read an inode */ 279 279 s->s_op = &minix_sops; 280 + s->s_time_min = 0; 281 + s->s_time_max = U32_MAX; 280 282 root_inode = minix_iget(s, MINIX_ROOT_INO); 281 283 if (IS_ERR(root_inode)) { 282 284 ret = PTR_ERR(root_inode);
+2
fs/qnx4/inode.c
··· 201 201 s->s_op = &qnx4_sops; 202 202 s->s_magic = QNX4_SUPER_MAGIC; 203 203 s->s_flags |= SB_RDONLY; /* Yup, read-only yet */ 204 + s->s_time_min = 0; 205 + s->s_time_max = U32_MAX; 204 206 205 207 /* Check the superblock signature. Since the qnx4 code is 206 208 dangerous, we should leave as quickly as possible
+2
fs/qnx6/inode.c
··· 429 429 s->s_op = &qnx6_sops; 430 430 s->s_magic = QNX6_SUPER_MAGIC; 431 431 s->s_flags |= SB_RDONLY; /* Yup, read-only yet */ 432 + s->s_time_min = 0; 433 + s->s_time_max = U32_MAX; 432 434 433 435 /* ease the later tree level calculations */ 434 436 sbi = QNX6_SB(s);
+3
fs/reiserfs/super.c
··· 1976 1976 goto error_unlocked; 1977 1977 } 1978 1978 1979 + s->s_time_min = 0; 1980 + s->s_time_max = U32_MAX; 1981 + 1979 1982 rs = SB_DISK_SUPER_BLOCK(s); 1980 1983 /* 1981 1984 * Let's do basic sanity check to verify that underlying device is not
+2
fs/romfs/super.c
··· 478 478 sb->s_maxbytes = 0xFFFFFFFF; 479 479 sb->s_magic = ROMFS_MAGIC; 480 480 sb->s_flags |= SB_RDONLY | SB_NOATIME; 481 + sb->s_time_min = 0; 482 + sb->s_time_max = 0; 481 483 sb->s_op = &romfs_super_ops; 482 484 483 485 #ifdef CONFIG_ROMFS_ON_MTD
+2
fs/squashfs/super.c
··· 183 183 (u64) le64_to_cpu(sblk->id_table_start)); 184 184 185 185 sb->s_maxbytes = MAX_LFS_FILESIZE; 186 + sb->s_time_min = 0; 187 + sb->s_time_max = U32_MAX; 186 188 sb->s_flags |= SB_RDONLY; 187 189 sb->s_op = &squashfs_super_ops; 188 190
+7
fs/ufs/super.c
··· 843 843 844 844 sb->s_maxbytes = MAX_LFS_FILESIZE; 845 845 846 + sb->s_time_gran = NSEC_PER_SEC; 847 + sb->s_time_min = S32_MIN; 848 + sb->s_time_max = S32_MAX; 849 + 846 850 switch (sbi->s_mount_opt & UFS_MOUNT_UFSTYPE) { 847 851 case UFS_MOUNT_UFSTYPE_44BSD: 848 852 UFSD("ufstype=44bsd\n"); ··· 865 861 uspi->s_fshift = 9; 866 862 uspi->s_sbsize = super_block_size = 1536; 867 863 uspi->s_sbbase = 0; 864 + sb->s_time_gran = 1; 865 + sb->s_time_min = S64_MIN; 866 + sb->s_time_max = S64_MAX; 868 867 flags |= UFS_TYPE_UFS2 | UFS_DE_44BSD | UFS_UID_44BSD | UFS_ST_44BSD | UFS_CG_44BSD; 869 868 break; 870 869
+2
fs/xfs/xfs_super.c
··· 1663 1663 sb->s_maxbytes = xfs_max_file_offset(sb->s_blocksize_bits); 1664 1664 sb->s_max_links = XFS_MAXLINK; 1665 1665 sb->s_time_gran = 1; 1666 + sb->s_time_min = S32_MIN; 1667 + sb->s_time_max = S32_MAX; 1666 1668 sb->s_iflags |= SB_I_CGROUPWB; 1667 1669 1668 1670 set_posix_acl_flag(sb);