summaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dlmglue.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ocfs2/dlmglue.c')
-rw-r--r--fs/ocfs2/dlmglue.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c
index 68728de12864..0ff424c6d17c 100644
--- a/fs/ocfs2/dlmglue.c
+++ b/fs/ocfs2/dlmglue.c
@@ -2140,6 +2140,7 @@ static void __ocfs2_stuff_meta_lvb(struct inode *inode)
2140 struct ocfs2_inode_info *oi = OCFS2_I(inode); 2140 struct ocfs2_inode_info *oi = OCFS2_I(inode);
2141 struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres; 2141 struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres;
2142 struct ocfs2_meta_lvb *lvb; 2142 struct ocfs2_meta_lvb *lvb;
2143 struct timespec ts;
2143 2144
2144 lvb = ocfs2_dlm_lvb(&lockres->l_lksb); 2145 lvb = ocfs2_dlm_lvb(&lockres->l_lksb);
2145 2146
@@ -2160,12 +2161,15 @@ static void __ocfs2_stuff_meta_lvb(struct inode *inode)
2160 lvb->lvb_igid = cpu_to_be32(i_gid_read(inode)); 2161 lvb->lvb_igid = cpu_to_be32(i_gid_read(inode));
2161 lvb->lvb_imode = cpu_to_be16(inode->i_mode); 2162 lvb->lvb_imode = cpu_to_be16(inode->i_mode);
2162 lvb->lvb_inlink = cpu_to_be16(inode->i_nlink); 2163 lvb->lvb_inlink = cpu_to_be16(inode->i_nlink);
2164 ts = timespec64_to_timespec(inode->i_atime);
2163 lvb->lvb_iatime_packed = 2165 lvb->lvb_iatime_packed =
2164 cpu_to_be64(ocfs2_pack_timespec(&inode->i_atime)); 2166 cpu_to_be64(ocfs2_pack_timespec(&ts));
2167 ts = timespec64_to_timespec(inode->i_ctime);
2165 lvb->lvb_ictime_packed = 2168 lvb->lvb_ictime_packed =
2166 cpu_to_be64(ocfs2_pack_timespec(&inode->i_ctime)); 2169 cpu_to_be64(ocfs2_pack_timespec(&ts));
2170 ts = timespec64_to_timespec(inode->i_mtime);
2167 lvb->lvb_imtime_packed = 2171 lvb->lvb_imtime_packed =
2168 cpu_to_be64(ocfs2_pack_timespec(&inode->i_mtime)); 2172 cpu_to_be64(ocfs2_pack_timespec(&ts));
2169 lvb->lvb_iattr = cpu_to_be32(oi->ip_attr); 2173 lvb->lvb_iattr = cpu_to_be32(oi->ip_attr);
2170 lvb->lvb_idynfeatures = cpu_to_be16(oi->ip_dyn_features); 2174 lvb->lvb_idynfeatures = cpu_to_be16(oi->ip_dyn_features);
2171 lvb->lvb_igeneration = cpu_to_be32(inode->i_generation); 2175 lvb->lvb_igeneration = cpu_to_be32(inode->i_generation);
@@ -2183,6 +2187,7 @@ static void ocfs2_unpack_timespec(struct timespec *spec,
2183 2187
2184static void ocfs2_refresh_inode_from_lvb(struct inode *inode) 2188static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
2185{ 2189{
2190 struct timespec ts;
2186 struct ocfs2_inode_info *oi = OCFS2_I(inode); 2191 struct ocfs2_inode_info *oi = OCFS2_I(inode);
2187 struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres; 2192 struct ocfs2_lock_res *lockres = &oi->ip_inode_lockres;
2188 struct ocfs2_meta_lvb *lvb; 2193 struct ocfs2_meta_lvb *lvb;
@@ -2210,12 +2215,15 @@ static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
2210 i_gid_write(inode, be32_to_cpu(lvb->lvb_igid)); 2215 i_gid_write(inode, be32_to_cpu(lvb->lvb_igid));
2211 inode->i_mode = be16_to_cpu(lvb->lvb_imode); 2216 inode->i_mode = be16_to_cpu(lvb->lvb_imode);
2212 set_nlink(inode, be16_to_cpu(lvb->lvb_inlink)); 2217 set_nlink(inode, be16_to_cpu(lvb->lvb_inlink));
2213 ocfs2_unpack_timespec(&inode->i_atime, 2218 ocfs2_unpack_timespec(&ts,
2214 be64_to_cpu(lvb->lvb_iatime_packed)); 2219 be64_to_cpu(lvb->lvb_iatime_packed));
2215 ocfs2_unpack_timespec(&inode->i_mtime, 2220 inode->i_atime = timespec_to_timespec64(ts);
2221 ocfs2_unpack_timespec(&ts,
2216 be64_to_cpu(lvb->lvb_imtime_packed)); 2222 be64_to_cpu(lvb->lvb_imtime_packed));
2217 ocfs2_unpack_timespec(&inode->i_ctime, 2223 inode->i_mtime = timespec_to_timespec64(ts);
2224 ocfs2_unpack_timespec(&ts,
2218 be64_to_cpu(lvb->lvb_ictime_packed)); 2225 be64_to_cpu(lvb->lvb_ictime_packed));
2226 inode->i_ctime = timespec_to_timespec64(ts);
2219 spin_unlock(&oi->ip_lock); 2227 spin_unlock(&oi->ip_lock);
2220} 2228}
2221 2229