[Ocfs2-commits] mfasheh commits r2316 - trunk/fs/ocfs2

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Tue May 24 17:47:21 CDT 2005


Author: mfasheh
Signed-off-by: jlbec
Date: 2005-05-24 17:47:20 -0500 (Tue, 24 May 2005)
New Revision: 2316

Modified:
   trunk/fs/ocfs2/dlmglue.c
   trunk/fs/ocfs2/dlmglue.h
Log:
* pack the ocfs2 lvb tighter, this saves us a couple u32's in there.

Signed-off-by: jlbec



Modified: trunk/fs/ocfs2/dlmglue.c
===================================================================
--- trunk/fs/ocfs2/dlmglue.c	2005-05-24 22:43:53 UTC (rev 2315)
+++ trunk/fs/ocfs2/dlmglue.c	2005-05-24 22:47:20 UTC (rev 2316)
@@ -1230,20 +1230,31 @@
  * date from the truncate code. */
 static void __ocfs2_stuff_meta_lvb(struct inode *inode)
 {
-	ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_meta_lockres;
+	unsigned int isize_off;
+	struct ocfs2_inode_info *oi = OCFS2_I(inode);
+	ocfs2_lock_res *lockres = &oi->ip_meta_lockres;
 	ocfs2_meta_lvb *lvb     = (ocfs2_meta_lvb *) lockres->l_lksb.lvb;
 
 	mlog_entry_void();
 
-	lvb->lvb_iclusters = cpu_to_be32(OCFS2_I(inode)->ip_clusters);
+	/* take advantage of the fact that we don't support holes --
+	 * we only need the byte offset from i_clusters which nicely
+	 * cuts our lvb storage requirement to a u32 */
+	isize_off = ocfs2_clusters_to_bytes(inode->i_sb, oi->ip_clusters) 
+		- i_size_read(inode);
+
+	lvb->lvb_isize_off = cpu_to_be32(isize_off);
+	lvb->lvb_iclusters = cpu_to_be32(oi->ip_clusters);
 	lvb->lvb_iuid      = cpu_to_be32(inode->i_uid);
 	lvb->lvb_igid      = cpu_to_be32(inode->i_gid);
-	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(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));
+	lvb->lvb_iatime_packed  =
+		cpu_to_be64(ocfs2_pack_timespec(&inode->i_atime));
+	lvb->lvb_ictime_packed =
+		cpu_to_be64(ocfs2_pack_timespec(&inode->i_ctime));
+	lvb->lvb_imtime_packed =
+		cpu_to_be64(ocfs2_pack_timespec(&inode->i_mtime));
 
 	mlog_exit_void();
 }
@@ -1257,7 +1268,9 @@
 
 static void ocfs2_refresh_inode_from_lvb(struct inode *inode)
 {
-	ocfs2_lock_res *lockres = &OCFS2_I(inode)->ip_meta_lockres;
+	loff_t isize;
+	struct ocfs2_inode_info *oi = OCFS2_I(inode);
+	ocfs2_lock_res *lockres = &oi->ip_meta_lockres;
 	ocfs2_meta_lvb *lvb     = (ocfs2_meta_lvb *) lockres->l_lksb.lvb;
 
 	mlog_entry_void();
@@ -1266,30 +1279,41 @@
 	     be32_to_cpu(lvb->lvb.lvb_seq),
 	     be32_to_cpu(lvb->lvb_trunc_clusters),
 	     be32_to_cpu(lvb->lvb_iclusters));
