[ox/fs] Add resize compactor
This commit is contained in:
parent
baff558ff2
commit
6571129686
@ -106,13 +106,15 @@ class FileStoreTemplate {
|
|||||||
* @return 0 if read is a success
|
* @return 0 if read is a success
|
||||||
*/
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
[[nodiscard]] Error read(InodeId_t id, FsSize_t readStart,
|
[[nodiscard]] ox::Error read(InodeId_t id, FsSize_t readStart,
|
||||||
FsSize_t readSize, T *data,
|
FsSize_t readSize, T *data,
|
||||||
FsSize_t *size) const;
|
FsSize_t *size) const;
|
||||||
|
|
||||||
[[nodiscard]] ValErr<StatInfo> stat(InodeId_t id);
|
[[nodiscard]] ValErr<StatInfo> stat(InodeId_t id);
|
||||||
|
|
||||||
[[nodiscard]] Error resize(std::size_t size, void *newBuff = nullptr);
|
void resize();
|
||||||
|
|
||||||
|
[[nodiscard]] ox::Error resize(std::size_t size, void *newBuff = nullptr);
|
||||||
|
|
||||||
[[nodiscard]] InodeId_t spaceNeeded(FsSize_t size);
|
[[nodiscard]] InodeId_t spaceNeeded(FsSize_t size);
|
||||||
|
|
||||||
@ -409,6 +411,12 @@ const ptrarith::Ptr<uint8_t, std::size_t> FileStoreTemplate<size_t>::read(InodeI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename size_t>
|
||||||
|
void FileStoreTemplate<size_t>::resize() {
|
||||||
|
compact();
|
||||||
|
m_buffSize = size() - available();
|
||||||
|
}
|
||||||
|
|
||||||
template<typename size_t>
|
template<typename size_t>
|
||||||
Error FileStoreTemplate<size_t>::resize(std::size_t size, void *newBuff) {
|
Error FileStoreTemplate<size_t>::resize(std::size_t size, void *newBuff) {
|
||||||
m_buffSize = size;
|
m_buffSize = size;
|
||||||
@ -484,6 +492,7 @@ void FileStoreTemplate<size_t>::compact() {
|
|||||||
<< "from" << oldAddr
|
<< "from" << oldAddr
|
||||||
<< "to" << item.offset();
|
<< "to" << item.offset();
|
||||||
auto parent = findParent(rootInode(), item);
|
auto parent = findParent(rootInode(), item);
|
||||||
|
oxAssert(parent.valid(), "Parent inode not found.");
|
||||||
if (parent.valid()) {
|
if (parent.valid()) {
|
||||||
if (parent->left == oldAddr) {
|
if (parent->left == oldAddr) {
|
||||||
parent->left = item;
|
parent->left = item;
|
||||||
|
10
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
10
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
@ -102,6 +102,11 @@ class FileSystemTemplate: public FileSystem {
|
|||||||
|
|
||||||
[[nodiscard]] ox::Error remove(const char *path, bool recursive = false) override;
|
[[nodiscard]] ox::Error remove(const char *path, bool recursive = false) override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resizes FileSystem to minimum possible size.
|
||||||
|
*/
|
||||||
|
void resize();
|
||||||
|
|
||||||
[[nodiscard]] ox::Error resize(uint64_t size, void *buffer = nullptr) override;
|
[[nodiscard]] ox::Error resize(uint64_t size, void *buffer = nullptr) override;
|
||||||
|
|
||||||
[[nodiscard]] ox::Error write(const char *path, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) override;
|
[[nodiscard]] ox::Error write(const char *path, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) override;
|
||||||
@ -237,6 +242,11 @@ ox::Error FileSystemTemplate<FileStore, Directory>::remove(const char *path, boo
|
|||||||
return OxError(0);
|
return OxError(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename FileStore, typename Directory>
|
||||||
|
void FileSystemTemplate<FileStore, Directory>::resize() {
|
||||||
|
m_fs.resize();
|
||||||
|
}
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
ox::Error FileSystemTemplate<FileStore, Directory>::resize(uint64_t size, void *buffer) {
|
ox::Error FileSystemTemplate<FileStore, Directory>::resize(uint64_t size, void *buffer) {
|
||||||
oxReturnError(m_fs.resize(size, buffer));
|
oxReturnError(m_fs.resize(size, buffer));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user