29 if(pfsFixIndex(blockpos->block_segment)==0)
32 bi = &blockpos->inode->u.inode->data[pfsFixIndex(blockpos->block_segment)];
34 if ((ret = pfsBitmapAllocateAdditionalZones(clink->pfsMount, bi,
count)))
37 clink->u.inode->number_blocks+=ret;
38 blockpos->inode->flags |= PFS_CACHE_FLAG_DIRTY;
39 clink->flags |= PFS_CACHE_FLAG_DIRTY;
51 u32 i, old_blocks = blocks;
57 if (pfsFixIndex(clink->u.inode->number_data) == 0)
61 bi2 = &blockpos->inode->u.inode->data[pfsFixIndex(blockpos->block_segment)];
62 bi.subpart=bi2->subpart;
64 bi.number=bi2->number+bi2->count;
65 result=pfsBitmapSearchFreeZone(pfsMount, &bi, clink->u.inode->number_blocks);
68 PFS_PRINTF(PFS_DRV_NAME
": Error: Couldnt allocate zone! (1)\n");
72 clink2=pfsCacheGetData(pfsMount, bi.subpart, bi.number << pfsMount->inode_scale,
73 PFS_CACHE_FLAG_SEGI | PFS_CACHE_FLAG_NOLOAD, &result);
75 clink2->u.inode->magic=PFS_SEGI_MAGIC;
77 memcpy(&clink2->u.inode->inode_block, &clink->u.inode->inode_block,
sizeof(
pfs_blockinfo_t));
78 memcpy(&clink2->u.inode->last_segment, &blockpos->inode->u.inode->data[0],
sizeof(
pfs_blockinfo_t));
81 clink2->flags |= PFS_CACHE_FLAG_DIRTY;
83 clink->u.inode->number_blocks+=bi.count;
84 clink->u.inode->number_data++;
88 clink->u.inode->number_segdesg++;
90 clink->flags |= PFS_CACHE_FLAG_DIRTY;
91 blockpos->block_segment++;
92 blockpos->block_offset=0;
94 memcpy(&blockpos->inode->u.inode->next_segment, &bi,
sizeof(
pfs_blockinfo_t));
96 blockpos->inode->flags |= PFS_CACHE_FLAG_DIRTY;
97 pfsCacheFree(blockpos->inode);
98 blockpos->inode=clink2;
101 bi2 = &blockpos->inode->u.inode->data[pfsFixIndex(blockpos->block_segment)];
102 bi.subpart = bi2->subpart;
104 bi.number = bi2->number + bi2->count;
106 result = pfsBitmapSearchFreeZone(pfsMount, &bi, clink->u.inode->number_blocks);
109 PFS_PRINTF(PFS_DRV_NAME
": Error: Couldnt allocate zone! (2)\n");
113 clink->u.inode->number_blocks += bi.count;
114 clink->u.inode->number_data++;
115 clink->flags |= PFS_CACHE_FLAG_DIRTY;
116 blockpos->block_offset=0;
117 blockpos->block_segment++;
119 i = pfsFixIndex(clink->u.inode->number_data-1);
120 memcpy(&blockpos->inode->u.inode->data[i], &bi,
sizeof(
pfs_blockinfo_t));
122 blockpos->inode->flags |= PFS_CACHE_FLAG_DIRTY;
125 blocks -= pfsBlockExpandSegment(clink, blockpos, blocks);
127 return old_blocks - blocks;
134 return &blockpos->inode->u.inode->data[pfsFixIndex(blockpos->block_segment)];
139 return pfsCacheGetData(clink->pfsMount, clink->u.inode->last_segment.subpart,
140 clink->u.inode->last_segment.number<<clink->pfsMount->inode_scale,
141 (clink->u.inode->last_segment.subpart==
142 clink->u.inode->inode_block.subpart)&&
143 (clink->u.inode->last_segment.number==
144 clink->u.inode->inode_block.number) ? 16 : 32, result);
u32 count
start sector of fragmented bd/file