[Ocfs2-commits] mfasheh commits r2292 - trunk/fs/ocfs2
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Thu May 19 18:14:28 CDT 2005
Author: mfasheh
Signed-off-by: zab
Date: 2005-05-19 18:14:26 -0500 (Thu, 19 May 2005)
New Revision: 2292
Modified:
trunk/fs/ocfs2/alloc.c
trunk/fs/ocfs2/dlmglue.c
trunk/fs/ocfs2/file.c
trunk/fs/ocfs2/inode.c
trunk/fs/ocfs2/namei.c
trunk/fs/ocfs2/ocfs2_fs.h
Log:
* give ocfs2 sub second timestamps
Signed-off-by: zab
Modified: trunk/fs/ocfs2/alloc.c
===================================================================
--- trunk/fs/ocfs2/alloc.c 2005-05-19 22:36:51 UTC (rev 2291)
+++ trunk/fs/ocfs2/alloc.c 2005-05-19 23:14:26 UTC (rev 2292)
@@ -1423,6 +1423,7 @@
spin_unlock(&OCFS_I(inode)->ip_lock);
fe->i_clusters -= clusters_to_del;
fe->i_mtime = CURRENT_TIME.tv_sec;
+ fe->i_mtime_nsec = cpu_to_le32(CURRENT_TIME.tv_nsec);
i = el->l_next_free_rec - 1;
Modified: trunk/fs/ocfs2/dlmglue.c
===================================================================
--- trunk/fs/ocfs2/dlmglue.c 2005-05-19 22:36:51 UTC (rev 2291)
+++ trunk/fs/ocfs2/dlmglue.c 2005-05-19 23:14:26 UTC (rev 2292)
@@ -1192,6 +1192,22 @@
mlog_exit_void();
}
+#define OCFS2_SEC_SHIFT 34
+#define OCFS2_NSEC_MASK ((1ULL << (64 - OCFS2_SEC_SHIFT)) - 1)
+
+/* LVB only has room for 64 bits of time here so we pack it for
+ * now. */
+static u64 ocfs2_pack_timespec(struct timespec *spec)
+{
+ u64 res;
+ u64 sec = spec->tv_sec;
+ u32 nsec = spec->tv_nsec;
+
+ res = (sec << OCFS2_SEC_SHIFT) | (nsec & OCFS2_NSEC_MASK);
+
+ return res;
+}
+
/* Call this with the lockres locked. I am reasonably sure we don't
* need ip_lock in this function as anyone who would be changing those
* values is supposed to be blocked in ocfs2_meta_lock right now.
@@ -1211,13 +1227,20 @@
lvb->lvb_isize = cpu_to_be64(i_size_read(inode));
lvb->lvb_imode = cpu_to_be16(inode->i_mode);
lvb->lvb_inlink = cpu_to_be16(inode->i_nlink);
- lvb->lvb_iatime = cpu_to_be64(inode->i_atime.tv_sec);
- lvb->lvb_ictime = cpu_to_be64(inode->i_ctime.tv_sec);
- lvb->lvb_imtime = cpu_to_be64(inode->i_mtime.tv_sec);
+ lvb->lvb_iatime = cpu_to_be64(ocfs2_pack_timespec(&inode->i_atime));
+ lvb->lvb_ictime = cpu_to_be64(ocfs2_pack_timespec(&inode->i_ctime));
+ lvb->lvb_imtime = cpu_to_be64(ocfs2_pack_timespec(&inode->i_mtime));
mlog_exit_void();
}
+static void ocfs2_unpack_timespec(struct timespec *spec,
+ u64 packed_time)
+{
+ spec->tv_sec = packed_time >> OCFS2_SEC_SHIFT;
+ spec->tv_nsec = packed_time & OCFS2_NSEC_MASK;
+}
+
static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
{
ocfs_inode_private *oip = OCFS_I(inode);
@@ -1250,9 +1273,9 @@
inode->i_blocks = 0;
else
inode->i_blocks = ocfs2_align_bytes_to_sectors(i_size_read(inode));
- inode->i_atime.tv_sec = be64_to_cpu(lvb->lvb_iatime);
- inode->i_ctime.tv_sec = be64_to_cpu(lvb->lvb_ictime);
- inode->i_mtime.tv_sec = be64_to_cpu(lvb->lvb_imtime);
+ ocfs2_unpack_timespec(&inode->i_atime, be64_to_cpu(lvb->lvb_iatime));
+ ocfs2_unpack_timespec(&inode->i_mtime, be64_to_cpu(lvb->lvb_imtime));
+ ocfs2_unpack_timespec(&inode->i_ctime, be64_to_cpu(lvb->lvb_ictime));
spin_unlock(&oip->ip_lock);
mlog_exit_void();
@@ -1671,6 +1694,7 @@
void ocfs2_dlm_shutdown(ocfs_super *osb)
{
mlog_entry_void();
+
ocfs2_drop_super_lock(osb);
if (osb->vote_task) {
@@ -1728,7 +1752,8 @@
dlm_status status;
if (lockres->l_flags & OCFS2_LOCK_BUSY)
- mlog(0,"destroying busy lock: \"%s\"\n", lockres->l_name);
+ mlog(ML_ERROR, "destroying busy lock: \"%s\"\n",
+ lockres->l_name);
if (lockres->l_flags & OCFS2_LOCK_BLOCKED)
mlog(0, "destroying blocked lock: \"%s\"\n", lockres->l_name);
Modified: trunk/fs/ocfs2/file.c
===================================================================
--- trunk/fs/ocfs2/file.c 2005-05-19 22:36:51 UTC (rev 2291)
+++ trunk/fs/ocfs2/file.c 2005-05-19 23:14:26 UTC (rev 2292)
@@ -844,6 +844,7 @@
fe->i_size = new_fe_size;
fe->i_mtime = CURRENT_TIME.tv_sec;
+ fe->i_mtime_nsec = cpu_to_le32(CURRENT_TIME.tv_nsec);
status = ocfs_journal_dirty(handle, bh);
if (status < 0) {
@@ -890,6 +891,7 @@
OCFS_I(inode)->ip_clusters, i_size_read(inode));
fe->i_ctime = fe->i_mtime = CURRENT_TIME.tv_sec;
+ fe->i_ctime_nsec = fe->i_mtime_nsec = cpu_to_le32(CURRENT_TIME.tv_nsec);
status = ocfs_journal_dirty(handle, bh);
if (status < 0) {
Modified: trunk/fs/ocfs2/inode.c
===================================================================
--- trunk/fs/ocfs2/inode.c 2005-05-19 22:36:51 UTC (rev 2291)
+++ trunk/fs/ocfs2/inode.c 2005-05-19 23:14:26 UTC (rev 2292)
@@ -294,8 +294,11 @@
inode->i_mapping->a_ops = &ocfs_aops;
inode->i_flags |= S_NOATIME;
inode->i_atime.tv_sec = fe->i_atime;
+ inode->i_atime.tv_nsec = le32_to_cpu(fe->i_atime_nsec);
inode->i_mtime.tv_sec = fe->i_mtime;
+ inode->i_mtime.tv_nsec = le32_to_cpu(fe->i_mtime_nsec);
inode->i_ctime.tv_sec = fe->i_ctime;
+ inode->i_ctime.tv_nsec = le32_to_cpu(fe->i_ctime_nsec);
OCFS_I(inode)->ip_blkno = fe->i_blkno;
@@ -922,8 +925,11 @@
fe->i_gid = inode->i_gid;
fe->i_mode = inode->i_mode;
fe->i_atime = inode->i_atime.tv_sec;
+ fe->i_atime_nsec = cpu_to_le32(inode->i_atime.tv_nsec);
fe->i_ctime = inode->i_ctime.tv_sec;
+ fe->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
fe->i_mtime = inode->i_mtime.tv_sec;
+ fe->i_mtime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec);
/* XXX: Do we want to update i_dtime here? */
/* fe->i_dtime = inode->i_dtime.tv_sec; */
@@ -967,10 +973,11 @@
else
inode->i_blocks = ocfs2_align_bytes_to_sectors(i_size_read(inode));
inode->i_atime.tv_sec = fe->i_atime;
+ inode->i_atime.tv_nsec = le32_to_cpu(fe->i_atime_nsec);
inode->i_mtime.tv_sec = fe->i_mtime;
+ inode->i_mtime.tv_nsec = le32_to_cpu(fe->i_mtime_nsec);
inode->i_ctime.tv_sec = fe->i_ctime;
+ inode->i_ctime.tv_nsec = le32_to_cpu(fe->i_ctime_nsec);
spin_unlock(&oip->ip_lock);
} /* ocfs_refresh_inode */
-
-
Modified: trunk/fs/ocfs2/namei.c
===================================================================
--- trunk/fs/ocfs2/namei.c 2005-05-19 22:36:51 UTC (rev 2291)
+++ trunk/fs/ocfs2/namei.c 2005-05-19 23:14:26 UTC (rev 2292)
@@ -576,6 +576,8 @@
strcpy (fe->i_signature, OCFS2_INODE_SIGNATURE);
fe->i_flags |= OCFS2_VALID_FL;
fe->i_atime = fe->i_ctime = fe->i_mtime = CURRENT_TIME.tv_sec;
+ fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec =
+ cpu_to_le32(CURRENT_TIME.tv_nsec);
fe->i_dtime = 0;
fel = &fe->id2.i_list;
@@ -712,10 +714,11 @@
goto bail;
}
- fe->i_links_count++;
- fe->i_ctime = CURRENT_TIME.tv_sec;
- inode->i_nlink = fe->i_links_count;
- inode->i_ctime.tv_sec = fe->i_ctime;
+ inode->i_nlink++;
+ inode->i_ctime = CURRENT_TIME;
+ fe->i_links_count = inode->i_nlink;
+ fe->i_ctime = inode->i_ctime.tv_sec;
+ fe->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
err = ocfs_journal_dirty(handle, fe_bh);
if (err < 0) {
Modified: trunk/fs/ocfs2/ocfs2_fs.h
===================================================================
--- trunk/fs/ocfs2/ocfs2_fs.h 2005-05-19 22:36:51 UTC (rev 2291)
+++ trunk/fs/ocfs2/ocfs2_fs.h 2005-05-19 23:14:26 UTC (rev 2292)
@@ -402,8 +402,10 @@
__u64 i_last_eb_blk; /* Pointer to last extent
block */
/*60*/ __u32 i_fs_generation; /* Generation per fs-instance */
- __u32 i_reserved1; /* Generation per fs-instance */
-/*68*/ __u64 i_reserved2[10];
+ __u32 i_atime_nsec;
+ __u32 i_ctime_nsec;
+ __u32 i_mtime_nsec;
+/*70*/ __u64 i_reserved1[9];
/*B8*/ union {
__u64 i_pad1; /* Generic way to refer to this
64bit union */
More information about the Ocfs2-commits
mailing list