• Home
  • Raw
  • Download

Lines Matching refs:block

140     OsBcacheBlock *block = NULL;  in RbFindBlock()  local
143 for (; node != NULL; node = (block->num < num) ? node->rb_right : node->rb_left) { in RbFindBlock()
144 block = rb_entry(node, OsBcacheBlock, rbNode); in RbFindBlock()
145 if (block->num == num) { in RbFindBlock()
146 return block; in RbFindBlock()
152 static VOID RbAddBlock(OsBcache *bc, OsBcacheBlock *block) in RbAddBlock() argument
159 rb_link_node(&block->rbNode, NULL, &bc->rbRoot.rb_node); in RbAddBlock()
161 …for (; node != NULL; link = (b->num > block->num) ? &node->rb_left : &node->rb_right, node = *link… in RbAddBlock()
163 if (b->num == block->num) { in RbAddBlock()
164 … PRINT_ERR("RbAddBlock fail, b->num = %llu, block->num = %llu\n", b->num, block->num); in RbAddBlock()
168 rb_link_node(&block->rbNode, &b->rbNode, link); in RbAddBlock()
170 rb_insert_color(&block->rbNode, &bc->rbRoot); in RbAddBlock()
173 static inline VOID RbDelBlock(OsBcache *bc, OsBcacheBlock *block) in RbDelBlock() argument
175 rb_erase(&block->rbNode, &bc->rbRoot); in RbDelBlock()
178 static inline VOID ListMoveBlockToHead(OsBcache *bc, OsBcacheBlock *block) in ListMoveBlockToHead() argument
180 LOS_ListDelete(&block->listNode); in ListMoveBlockToHead()
181 LOS_ListAdd(&bc->listHead, &block->listNode); in ListMoveBlockToHead()
184 static inline VOID FreeBlock(OsBcache *bc, OsBcacheBlock *block) in FreeBlock() argument
186 block->used = FALSE; in FreeBlock()
187 LOS_ListAdd(&bc->freeListHead, &block->listNode); in FreeBlock()
246 static INT32 BlockRead(OsBcache *bc, OsBcacheBlock *block, UINT8 *buf) in BlockRead() argument
249 (block->num) << GetValLog2(bc->sectorPerBlock)); in BlockRead()
252 if (block->modified == FALSE) { in BlockRead()
253 if (block->listNode.pstNext != NULL) { in BlockRead()
254 LOS_ListDelete(&block->listNode); /* list del block */ in BlockRead()
255 RbDelBlock(bc, block); in BlockRead()
257 FreeBlock(bc, block); in BlockRead()
262 block->readFlag = TRUE; in BlockRead()
266 static INT32 BcacheGetFlag(OsBcache *bc, OsBcacheBlock *block) in BcacheGetFlag() argument
273 if (block->readFlag == TRUE) { in BcacheGetFlag()
278 flag &= block->flag[i]; in BcacheGetFlag()
285 ret = BlockRead(bc, block, bc->rwBuffer); in BcacheGetFlag()
291 val = block->flag[i]; in BcacheGetFlag()
311 … if (memcpy_s(block->data + pos, bc->blockSize - pos, bc->rwBuffer + pos, currentSize) != EOK) { in BcacheGetFlag()
324 static VOID BcacheSetFlag(const OsBcache *bc, OsBcacheBlock *block, UINT32 pos, UINT32 size) in BcacheSetFlag() argument
339 block->flag[i] |= 1u << (UNINT_MAX_SHIFT_BITS - j); in BcacheSetFlag()
348 static INT32 BcacheSyncBlock(OsBcache *bc, OsBcacheBlock *block) in BcacheSyncBlock() argument
353 if (block->modified == TRUE) { in BcacheSyncBlock()
354 D(("bcache writing block = %llu\n", block->num)); in BcacheSyncBlock()
356 ret = FindFlagPos(block->flag, bc->sectorPerBlock >> UNINT_LOG2_SHIFT, &start, &end); in BcacheSyncBlock()
360 ret = BcacheGetFlag(bc, block); in BcacheSyncBlock()
368 ret = bc->bwriteFun(bc->priv, (const UINT8 *)(block->data + (start * bc->sectorSize)), in BcacheSyncBlock()
369 len, (block->num * bc->sectorPerBlock) + start); in BcacheSyncBlock()
371 block->modified = FALSE; in BcacheSyncBlock()
375 ret, len, block->num, start); in BcacheSyncBlock()
381 static void NumListAdd(OsBcache *bc, OsBcacheBlock *block) in NumListAdd() argument
386 if (temp->num > block->num) { in NumListAdd()
387 LOS_ListTailInsert(&temp->numNode, &block->numNode); in NumListAdd()
392 LOS_ListTailInsert(&bc->numHead, &block->numNode); in NumListAdd()
395 static void AddBlock(OsBcache *bc, OsBcacheBlock *block) in AddBlock() argument
397 RbAddBlock(bc, block); in AddBlock()
398 NumListAdd(bc, block); in AddBlock()
399 bc->sumNum += block->num; in AddBlock()
401 LOS_ListAdd(&bc->listHead, &block->listNode); in AddBlock()
404 static void DelBlock(OsBcache *bc, OsBcacheBlock *block) in DelBlock() argument
406 LOS_ListDelete(&block->listNode); /* lru list del */ in DelBlock()
407 LOS_ListDelete(&block->numNode); /* num list del */ in DelBlock()
408 bc->sumNum -= block->num; in DelBlock()
410 RbDelBlock(bc, block); /* rb tree del */ in DelBlock()
411 FreeBlock(bc, block); /* free list add */ in DelBlock()
414 static BOOL BlockAllDirty(const OsBcache *bc, OsBcacheBlock *block) in BlockAllDirty() argument
420 if (block->modified == TRUE) { in BlockAllDirty()
421 if (block->allDirty) { in BlockAllDirty()
425 if (FindFlagPos(block->flag, len, &start, &end) == ENOERR) { in BlockAllDirty()
427 block->allDirty = TRUE; in BlockAllDirty()
456 OsBcacheBlock *block = NULL; in GetSlowBlock() local
458 LOS_DL_LIST_FOR_EACH_ENTRY(block, &bc->freeListHead, OsBcacheBlock, listNode) { in GetSlowBlock()
459 if (block->readBuff == read) { in GetSlowBlock()
460 block->used = TRUE; in GetSlowBlock()
461 LOS_ListDelete(&block->listNode); in GetSlowBlock()
462 return block; /* get free one */ in GetSlowBlock()
468 block = LOS_DL_LIST_ENTRY(node, OsBcacheBlock, listNode); in GetSlowBlock()
469 node = block->listNode.pstPrev; in GetSlowBlock()
471 if (block->readBuff == read) { in GetSlowBlock()
472 if (block->modified == TRUE) { in GetSlowBlock()
473 BcacheSyncBlock(bc, block); in GetSlowBlock()
476 DelBlock(bc, block); in GetSlowBlock()
477 block->used = TRUE; in GetSlowBlock()
478 LOS_ListDelete(&block->listNode); in GetSlowBlock()
479 return block; /* get used one */ in GetSlowBlock()
542 OsBcacheBlock *block = NULL; in GetMinWriteNum() local
544 LOS_DL_LIST_FOR_EACH_ENTRY(block, &bc->numHead, OsBcacheBlock, numNode) { in GetMinWriteNum()
545 if (!block->readBuff) { in GetMinWriteNum()
546 ret = block->num; in GetMinWriteNum()
602 OsBcacheBlock *block = NULL; in BcacheSync() local
610 block = LOS_DL_LIST_ENTRY(node, OsBcacheBlock, listNode); in BcacheSync()
611 ret = BcacheSyncBlock(bc, block); in BcacheSync()
623 static VOID BlockInit(OsBcache *bc, OsBcacheBlock *block, UINT64 num) in BlockInit() argument
625 (VOID)memset_s(block->flag, sizeof(block->flag), 0, sizeof(block->flag)); in BlockInit()
626 block->num = num; in BlockInit()
627 block->readFlag = FALSE; in BlockInit()
628 if (block->modified == TRUE) { in BlockInit()
629 block->modified = FALSE; in BlockInit()
632 block->allDirty = FALSE; in BlockInit()
638 OsBcacheBlock *block = NULL; in BcacheGetBlock() local
647 block = (first->num == num) ? first : RbFindBlock(bc, num); in BcacheGetBlock()
650 if (block != NULL) { in BcacheGetBlock()
653 UINT32 index = ((UINT32)(block->data - g_memStart)) / g_dataSize; in BcacheGetBlock()
658 if (first != block) { in BcacheGetBlock()
659 ListMoveBlockToHead(bc, block); in BcacheGetBlock()
661 *dblock = block; in BcacheGetBlock()
663 if ((bc->prereadFun != NULL) && (readData == TRUE) && (block->pgHit == 1)) { in BcacheGetBlock()
664 block->pgHit = 0; in BcacheGetBlock()
665 bc->prereadFun(bc, block); in BcacheGetBlock()
673 block = AllocNewBlock(bc, readData, num); in BcacheGetBlock()
674 if (block == NULL) { in BcacheGetBlock()
675 block = GetSlowBlock(bc, readData); in BcacheGetBlock()
678 if (block == NULL) { in BcacheGetBlock()
682 UINT32 index = ((UINT32)(block->data - g_memStart)) / g_dataSize; in BcacheGetBlock()
686 BlockInit(bc, block, num); in BcacheGetBlock()
689 D(("bcache reading block = %llu\n", block->num)); in BcacheGetBlock()
691 ret = BlockRead(bc, block, block->data); in BcacheGetBlock()
696 bc->prereadFun(bc, block); in BcacheGetBlock()
700 AddBlock(bc, block); in BcacheGetBlock()
702 *dblock = block; in BcacheGetBlock()
708 OsBcacheBlock *block = NULL; in BcacheClearCache() local
710 LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(block, next, &bc->listHead, OsBcacheBlock, listNode) { in BcacheClearCache()
711 DelBlock(bc, block); in BcacheClearCache()
723 OsBcacheBlock *block = NULL; in BcacheInitCache() local
758 block = (OsBcacheBlock *)(VOID *)blockMem; in BcacheInitCache()
759 block->data = dataMem; in BcacheInitCache()
760 block->readBuff = (i < CONFIG_FS_FAT_READ_NUMS) ? TRUE : FALSE; in BcacheInitCache()
763 bc->wStart = block; in BcacheInitCache()
766 LOS_ListTailInsert(&bc->freeListHead, &block->listNode); in BcacheInitCache()
772 bc->wEnd = block; in BcacheInitCache()
826 OsBcacheBlock *block = NULL; in BlockCacheRead() local
856 ret = BcacheGetBlock(bc, num, useRead, &block); in BlockCacheRead()
862 if ((block->readFlag == FALSE) && (block->modified == TRUE)) { in BlockCacheRead()
863 ret = BcacheGetFlag(bc, block); in BlockCacheRead()
868 } else if ((block->readFlag == FALSE) && (block->modified == FALSE)) { in BlockCacheRead()
869 ret = BlockRead(bc, block, block->data); in BlockCacheRead()
876 … if (LOS_CopyFromKernel((VOID *)tempBuf, size, (VOID *)(block->data + pos), currentSize) != EOK) { in BlockCacheRead()
894 OsBcacheBlock *block = NULL; in BlockCacheWrite() local
919 ret = BcacheGetBlock(bc, num, FALSE, &block); in BlockCacheWrite()
925 if (LOS_CopyToKernel((VOID *)(block->data + pos), bc->blockSize - (UINT32)pos, in BlockCacheWrite()
930 if (block->modified == FALSE) { in BlockCacheWrite()
931 block->modified = TRUE; in BlockCacheWrite()
935 (void)memset_s(block->flag, sizeof(block->flag), 0xFF, sizeof(block->flag)); in BlockCacheWrite()
936 block->allDirty = TRUE; in BlockCacheWrite()
938 BcacheSetFlag(bc, block, (UINT32)pos, currentSize); in BlockCacheWrite()
1137 OsBcacheBlock *block = NULL; in BcacheAsyncPrereadThread() local
1155 ret = BcacheGetBlock(bc, bc->curBlockNum + i, TRUE, &block); in BcacheAsyncPrereadThread()
1163 if (block != NULL) { in BcacheAsyncPrereadThread()
1164 block->pgHit = 1; /* preread complete */ in BcacheAsyncPrereadThread()
1173 const OsBcacheBlock *block = arg2; in ResumeAsyncPreread() local
1176 bc->curBlockNum = block->num; in ResumeAsyncPreread()