[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