]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/hfs/hfs_btreeio.c
xnu-792.10.96.tar.gz
[apple/xnu.git] / bsd / hfs / hfs_btreeio.c
index 5035285535f9ab683fcd813e881b3f0dc8cf13f1..3c19d78e2c9eb1a27587ac0dfdd5db60d73c8a9e 100644 (file)
@@ -289,6 +289,8 @@ exit:
 }
 
 
+#define HFS_CLUMP_ADJ_LIMIT  (200*1024*1024)
+
 __private_extern__
 OSStatus ExtendBTreeFile(FileReference vp, FSSize minEOF, FSSize maxEOF)
 {
@@ -321,7 +323,13 @@ OSStatus ExtendBTreeFile(FileReference vp, FSSize minEOF, FSSize maxEOF)
        }
 
        vcb = VTOVCB(vp);
-       
+
+       /* Take past growth into account when extending the catalog file. */
+       if ((VTOC(vp)->c_fileid == kHFSCatalogFileID) &&
+           (bytesToAdd / vcb->blockSize) < filePtr->fcbExtents[0].blockCount) {
+                       bytesToAdd = filePtr->fcbExtents[0].blockCount * (UInt64)vcb->blockSize;
+                       bytesToAdd = MIN(bytesToAdd, HFS_CLUMP_ADJ_LIMIT);
+       }
        /*
         * The Extents B-tree can't have overflow extents. ExtendFileC will
         * return an error if an attempt is made to extend the Extents B-tree