-	mlog(0, "uid %u, gid %u, isize %"MLFu64", mode 0x%x\n",
+	mlog(0, "uid %u, gid %u, isize offset %u, mode 0x%x\n",
 	     be32_to_cpu(lvb->lvb_iuid), be32_to_cpu(lvb->lvb_igid),
-	     be64_to_cpu(lvb->lvb_isize), be16_to_cpu(lvb->lvb_imode));
-	mlog(0, "nlink %u, atime %"MLFu64", ctime %"MLFx64", mtime %"MLFx64"\n",
-	     be16_to_cpu(lvb->lvb_inlink), be64_to_cpu(lvb->lvb_iatime), 
-	     be64_to_cpu(lvb->lvb_ictime), be64_to_cpu(lvb->lvb_imtime));
+	     be32_to_cpu(lvb->lvb_isize_off), be16_to_cpu(lvb->lvb_imode));
+	mlog(0, "nlink %u, atime_packed %"MLFu64", ctime_packed %"MLFx64", "
+	     "mtime_packed %"MLFx64"\n",
+	     be16_to_cpu(lvb->lvb_inlink), be64_to_cpu(lvb->lvb_iatime_packed),
+	     be64_to_cpu(lvb->lvb_ictime_packed),
+	     be64_to_cpu(lvb->lvb_imtime_packed));
 
 	/* We're safe here without the lockres lock... */
-	spin_lock(&OCFS2_I(inode)->ip_lock);
-	OCFS2_I(inode)->ip_clusters = be32_to_cpu(lvb->lvb_iclusters);
+	spin_lock(&oi->ip_lock);
+	oi->ip_clusters = be32_to_cpu(lvb->lvb_iclusters);
+
+	isize = ocfs2_clusters_to_bytes(inode->i_sb, oi->ip_clusters)
+		- be32_to_cpu(lvb->lvb_isize_off);
+	i_size_write(inode, isize);
+
+	/* fast-symlinks are a special case */
+	if (S_ISLNK(inode->i_mode) && !oi->ip_clusters)
+		inode->i_blocks = 0;
+	else
+		inode->i_blocks =
+			ocfs2_align_bytes_to_sectors(i_size_read(inode));
+
 	inode->i_uid     = be32_to_cpu(lvb->lvb_iuid);
 	inode->i_gid     = be32_to_cpu(lvb->lvb_igid);
-	i_size_write(inode, be64_to_cpu(lvb->lvb_isize));
 	inode->i_mode    = be16_to_cpu(lvb->lvb_imode);
 	inode->i_nlink   = be16_to_cpu(lvb->lvb_inlink);
-	/* fast-symlinks are a special case */
-	if (S_ISLNK(inode->i_mode) && !OCFS2_I(inode)->ip_clusters)
-		inode->i_blocks = 0;
-	else
-		inode->i_blocks  = ocfs2_align_bytes_to_sectors(i_size_read(inode));
-	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(&OCFS2_I(inode)->ip_lock);
+	ocfs2_unpack_timespec(&inode->i_atime,
+			      be64_to_cpu(lvb->lvb_iatime_packed));
+	ocfs2_unpack_timespec(&inode->i_mtime,
+			      be64_to_cpu(lvb->lvb_imtime_packed));
+	ocfs2_unpack_timespec(&inode->i_ctime,
+			      be64_to_cpu(lvb->lvb_ictime_packed));
+	spin_unlock(&oi->ip_lock);
 
 	mlog_exit_void();
 }

Modified: trunk/fs/ocfs2/dlmglue.h
===================================================================
--- trunk/fs/ocfs2/dlmglue.h	2005-05-24 22:43:53 UTC (rev 2315)
+++ trunk/fs/ocfs2/dlmglue.h	2005-05-24 22:47:20 UTC (rev 2316)
@@ -71,10 +71,11 @@
 	u32       lvb_igid;
 	u16       lvb_imode;
 	u16       lvb_inlink;
-	u64       lvb_isize;
-	u64       lvb_iatime;
-	u64       lvb_ictime;
-	u64       lvb_imtime;
+	u64       lvb_iatime_packed;
+	u64       lvb_ictime_packed;
+	u64       lvb_imtime_packed;
+	u32       lvb_isize_off;
+	u32       lvb_reserved[3];
 } ocfs2_meta_lvb;
 
 int ocfs2_dlm_init(ocfs_super *osb);



More information about the Ocfs2-commits mailing list