Implement storedevs, prepare to port littlefs

This commit is contained in:
2025-08-16 12:34:36 +02:00
parent c936910199
commit 2b0566c56f
91 changed files with 54963 additions and 37 deletions

View File

@ -22,7 +22,7 @@ int32_t kvfs_read(struct VfsMountPoint *vmp, const char *key, uint8_t *const buf
}
spinlock_acquire(&node->spinlock);
hal_memcpy(buffer + off, node->buffer, MIN(n, KVFS_BUFFER_SIZE - off));
vmp->backingsd->read(vmp->backingsd, buffer, n, off);
spinlock_release(&node->spinlock);
return E_OK;
}
@ -42,15 +42,7 @@ int32_t kvfs_write(struct VfsMountPoint *vmp, const char *key, const uint8_t *co
spinlock_release(&vmp->spinlock);
spinlock_acquire(&node->spinlock);
if (node->buffer == NULL) {
node->buffer = dlmalloc(KVFS_BUFFER_SIZE);
if (node->buffer == NULL) {
spinlock_release(&node->spinlock);
return E_NOMEMORY;
}
}
hal_memcpy(node->buffer + off, buffer, MIN(n, KVFS_BUFFER_SIZE - off));
vmp->backingsd->write(vmp->backingsd, buffer, n, off);
spinlock_release(&node->spinlock);
return E_OK;
}
@ -67,22 +59,15 @@ int32_t kvfs_remove(struct VfsMountPoint *vmp, const char *key) {
}
spinlock_acquire(&node->spinlock);
if (node->buffer != NULL) {
dlfree(node->buffer);
}
hal_memset(node, 0, sizeof(*node));
spinlock_release(&node->spinlock);
return E_OK;
}
int32_t kvfs_cleanup(struct VfsMountPoint *vmp) {
for (size_t i = 0; i < KVFS_NODES_MAX; i++) {
KvfsNode *node = &vmp->fs.kvfs.nodes[i];
spinlock_acquire(&node->spinlock);
if (node->buffer != NULL) {
dlfree(node->buffer);
}
spinlock_release(&node->spinlock);
int32_t err = vmp->backingsd->cleanup(vmp->backingsd);
if (err != E_OK) {
return err;
}
return E_OK;
}

View File

@ -12,7 +12,6 @@ struct VfsMountPoint;
typedef struct {
bool taken;
uint8_t key_[KVFS_NODE_KEY_MAX];
uint8_t *buffer;
SpinLock spinlock;
} KvfsNode;