[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