[PATCH v3 0/2] New zonefs file system
From: Damien Le Moal
Date: Mon Dec 23 2019 - 21:06:22 EST
zonefs is a very simple file system exposing each zone of a zoned block
device as a file. Unlike a regular file system with zoned block device
support (e.g. f2fs or the on-going btrfs effort), zonefs does not hide
the sequential write constraint of zoned block devices to the user.
Files representing sequential write zones of the device must be written
sequentially starting from the end of the file (append only writes).
zonefs is not a POSIX compliant file system. It's goal is to simplify
the implementation of zoned block devices support in applications by
replacing raw block device file accesses with a richer file based API,
avoiding relying on direct block device file ioctls which may
be more obscure to developers. One example of this approach is the
implementation of LSM (log-structured merge) tree structures (such as
used in RocksDB and LevelDB) on zoned block devices by allowing SSTables
to be stored in a zone file similarly to a regular file system rather
than as a range of sectors of a zoned device. The introduction of the
higher level construct "one file is one zone" can help reducing the
amount of changes needed in the application while at the same time
allowing the use of zoned block devices with various programming
languages other than C.
zonefs IO management implementation uses the new iomap generic code.
Changes from v2:
* Address comments and suggestions from Darrick:
- Make the inode of OFFLINE and READONLY zones immutable when
mounting. Also do this during zone information check after an IO
error.
- Change super block CRC seed to ~0.
- Avoid potential compiler warning in zonefs_create_zgroup().
* Fixed endianness related compilation warning detected by kbuild bot.
Changes from v1:
* Fixed comment typo
* Improved documentation as suggested by Hannes
Damien Le Moal (2):
fs: New zonefs file system
zonefs: Add documentation
Documentation/filesystems/zonefs.txt | 215 +++++
MAINTAINERS | 10 +
fs/Kconfig | 1 +
fs/Makefile | 1 +
fs/zonefs/Kconfig | 9 +
fs/zonefs/Makefile | 4 +
fs/zonefs/super.c | 1166 ++++++++++++++++++++++++++
fs/zonefs/zonefs.h | 169 ++++
include/uapi/linux/magic.h | 1 +
9 files changed, 1576 insertions(+)
create mode 100644 Documentation/filesystems/zonefs.txt
create mode 100644 fs/zonefs/Kconfig
create mode 100644 fs/zonefs/Makefile
create mode 100644 fs/zonefs/super.c
create mode 100644 fs/zonefs/zonefs.h
--
2.24.1