Commit 46e62a07 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'for_v4.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs

Pull UDF and ext2 update from Jan Kara.

* tag 'for_v4.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
  ext2: use ktime_get_real_seconds for timestamps
  udf: convert inode stamps to timespec64
parents 5c60a738 fe2c3254
...@@ -86,7 +86,7 @@ void ext2_evict_inode(struct inode * inode) ...@@ -86,7 +86,7 @@ void ext2_evict_inode(struct inode * inode)
if (want_delete) { if (want_delete) {
sb_start_intwrite(inode->i_sb); sb_start_intwrite(inode->i_sb);
/* set dtime */ /* set dtime */
EXT2_I(inode)->i_dtime = get_seconds(); EXT2_I(inode)->i_dtime = ktime_get_real_seconds();
mark_inode_dirty(inode); mark_inode_dirty(inode);
__ext2_write_inode(inode, inode_needs_sync(inode)); __ext2_write_inode(inode, inode_needs_sync(inode));
/* truncate to 0 */ /* truncate to 0 */
......
...@@ -682,7 +682,8 @@ static int ext2_setup_super (struct super_block * sb, ...@@ -682,7 +682,8 @@ static int ext2_setup_super (struct super_block * sb,
"running e2fsck is recommended"); "running e2fsck is recommended");
else if (le32_to_cpu(es->s_checkinterval) && else if (le32_to_cpu(es->s_checkinterval) &&
(le32_to_cpu(es->s_lastcheck) + (le32_to_cpu(es->s_lastcheck) +
le32_to_cpu(es->s_checkinterval) <= get_seconds())) le32_to_cpu(es->s_checkinterval) <=
ktime_get_real_seconds()))
ext2_msg(sb, KERN_WARNING, ext2_msg(sb, KERN_WARNING,
"warning: checktime reached, " "warning: checktime reached, "
"running e2fsck is recommended"); "running e2fsck is recommended");
...@@ -1248,7 +1249,7 @@ void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es, ...@@ -1248,7 +1249,7 @@ void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es,
spin_lock(&EXT2_SB(sb)->s_lock); spin_lock(&EXT2_SB(sb)->s_lock);
es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb)); es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb));
es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb)); es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb));
es->s_wtime = cpu_to_le32(get_seconds()); es->s_wtime = cpu_to_le32(ktime_get_real_seconds());
/* unlock before we do IO */ /* unlock before we do IO */
spin_unlock(&EXT2_SB(sb)->s_lock); spin_unlock(&EXT2_SB(sb)->s_lock);
mark_buffer_dirty(EXT2_SB(sb)->s_sbh); mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
...@@ -1360,7 +1361,7 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data) ...@@ -1360,7 +1361,7 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
* the rdonly flag and then mark the partition as valid again. * the rdonly flag and then mark the partition as valid again.
*/ */
es->s_state = cpu_to_le16(sbi->s_mount_state); es->s_state = cpu_to_le16(sbi->s_mount_state);
es->s_mtime = cpu_to_le32(get_seconds()); es->s_mtime = cpu_to_le32(ktime_get_real_seconds());
spin_unlock(&sbi->s_lock); spin_unlock(&sbi->s_lock);
err = dquot_suspend(sb, -1); err = dquot_suspend(sb, -1);
......
...@@ -125,7 +125,7 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode) ...@@ -125,7 +125,7 @@ struct inode *udf_new_inode(struct inode *dir, umode_t mode)
else else
iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG; iinfo->i_alloc_type = ICBTAG_FLAG_AD_LONG;
inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode); inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
iinfo->i_crtime = timespec64_to_timespec(inode->i_mtime); iinfo->i_crtime = inode->i_mtime;
if (unlikely(insert_inode_locked(inode) < 0)) { if (unlikely(insert_inode_locked(inode) < 0)) {
make_bad_inode(inode); make_bad_inode(inode);
iput(inode); iput(inode);
......
...@@ -1270,7 +1270,6 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode) ...@@ -1270,7 +1270,6 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
struct udf_inode_info *iinfo = UDF_I(inode); struct udf_inode_info *iinfo = UDF_I(inode);
struct udf_sb_info *sbi = UDF_SB(inode->i_sb); struct udf_sb_info *sbi = UDF_SB(inode->i_sb);
struct kernel_lb_addr *iloc = &iinfo->i_location; struct kernel_lb_addr *iloc = &iinfo->i_location;
struct timespec ts;
unsigned int link_count; unsigned int link_count;
unsigned int indirections = 0; unsigned int indirections = 0;
int bs = inode->i_sb->s_blocksize; int bs = inode->i_sb->s_blocksize;
...@@ -1443,12 +1442,9 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode) ...@@ -1443,12 +1442,9 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) << inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) <<
(inode->i_sb->s_blocksize_bits - 9); (inode->i_sb->s_blocksize_bits - 9);
udf_disk_stamp_to_time(&ts, fe->accessTime); udf_disk_stamp_to_time(&inode->i_atime, fe->accessTime);
inode->i_atime = timespec_to_timespec64(ts); udf_disk_stamp_to_time(&inode->i_mtime, fe->modificationTime);
udf_disk_stamp_to_time(&ts, fe->modificationTime); udf_disk_stamp_to_time(&inode->i_ctime, fe->attrTime);
inode->i_mtime = timespec_to_timespec64(ts);
udf_disk_stamp_to_time(&ts, fe->attrTime);
inode->i_ctime = timespec_to_timespec64(ts);
iinfo->i_unique = le64_to_cpu(fe->uniqueID); iinfo->i_unique = le64_to_cpu(fe->uniqueID);
iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr); iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr);
...@@ -1458,13 +1454,10 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode) ...@@ -1458,13 +1454,10 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode)
inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) << inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) <<
(inode->i_sb->s_blocksize_bits - 9); (inode->i_sb->s_blocksize_bits - 9);
udf_disk_stamp_to_time(&ts, efe->accessTime); udf_disk_stamp_to_time(&inode->i_atime, efe->accessTime);
inode->i_atime = timespec_to_timespec64(ts); udf_disk_stamp_to_time(&inode->i_mtime, efe->modificationTime);
udf_disk_stamp_to_time(&ts, efe->modificationTime);
inode->i_mtime = timespec_to_timespec64(ts);
udf_disk_stamp_to_time(&iinfo->i_crtime, efe->createTime); udf_disk_stamp_to_time(&iinfo->i_crtime, efe->createTime);
udf_disk_stamp_to_time(&ts, efe->attrTime); udf_disk_stamp_to_time(&inode->i_ctime, efe->attrTime);
inode->i_ctime = timespec_to_timespec64(ts);
iinfo->i_unique = le64_to_cpu(efe->uniqueID); iinfo->i_unique = le64_to_cpu(efe->uniqueID);
iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr); iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr);
...@@ -1601,7 +1594,7 @@ static int udf_sync_inode(struct inode *inode) ...@@ -1601,7 +1594,7 @@ static int udf_sync_inode(struct inode *inode)
return udf_update_inode(inode, 1); return udf_update_inode(inode, 1);
} }
static void udf_adjust_time(struct udf_inode_info *iinfo, struct timespec time) static void udf_adjust_time(struct udf_inode_info *iinfo, struct timespec64 time)
{ {
if (iinfo->i_crtime.tv_sec > time.tv_sec || if (iinfo->i_crtime.tv_sec > time.tv_sec ||
(iinfo->i_crtime.tv_sec == time.tv_sec && (iinfo->i_crtime.tv_sec == time.tv_sec &&
...@@ -1714,12 +1707,9 @@ static int udf_update_inode(struct inode *inode, int do_sync) ...@@ -1714,12 +1707,9 @@ static int udf_update_inode(struct inode *inode, int do_sync)
inode->i_sb->s_blocksize - sizeof(struct fileEntry)); inode->i_sb->s_blocksize - sizeof(struct fileEntry));
fe->logicalBlocksRecorded = cpu_to_le64(lb_recorded); fe->logicalBlocksRecorded = cpu_to_le64(lb_recorded);
udf_time_to_disk_stamp(&fe->accessTime, udf_time_to_disk_stamp(&fe->accessTime, inode->i_atime);
timespec64_to_timespec(inode->i_atime)); udf_time_to_disk_stamp(&fe->modificationTime, inode->i_mtime);
udf_time_to_disk_stamp(&fe->modificationTime, udf_time_to_disk_stamp(&fe->attrTime, inode->i_ctime);
timespec64_to_timespec(inode->i_mtime));
udf_time_to_disk_stamp(&fe->attrTime,
timespec64_to_timespec(inode->i_ctime));
memset(&(fe->impIdent), 0, sizeof(struct regid)); memset(&(fe->impIdent), 0, sizeof(struct regid));
strcpy(fe->impIdent.ident, UDF_ID_DEVELOPER); strcpy(fe->impIdent.ident, UDF_ID_DEVELOPER);
fe->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX; fe->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
...@@ -1738,17 +1728,14 @@ static int udf_update_inode(struct inode *inode, int do_sync) ...@@ -1738,17 +1728,14 @@ static int udf_update_inode(struct inode *inode, int do_sync)
efe->objectSize = cpu_to_le64(inode->i_size); efe->objectSize = cpu_to_le64(inode->i_size);
efe->logicalBlocksRecorded = cpu_to_le64(lb_recorded); efe->logicalBlocksRecorded = cpu_to_le64(lb_recorded);
udf_adjust_time(iinfo, timespec64_to_timespec(inode->i_atime)); udf_adjust_time(iinfo, inode->i_atime);
udf_adjust_time(iinfo, timespec64_to_timespec(inode->i_mtime)); udf_adjust_time(iinfo, inode->i_mtime);
udf_adjust_time(iinfo, timespec64_to_timespec(inode->i_ctime)); udf_adjust_time(iinfo, inode->i_ctime);
udf_time_to_disk_stamp(&efe->accessTime, udf_time_to_disk_stamp(&efe->accessTime, inode->i_atime);
timespec64_to_timespec(inode->i_atime)); udf_time_to_disk_stamp(&efe->modificationTime, inode->i_mtime);
udf_time_to_disk_stamp(&efe->modificationTime,
timespec64_to_timespec(inode->i_mtime));
udf_time_to_disk_stamp(&efe->createTime, iinfo->i_crtime); udf_time_to_disk_stamp(&efe->createTime, iinfo->i_crtime);
udf_time_to_disk_stamp(&efe->attrTime, udf_time_to_disk_stamp(&efe->attrTime, inode->i_ctime);
timespec64_to_timespec(inode->i_ctime));
memset(&(efe->impIdent), 0, sizeof(efe->impIdent)); memset(&(efe->impIdent), 0, sizeof(efe->impIdent));
strcpy(efe->impIdent.ident, UDF_ID_DEVELOPER); strcpy(efe->impIdent.ident, UDF_ID_DEVELOPER);
......
...@@ -1980,7 +1980,7 @@ static void udf_open_lvid(struct super_block *sb) ...@@ -1980,7 +1980,7 @@ static void udf_open_lvid(struct super_block *sb)
struct buffer_head *bh = sbi->s_lvid_bh; struct buffer_head *bh = sbi->s_lvid_bh;
struct logicalVolIntegrityDesc *lvid; struct logicalVolIntegrityDesc *lvid;
struct logicalVolIntegrityDescImpUse *lvidiu; struct logicalVolIntegrityDescImpUse *lvidiu;
struct timespec ts; struct timespec64 ts;
if (!bh) if (!bh)
return; return;
...@@ -1992,7 +1992,7 @@ static void udf_open_lvid(struct super_block *sb) ...@@ -1992,7 +1992,7 @@ static void udf_open_lvid(struct super_block *sb)
mutex_lock(&sbi->s_alloc_mutex); mutex_lock(&sbi->s_alloc_mutex);
lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX; lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX; lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
ktime_get_real_ts(&ts); ktime_get_real_ts64(&ts);
udf_time_to_disk_stamp(&lvid->recordingDateAndTime, ts); udf_time_to_disk_stamp(&lvid->recordingDateAndTime, ts);
if (le32_to_cpu(lvid->integrityType) == LVID_INTEGRITY_TYPE_CLOSE) if (le32_to_cpu(lvid->integrityType) == LVID_INTEGRITY_TYPE_CLOSE)
lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_OPEN); lvid->integrityType = cpu_to_le32(LVID_INTEGRITY_TYPE_OPEN);
...@@ -2017,7 +2017,7 @@ static void udf_close_lvid(struct super_block *sb) ...@@ -2017,7 +2017,7 @@ static void udf_close_lvid(struct super_block *sb)
struct buffer_head *bh = sbi->s_lvid_bh; struct buffer_head *bh = sbi->s_lvid_bh;
struct logicalVolIntegrityDesc *lvid; struct logicalVolIntegrityDesc *lvid;
struct logicalVolIntegrityDescImpUse *lvidiu; struct logicalVolIntegrityDescImpUse *lvidiu;
struct timespec ts; struct timespec64 ts;
if (!bh) if (!bh)
return; return;
...@@ -2029,7 +2029,7 @@ static void udf_close_lvid(struct super_block *sb) ...@@ -2029,7 +2029,7 @@ static void udf_close_lvid(struct super_block *sb)
mutex_lock(&sbi->s_alloc_mutex); mutex_lock(&sbi->s_alloc_mutex);
lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX; lvidiu->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX;
lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX; lvidiu->impIdent.identSuffix[1] = UDF_OS_ID_LINUX;
ktime_get_real_ts(&ts); ktime_get_real_ts64(&ts);
udf_time_to_disk_stamp(&lvid->recordingDateAndTime, ts); udf_time_to_disk_stamp(&lvid->recordingDateAndTime, ts);
if (UDF_MAX_WRITE_VERSION > le16_to_cpu(lvidiu->maxUDFWriteRev)) if (UDF_MAX_WRITE_VERSION > le16_to_cpu(lvidiu->maxUDFWriteRev))
lvidiu->maxUDFWriteRev = cpu_to_le16(UDF_MAX_WRITE_VERSION); lvidiu->maxUDFWriteRev = cpu_to_le16(UDF_MAX_WRITE_VERSION);
......
...@@ -28,7 +28,7 @@ struct udf_ext_cache { ...@@ -28,7 +28,7 @@ struct udf_ext_cache {
*/ */
struct udf_inode_info { struct udf_inode_info {
struct timespec i_crtime; struct timespec64 i_crtime;
/* Physical address of inode */ /* Physical address of inode */
struct kernel_lb_addr i_location; struct kernel_lb_addr i_location;
__u64 i_unique; __u64 i_unique;
......
...@@ -138,7 +138,7 @@ struct udf_sb_info { ...@@ -138,7 +138,7 @@ struct udf_sb_info {
rwlock_t s_cred_lock; rwlock_t s_cred_lock;
/* Root Info */ /* Root Info */
struct timespec s_record_time; struct timespec64 s_record_time;
/* Fileset Info */ /* Fileset Info */
__u16 s_serial_number; __u16 s_serial_number;
......
...@@ -258,8 +258,8 @@ extern struct long_ad *udf_get_filelongad(uint8_t *, int, uint32_t *, int); ...@@ -258,8 +258,8 @@ extern struct long_ad *udf_get_filelongad(uint8_t *, int, uint32_t *, int);
extern struct short_ad *udf_get_fileshortad(uint8_t *, int, uint32_t *, int); extern struct short_ad *udf_get_fileshortad(uint8_t *, int, uint32_t *, int);
/* udftime.c */ /* udftime.c */
extern void udf_disk_stamp_to_time(struct timespec *dest, extern void udf_disk_stamp_to_time(struct timespec64 *dest,
struct timestamp src); struct timestamp src);
extern void udf_time_to_disk_stamp(struct timestamp *dest, struct timespec src); extern void udf_time_to_disk_stamp(struct timestamp *dest, struct timespec64 src);
#endif /* __UDF_DECL_H */ #endif /* __UDF_DECL_H */
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include <linux/time.h> #include <linux/time.h>
void void
udf_disk_stamp_to_time(struct timespec *dest, struct timestamp src) udf_disk_stamp_to_time(struct timespec64 *dest, struct timestamp src)
{ {
u16 typeAndTimezone = le16_to_cpu(src.typeAndTimezone); u16 typeAndTimezone = le16_to_cpu(src.typeAndTimezone);
u16 year = le16_to_cpu(src.year); u16 year = le16_to_cpu(src.year);
...@@ -70,9 +70,9 @@ udf_disk_stamp_to_time(struct timespec *dest, struct timestamp src) ...@@ -70,9 +70,9 @@ udf_disk_stamp_to_time(struct timespec *dest, struct timestamp src)
} }
void void
udf_time_to_disk_stamp(struct timestamp *dest, struct timespec ts) udf_time_to_disk_stamp(struct timestamp *dest, struct timespec64 ts)
{ {
long seconds; time64_t seconds;
int16_t offset; int16_t offset;
struct tm tm; struct tm tm;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment