|
@@ -2123,10 +2123,10 @@ static void ocfs2_downconvert_on_unlock(struct ocfs2_super *osb,
|
|
|
|
|
|
/* LVB only has room for 64 bits of time here so we pack it for
|
|
/* LVB only has room for 64 bits of time here so we pack it for
|
|
* now. */
|
|
* now. */
|
|
-static u64 ocfs2_pack_timespec(struct timespec *spec)
|
|
|
|
|
|
+static u64 ocfs2_pack_timespec(struct timespec64 *spec)
|
|
{
|
|
{
|
|
u64 res;
|
|
u64 res;
|
|
- u64 sec = spec->tv_sec;
|
|
|
|
|
|
+ u64 sec = clamp_t(time64_t, spec->tv_sec, 0, 0x3ffffffffull);
|
|
u32 nsec = spec->tv_nsec;
|
|
u32 nsec = spec->tv_nsec;
|
|
|
|
|
|
res = (sec << OCFS2_SEC_SHIFT) | (nsec & OCFS2_NSEC_MASK);
|
|
res = (sec << OCFS2_SEC_SHIFT) | (nsec & OCFS2_NSEC_MASK);
|
|
@@ -2142,7 +2142,6 @@ static void __ocfs2_stuff_meta_lvb(struct inode *inode)
|
|
struct ocfs2_inode_info *oi = OCFS2_I(inode);
|
|
struct ocfs2_inode_info *oi = OCFS2_I(inode);
|
|
struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres;
|
|
struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres;
|
|
struct ocfs2_meta_lvb *lvb;
|
|
struct ocfs2_meta_lvb *lvb;
|
|
- struct timespec ts;
|
|
|
|
|
|
|
|
lvb = ocfs2_dlm_lvb(&lockres->l_lksb);
|
|
lvb = ocfs2_dlm_lvb(&lockres->l_lksb);
|
|
|
|
|
|
@@ -2163,15 +2162,12 @@ static void __ocfs2_stuff_meta_lvb(struct inode *inode)
|
|
lvb->lvb_igid = cpu_to_be32(i_gid_read(inode));
|
|
lvb->lvb_igid = cpu_to_be32(i_gid_read(inode));
|
|
lvb->lvb_imode = cpu_to_be16(inode->i_mode);
|
|
lvb->lvb_imode = cpu_to_be16(inode->i_mode);
|
|
lvb->lvb_inlink = cpu_to_be16(inode->i_nlink);
|
|
lvb->lvb_inlink = cpu_to_be16(inode->i_nlink);
|
|
- ts = timespec64_to_timespec(inode->i_atime);
|
|
|
|
lvb->lvb_iatime_packed =
|
|
lvb->lvb_iatime_packed =
|
|
- cpu_to_be64(ocfs2_pack_timespec(&ts));
|
|
|
|
- ts = timespec64_to_timespec(inode->i_ctime);
|
|
|
|
|
|
+ cpu_to_be64(ocfs2_pack_timespec(&inode->i_atime));
|
|
lvb->lvb_ictime_packed =
|
|
lvb->lvb_ictime_packed =
|
|
- cpu_to_be64(ocfs2_pack_timespec(&ts));
|
|
|
|
- ts = timespec64_to_timespec(inode->i_mtime);
|
|
|
|
|
|
+ cpu_to_be64(ocfs2_pack_timespec(&inode->i_ctime));
|
|
lvb->lvb_imtime_packed =
|
|
lvb->lvb_imtime_packed =
|
|
- cpu_to_be64(ocfs2_pack_timespec(&ts));
|
|
|
|
|
|
+ cpu_to_be64(ocfs2_pack_timespec(&inode->i_mtime));
|
|
lvb->lvb_iattr = cpu_to_be32(oi->ip_attr);
|
|
lvb->lvb_iattr = cpu_to_be32(oi->ip_attr);
|
|
lvb->lvb_idynfeatures = cpu_to_be16(oi->ip_dyn_features);
|
|
lvb->lvb_idynfeatures = cpu_to_be16(oi->ip_dyn_features);
|
|
lvb->lvb_igeneration = cpu_to_be32(inode->i_generation);
|
|
lvb->lvb_igeneration = cpu_to_be32(inode->i_generation);
|
|
@@ -2180,7 +2176,7 @@ out:
|
|
mlog_meta_lvb(0, lockres);
|
|
mlog_meta_lvb(0, lockres);
|
|
}
|
|
}
|
|
|
|
|
|
-static void ocfs2_unpack_timespec(struct timespec *spec,
|
|
|
|
|
|
+static void ocfs2_unpack_timespec(struct timespec64 *spec,
|
|
u64 packed_time)
|
|
u64 packed_time)
|
|
{
|
|
{
|
|
spec->tv_sec = packed_time >> OCFS2_SEC_SHIFT;
|
|
spec->tv_sec = packed_time >> OCFS2_SEC_SHIFT;
|
|
@@ -2189,7 +2185,6 @@ static void ocfs2_unpack_timespec(struct timespec *spec,
|
|
|
|
|
|
static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
|
|
static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
|
|
{
|
|
{
|
|
- struct timespec ts;
|
|
|
|
struct ocfs2_inode_info *oi = OCFS2_I(inode);
|
|
struct ocfs2_inode_info *oi = OCFS2_I(inode);
|
|
struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres;
|
|
struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres;
|
|
struct ocfs2_meta_lvb *lvb;
|
|
struct ocfs2_meta_lvb *lvb;
|
|
@@ -2217,15 +2212,12 @@ static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
|
|
i_gid_write(inode, be32_to_cpu(lvb->lvb_igid));
|
|
i_gid_write(inode, be32_to_cpu(lvb->lvb_igid));
|
|
inode->i_mode = be16_to_cpu(lvb->lvb_imode);
|
|
inode->i_mode = be16_to_cpu(lvb->lvb_imode);
|
|
set_nlink(inode, be16_to_cpu(lvb->lvb_inlink));
|
|
set_nlink(inode, be16_to_cpu(lvb->lvb_inlink));
|
|
- ocfs2_unpack_timespec(&ts,
|
|
|
|
|
|
+ ocfs2_unpack_timespec(&inode->i_atime,
|
|
be64_to_cpu(lvb->lvb_iatime_packed));
|
|
be64_to_cpu(lvb->lvb_iatime_packed));
|
|
- inode->i_atime = timespec_to_timespec64(ts);
|
|
|
|
- ocfs2_unpack_timespec(&ts,
|
|
|
|
|
|
+ ocfs2_unpack_timespec(&inode->i_mtime,
|
|
be64_to_cpu(lvb->lvb_imtime_packed));
|
|
be64_to_cpu(lvb->lvb_imtime_packed));
|
|
- inode->i_mtime = timespec_to_timespec64(ts);
|
|
|
|
- ocfs2_unpack_timespec(&ts,
|
|
|
|
|
|
+ ocfs2_unpack_timespec(&inode->i_ctime,
|
|
be64_to_cpu(lvb->lvb_ictime_packed));
|
|
be64_to_cpu(lvb->lvb_ictime_packed));
|
|
- inode->i_ctime = timespec_to_timespec64(ts);
|
|
|
|
spin_unlock(&oi->ip_lock);
|
|
spin_unlock(&oi->ip_lock);
|
|
}
|
|
}
|
|
|
|
|