23extern u32 pfsMetaSize;
30 PFS_PRINTF(PFS_DRV_NAME
": pfsInodePrint: Checksum = 0x%lX, Magic = 0x%lX\n", inode->checksum, inode->magic);
31 PFS_PRINTF(PFS_DRV_NAME
": Mode = 0x%X, attr = 0x%X\n", inode->mode, inode->attr);
32 PFS_PRINTF(PFS_DRV_NAME
": size = 0x%08lX%08lX\n", (u32)(inode->size >> 32), (u32)(inode->size));
37 u32 *ptr=(u32 *)inode;
41 for(i=1; i < 256; i++)
48 return pfsCacheGetData(pfsMount, sub, inode << pfsMount->inode_scale,
49 PFS_CACHE_FLAG_SEGD, result);
54 pfsGetTime(&clink->u.inode->mtime);
55 memcpy(&clink->u.inode->ctime, &clink->u.inode->mtime,
sizeof(
pfs_datetime_t));
56 memcpy(&clink->u.inode->atime, &clink->u.inode->mtime,
sizeof(
pfs_datetime_t));
57 clink->flags|=PFS_CACHE_FLAG_DIRTY;
62 pfsInodeSetTime(parent);
63 self->flags|=PFS_CACHE_FLAG_DIRTY;
66int pfsInodeSync(
pfs_blockpos_t *blockpos, u64 size, u32 used_segments)
72 for(i=pfsBlockSyncPos(blockpos, size); i; )
74 count=blockpos->inode->u.inode->data[pfsFixIndex(blockpos->block_segment)].count;
76 i+=blockpos->block_offset;
79 blockpos->block_offset=i;
85 if (blockpos->block_segment + 1 == used_segments)
87 blockpos->block_offset=
count;
88 if (i || blockpos->byte_offset){
89 PFS_PRINTF(PFS_DRV_NAME
": panic: fp exceeds file.\n");
93 blockpos->block_offset=0;
94 blockpos->block_segment++;
97 if (pfsFixIndex(blockpos->block_segment))
100 if ((blockpos->inode = pfsBlockGetNextSegment(blockpos->inode, &result)) == 0)
114 bi = &position->inode->u.inode->data[pfsFixIndex(position->block_segment)];
116 return pfsCacheGetData(pfsMount, bi->subpart,
117 ((bi->number + position->block_offset) << pfsMount->inode_scale) +
118 position->byte_offset / pfsMetaSize, PFS_CACHE_FLAG_NOTHING, result);
125 *result=pfsBlockInitPos(clink, &blockpos, position);
126 if (*result)
return 0;
128 *offset=blockpos.byte_offset % pfsMetaSize;
130 r=pfsGetDentriesChunk(&blockpos, result);
131 pfsCacheFree(blockpos.inode);
u32 count
start sector of fragmented bd/file