diff options
Diffstat (limited to 'fs/udf/inode.c')
-rw-r--r-- | fs/udf/inode.c | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/fs/udf/inode.c b/fs/udf/inode.c index df2378d6ebb4..7f39d17352c9 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c | |||
@@ -1271,6 +1271,7 @@ static int udf_read_inode(struct inode *inode, bool hidden_inode) | |||
1271 | struct udf_inode_info *iinfo = UDF_I(inode); | 1271 | struct udf_inode_info *iinfo = UDF_I(inode); |
1272 | struct udf_sb_info *sbi = UDF_SB(inode->i_sb); | 1272 | struct udf_sb_info *sbi = UDF_SB(inode->i_sb); |
1273 | struct kernel_lb_addr *iloc = &iinfo->i_location; | 1273 | struct kernel_lb_addr *iloc = &iinfo->i_location; |
1274 | struct timespec ts; | ||
1274 | unsigned int link_count; | 1275 | unsigned int link_count; |
1275 | unsigned int indirections = 0; | 1276 | unsigned int indirections = 0; |
1276 | int bs = inode->i_sb->s_blocksize; | 1277 | int bs = inode->i_sb->s_blocksize; |
@@ -1443,9 +1444,12 @@ reread: | |||
1443 | inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) << | 1444 | inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) << |
1444 | (inode->i_sb->s_blocksize_bits - 9); | 1445 | (inode->i_sb->s_blocksize_bits - 9); |
1445 | 1446 | ||
1446 | udf_disk_stamp_to_time(&inode->i_atime, fe->accessTime); | 1447 | udf_disk_stamp_to_time(&ts, fe->accessTime); |
1447 | udf_disk_stamp_to_time(&inode->i_mtime, fe->modificationTime); | 1448 | inode->i_atime = timespec_to_timespec64(ts); |
1448 | udf_disk_stamp_to_time(&inode->i_ctime, fe->attrTime); | 1449 | udf_disk_stamp_to_time(&ts, fe->modificationTime); |
1450 | inode->i_mtime = timespec_to_timespec64(ts); | ||
1451 | udf_disk_stamp_to_time(&ts, fe->attrTime); | ||
1452 | inode->i_ctime = timespec_to_timespec64(ts); | ||
1449 | 1453 | ||
1450 | iinfo->i_unique = le64_to_cpu(fe->uniqueID); | 1454 | iinfo->i_unique = le64_to_cpu(fe->uniqueID); |
1451 | iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr); | 1455 | iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr); |
@@ -1455,10 +1459,13 @@ reread: | |||
1455 | inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) << | 1459 | inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) << |
1456 | (inode->i_sb->s_blocksize_bits - 9); | 1460 | (inode->i_sb->s_blocksize_bits - 9); |
1457 | 1461 | ||
1458 | udf_disk_stamp_to_time(&inode->i_atime, efe->accessTime); | 1462 | udf_disk_stamp_to_time(&ts, efe->accessTime); |
1459 | udf_disk_stamp_to_time(&inode->i_mtime, efe->modificationTime); | 1463 | inode->i_atime = timespec_to_timespec64(ts); |
1464 | udf_disk_stamp_to_time(&ts, efe->modificationTime); | ||
1465 | inode->i_mtime = timespec_to_timespec64(ts); | ||
1460 | udf_disk_stamp_to_time(&iinfo->i_crtime, efe->createTime); | 1466 | udf_disk_stamp_to_time(&iinfo->i_crtime, efe->createTime); |
1461 | udf_disk_stamp_to_time(&inode->i_ctime, efe->attrTime); | 1467 | udf_disk_stamp_to_time(&ts, efe->attrTime); |
1468 | inode->i_ctime = timespec_to_timespec64(ts); | ||
1462 | 1469 | ||
1463 | iinfo->i_unique = le64_to_cpu(efe->uniqueID); | 1470 | iinfo->i_unique = le64_to_cpu(efe->uniqueID); |
1464 | iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr); | 1471 | iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr); |
@@ -1708,9 +1715,12 @@ static int udf_update_inode(struct inode *inode, int do_sync) | |||
1708 | inode->i_sb->s_blocksize - sizeof(struct fileEntry)); | 1715 | inode->i_sb->s_blocksize - sizeof(struct fileEntry)); |
1709 | fe->logicalBlocksRecorded = cpu_to_le64(lb_recorded); | 1716 | fe->logicalBlocksRecorded = cpu_to_le64(lb_recorded); |
1710 | 1717 | ||
1711 | udf_time_to_disk_stamp(&fe->accessTime, inode->i_atime); | 1718 | udf_time_to_disk_stamp(&fe->accessTime, |
1712 | udf_time_to_disk_stamp(&fe->modificationTime, inode->i_mtime); | 1719 | timespec64_to_timespec(inode->i_atime)); |
1713 | udf_time_to_disk_stamp(&fe->attrTime, inode->i_ctime); | 1720 | udf_time_to_disk_stamp(&fe->modificationTime, |
1721 | timespec64_to_timespec(inode->i_mtime)); | ||
1722 | udf_time_to_disk_stamp(&fe->attrTime, | ||
1723 | timespec64_to_timespec(inode->i_ctime)); | ||
1714 | memset(&(fe->impIdent), 0, sizeof(struct regid)); | 1724 | memset(&(fe->impIdent), 0, sizeof(struct regid)); |
1715 | strcpy(fe->impIdent.ident, UDF_ID_DEVELOPER); | 1725 | strcpy(fe->impIdent.ident, UDF_ID_DEVELOPER); |
1716 | fe->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX; | 1726 | fe->impIdent.identSuffix[0] = UDF_OS_CLASS_UNIX; |
@@ -1729,14 +1739,17 @@ static int udf_update_inode(struct inode *inode, int do_sync) | |||
1729 | efe->objectSize = cpu_to_le64(inode->i_size); | 1739 | efe->objectSize = cpu_to_le64(inode->i_size); |
1730 | efe->logicalBlocksRecorded = cpu_to_le64(lb_recorded); | 1740 | efe->logicalBlocksRecorded = cpu_to_le64(lb_recorded); |
1731 | 1741 | ||
1732 | udf_adjust_time(iinfo, inode->i_atime); | 1742 | udf_adjust_time(iinfo, timespec64_to_timespec(inode->i_atime)); |
1733 | udf_adjust_time(iinfo, inode->i_mtime); | 1743 | udf_adjust_time(iinfo, timespec64_to_timespec(inode->i_mtime)); |
1734 | udf_adjust_time(iinfo, inode->i_ctime); | 1744 | udf_adjust_time(iinfo, timespec64_to_timespec(inode->i_ctime)); |
1735 | 1745 | ||
1736 | udf_time_to_disk_stamp(&efe->accessTime, inode->i_atime); | 1746 | udf_time_to_disk_stamp(&efe->accessTime, |
1737 | udf_time_to_disk_stamp(&efe->modificationTime, inode->i_mtime); | 1747 | timespec64_to_timespec(inode->i_atime)); |
1748 | udf_time_to_disk_stamp(&efe->modificationTime, | ||
1749 | timespec64_to_timespec(inode->i_mtime)); | ||
1738 | udf_time_to_disk_stamp(&efe->createTime, iinfo->i_crtime); | 1750 | udf_time_to_disk_stamp(&efe->createTime, iinfo->i_crtime); |
1739 | udf_time_to_disk_stamp(&efe->attrTime, inode->i_ctime); | 1751 | udf_time_to_disk_stamp(&efe->attrTime, |
1752 | timespec64_to_timespec(inode->i_ctime)); | ||
1740 | 1753 | ||
1741 | memset(&(efe->impIdent), 0, sizeof(efe->impIdent)); | 1754 | memset(&(efe->impIdent), 0, sizeof(efe->impIdent)); |
1742 | strcpy(efe->impIdent.ident, UDF_ID_DEVELOPER); | 1755 | strcpy(efe->impIdent.ident, UDF_ID_DEVELOPER); |