This series improves memory usage by switching to using dynamically allocated inodes and dentries, similarly to regular file systems. This drastically reduces the memory consumption of zonefs when the file system is mounted. E.g., for a 26 TB SMR HDD with over 95000 zones, memory usage is decreased from about 130 MB down to a little over 5 MB. Since zonefs does not have persistent metadata of its own and relies completely on the device zone state management, information such as the zone write pointer position (used to determine an inode size) is kept in memory at all time, even when an inode is evicted from the inode cache. Dentries can be trivially searched for and created dynamically as needed due to the static file tree structure of a zonefs volume (fully determined by a zoned device zone configuration). The patch series is organized as follows. Patch 1 fixes a problem with synchronous write error detection and error recovery. Patch 2 reorganizes the code (splitting out file operation code into a new file) and patch 3 simplifies the IO error recovery code. Patch 4 and 5 cleanup inode zone information and split that information out of the zonefs inode structure. Finally, Patch 6 implements dynamic inode and dentry allocation and maanagement operations. Ptch 7 introduces a small optimization to reduce file open latency. Damien Le Moal (7): zonefs: Detect append writes at invalid locations zonefs: Reorganize code zonefs: Simplify IO error handling zonefs: Reduce struct zonefs_inode_info size zonefs: Separate zone information from inode information zonefs: Dynamically create file inodes when needed zonefs: Cache zone group directory inodes fs/zonefs/Makefile | 2 +- fs/zonefs/file.c | 878 ++++++++++++++++++++ fs/zonefs/super.c | 1923 ++++++++++++++++---------------------------- fs/zonefs/trace.h | 20 +- fs/zonefs/zonefs.h | 110 ++- 5 files changed, 1684 insertions(+), 1249 deletions(-) create mode 100644 fs/zonefs/file.c -- 2.39.0