23#include "pedigree/kernel/processor/types.h"
24#include "pedigree/kernel/utilities/String.h"
27#include "modules/system/vfs/File.h"
28#include "modules/system/vfs/QuotaTable.h"
50 virtual FileHandleStatus subscribeInodeEvents(FileEventMask,
53 virtual void finishInodeRetirement()
override;
55 virtual void preallocate(
size_t expectedSize,
bool zero =
true)
override;
57 virtual void extend(
size_t newSize)
override;
58 virtual void extend(
size_t newSize, uint64_t location, uint64_t size)
override;
61 virtual size_t getSize()
override;
65 virtual Attributes getAttributes()
const override;
71 virtual uintptr_t
readBlock(uint64_t location)
override;
72 virtual void writeBlock(uint64_t location, uintptr_t addr)
override;
74 virtual bool pinBlock(uint64_t location)
override;
75 virtual void unpinBlock(uint64_t location)
override;
77 virtual bool sync()
override;
78 virtual bool sync(
size_t offset,
bool async)
override;
79 bool syncPages(
const uint64_t* offsets,
size_t count)
override;
84 virtual XattrStatus listExtendedAttributes(
void*,
size_t,
size_t&)
override;
85 virtual XattrStatus setExtendedAttribute(
const StringView&,
const void*,
size_t,
87 virtual XattrStatus removeExtendedAttribute(
const StringView&)
override;
90 virtual void publishInodeEvent(
const FileEvent&)
override;
91 virtual CacheState& cacheState()
override;
93 virtual void updateAttributes(
const Attributes& attributes, uint32_t mask)
override;
94 virtual bool changeOwnership(
size_t uid,
size_t gid,
bool changeUid,
bool changeGid)
override;
95 virtual bool allowResize(
size_t oldSize,
size_t newSize)
override;
96 virtual bool allowPhysicalPage()
const override;
97 virtual bool prepareWrite(uint64_t location, uint64_t size)
override;
98 bool readPage(uint64_t location, uintptr_t destination)
override;
99 bool readPages(ReadPage* pages,
size_t count)
override;
100 virtual bool resizeFile(
size_t size)
override;
102 virtual bool prepareShrink(
const ShrinkContext& context,
104 virtual Mutex& writeSerializationLock()
override;
105 virtual Mutex& dataMutationLock()
override;
106 virtual size_t& physicalPageLoans()
override;
107 virtual void writeBlocks(uint64_t location, uintptr_t addr,
size_t length)
override;
111 QuotaStatus endQuota(QuotaType type,
bool requireClean);
112 QuotaStatus writeQuotaRecord(uint32_t
id,
const QuotaRecord& record);
113 bool m_OwnsQuotaProtection =
false;
114 bool m_Initialized =
false;
115 static bool sharedFillCallback(CacheConstants::CallbackCause cause, uintptr_t location,
116 uintptr_t page,
void* state);
117 static bool sharedFillBatchCallback(
const Cache::WritebackPage* pages,
size_t count,
void* state);
118 static bool transferBlocksLocked(
Ext2InodeState* state, uint64_t location, uintptr_t address,
119 size_t length,
bool write);
virtual size_t getBlockSize() const override
virtual void writeBlock(uint64_t location, uintptr_t addr) override
bool syncPages(const uint64_t *offsets, size_t count) override
virtual uintptr_t readBlock(uint64_t location) override
virtual void extend(size_t newSize) override
bool readPage(uint64_t location, uintptr_t destination) override
virtual uintptr_t futexIdentity() override
virtual bool useFillCache() const override
virtual void writeBlocks(uint64_t location, uintptr_t addr, size_t length) override
virtual bool allocateFileRange(size_t offset, size_t length) override
virtual void unpinBlock(uint64_t location) override
virtual uint64_t maximumFileSize() const override
virtual bool pinBlock(uint64_t location) override
Ext2File(const Ext2File &file)
virtual void preallocate(size_t expectedSize, bool zero=true) override
bool readPages(ReadPage *pages, size_t count) override
virtual bool sync() override
virtual XattrStatus getExtendedAttribute(const StringView &, void *, size_t, size_t &) override
virtual bool tryBeginMappingRelease() override
void fileAttributeChanged() override
virtual void truncate() override
virtual ~Ext2File() override
virtual bool prepareSharedMapping(size_t offset, size_t length) override
virtual uint64_t write(uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true) final