[Ocfs2-commits] jlbec commits r1583 - trunk/src

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Tue Oct 19 17:45:12 CDT 2004


Author: jlbec
Date: 2004-10-19 17:45:10 -0500 (Tue, 19 Oct 2004)
New Revision: 1583

Modified:
   trunk/src/alloc.c
Log:

o Make ocfs_extent_contig() only deal with true contig
o Modify callers to check !el->l_recs[i].e_clusters themselves.



Modified: trunk/src/alloc.c
===================================================================
--- trunk/src/alloc.c	2004-10-19 00:09:33 UTC (rev 1582)
+++ trunk/src/alloc.c	2004-10-19 22:45:10 UTC (rev 1583)
@@ -119,18 +119,9 @@
 static int ocfs_extent_contig(struct inode *inode, ocfs2_extent_rec *ext,
 			      u64 blkno)
 {
-	u64 start_blkno = ext->e_blkno;
-
-	if (!ext->e_clusters) {
-		/* an empty extent is always contig. */
-		OCFS_ASSERT(!ext->e_blkno);
-		OCFS_ASSERT(ext->e_cpos);
-		return 1;
-	}
-		
-	start_blkno += ocfs2_clusters_to_blocks(inode->i_sb,
-						ext->e_clusters);
-	return (start_blkno == blkno);
+	return blkno == (ext->e_blkno +
+			 ocfs2_clusters_to_blocks(inode->i_sb,
+						  ext->e_clusters));
 }
 
 static int ocfs_free_clusters(ocfs_super *osb,
@@ -680,6 +671,7 @@
 		 * actual extent data below. */
 		OCFS_ASSERT_RO(el->l_next_free_rec);
 		el->l_recs[el->l_next_free_rec - 1].e_clusters += new_clusters;
+		/* (num_bhs - 1) to avoid the leaf */
 		for(i = 0; i < (num_bhs - 1); i++) {
 			eb = (ocfs2_extent_block *) eb_bhs[i]->b_data;
 			el = &eb->h_list;
@@ -706,15 +698,19 @@
 	if (el->l_next_free_rec && ocfs_extent_contig(inode, 
 						      &el->l_recs[i], 
 						      start_blk)) {
-		/* having an empty extent at eof is legal. */
-		if (!el->l_recs[i].e_clusters)
-			el->l_recs[i].e_blkno = start_blk;
 		el->l_recs[i].e_clusters += new_clusters;
+	} else if (el->l_next_free_rec && !el->l_recs[i].e_clusters) {
+		/* having an empty extent at eof is legal. */
+		OCFS_ASSERT_RO(el->l_recs[i].e_cpos == fe->i_clusters);
+		el->l_recs[i].e_blkno = start_blk;
+		el->l_recs[i].e_clusters = new_clusters;
 	} else {
 		/* No contiguous record, or no empty record at eof, so
 		 * we add a new one. */
+
 		OCFS_ASSERT(el->l_next_free_rec < el->l_count);
 		i = el->l_next_free_rec;
+
 		el->l_recs[i].e_blkno = start_blk;
 		el->l_recs[i].e_clusters = new_clusters;
 		el->l_recs[i].e_cpos = fe->i_clusters;
@@ -868,6 +864,7 @@
 	i = el->l_next_free_rec - 1;
 	if (!el->l_next_free_rec
 	    || (el->l_next_free_rec < el->l_count)
+	    || !el->l_recs[i].e_clusters
 	    || ocfs_extent_contig(inode, &el->l_recs[i], start_blk))
 		goto out_add;
 



More information about the Ocfs2-commits mailing list