diff options
Diffstat (limited to 'fs/hfsplus/btree.c')
-rw-r--r-- | fs/hfsplus/btree.c | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/fs/hfsplus/btree.c b/fs/hfsplus/btree.c index 0fcec8b..0c6540c 100644 --- a/fs/hfsplus/btree.c +++ b/fs/hfsplus/btree.c @@ -15,118 +15,6 @@ #include "hfsplus_fs.h" #include "hfsplus_raw.h" -/* - * Initial source code of clump size calculation is gotten - * from http://opensource.apple.com/tarballs/diskdev_cmds/ - */ -#define CLUMP_ENTRIES 15 - -static short clumptbl[CLUMP_ENTRIES * 3] = { -/* - * Volume Attributes Catalog Extents - * Size Clump (MB) Clump (MB) Clump (MB) - */ - /* 1GB */ 4, 4, 4, - /* 2GB */ 6, 6, 4, - /* 4GB */ 8, 8, 4, - /* 8GB */ 11, 11, 5, - /* - * For volumes 16GB and larger, we want to make sure that a full OS - * install won't require fragmentation of the Catalog or Attributes - * B-trees. We do this by making the clump sizes sufficiently large, - * and by leaving a gap after the B-trees for them to grow into. - * - * For SnowLeopard 10A298, a FullNetInstall with all packages selected - * results in: - * Catalog B-tree Header - * nodeSize: 8192 - * totalNodes: 31616 - * freeNodes: 1978 - * (used = 231.55 MB) - * Attributes B-tree Header - * nodeSize: 8192 - * totalNodes: 63232 - * freeNodes: 958 - * (used = 486.52 MB) - * - * We also want Time Machine backup volumes to have a sufficiently - * large clump size to reduce fragmentation. - * - * The series of numbers for Catalog and Attribute form a geometric - * series. For Catalog (16GB to 512GB), each term is 8**(1/5) times - * the previous term. For Attributes (16GB to 512GB), each term is - * 4**(1/5) times the previous term. For 1TB to 16TB, each term is - * 2**(1/5) times the previous term. - */ - /* 16GB */ 64, 32, 5, - /* 32GB */ 84, 49, 6, - /* 64GB */ 111, 74, 7, - /* 128GB */ 147, 111, 8, - /* 256GB */ 194, 169, 9, - /* 512GB */ 256, 256, 11, - /* 1TB */ 294, 294, 14, - /* 2TB */ 338, 338, 16, - /* 4TB */ 388, 388, 20, - /* 8TB */ 446, 446, 25, - /* 16TB */ 512, 512, 32 -}; - -u32 hfsplus_calc_btree_clump_size(u32 block_size, u32 node_size, - u64 sectors, int file_id) -{ - u32 mod = max(node_size, block_size); - u32 clump_size; - int column; - int i; - - /* Figure out which column of the above table to use for this file. */ - switch (file_id) { - case HFSPLUS_ATTR_CNID: - column = 0; - break; - case HFSPLUS_CAT_CNID: - column = 1; - break; - default: - column = 2; - break; - } - - /* - * The default clump size is 0.8% of the volume size. And - * it must also be a multiple of the node and block size. - */ - if (sectors < 0x200000) { - clump_size = sectors << 2; /* 0.8 % */ - if (clump_size < (8 * node_size)) - clump_size = 8 * node_size; - } else { - /* turn exponent into table index... */ - for (i = 0, sectors = sectors >> 22; - sectors && (i < CLUMP_ENTRIES - 1); - ++i, sectors = sectors >> 1) { - /* empty body */ - } - - clump_size = clumptbl[column + (i) * 3] * 1024 * 1024; - } - - /* - * Round the clump size to a multiple of node and block size. - * NOTE: This rounds down. - */ - clump_size /= mod; - clump_size *= mod; - - /* - * Rounding down could have rounded down to 0 if the block size was - * greater than the clump size. If so, just use one block or node. - */ - if (clump_size == 0) - clump_size = mod; - - return clump_size; -} /* Get a reference to a B*Tree and do some initial checks */ struct hfs_btree *hfs_btree_open(struct super_block *sb, u32 id) |