diff --git a/fs/vfs/bcache/src/bcache.c b/fs/vfs/bcache/src/bcache.c index c1e763764c005be111300883edd2a0c15d6e527e..4c1e0732585e86a78c5f6dec969cbfb8ad3e3b8a 100644 --- a/fs/vfs/bcache/src/bcache.c +++ b/fs/vfs/bcache/src/bcache.c @@ -581,8 +581,11 @@ static OsBcacheBlock *AllocNewBlock(OsBcache *bc, BOOL read, UINT64 num) DelBlock(bc, prefer); } + if (prefer->used) { /* do not combine with next check */ + MergeSyncBlocks(bc, prefer); /* prefer->used may be changed here */ + } + if (prefer->used) { - MergeSyncBlocks(bc, prefer); BcacheSyncBlock(bc, prefer); DelBlock(bc, prefer); } diff --git a/fs/vfs/vnode.c b/fs/vfs/vnode.c index fb0ce33052b7052348cac630e9263c4a6a7bcd9d..41fb043f7867440fcc941e655037da147e4b2545 100644 --- a/fs/vfs/vnode.c +++ b/fs/vfs/vnode.c @@ -260,7 +260,7 @@ int VnodeDrop(void) static char *NextName(char *pos, uint8_t *len) { char *name = NULL; - while (*pos == '/') { + while (*pos != 0 && *pos == '/') { pos++; } if (*pos == '\0') {