[Concept,00/17] ext4l: Begin an implementation of ext4 based on Linux

Message ID 20251216204828.4007984-1-sjg@u-boot.org
Headers
Series ext4l: Begin an implementation of ext4 based on Linux |

Message

Simon Glass Dec. 16, 2025, 8:48 p.m. UTC
  From: Simon Glass <simon.glass@canonical.com>

U-Boot has long had a solid implementation of ext4. Support for writing
and basic journaling was added as well.

However, there are some missing features. For example, some distros
enable metadata checksums which are not supported. There also also other
features such as fast commit and special feature for small files which
are not currently available.

Linux has the canonical implementation of ext4, so one approach would be
to plumb that code into U-Boot. It is not a small undertaking, since the
existing linux/compat.h has only a small fraction of the required
features.

As a start towards this effort, bring in the entire Linux code,
unmodified.

Note: There are 1000s of checkpatch checks and warnings, plus over 100
errors. These have been left along to reduce the source delta.


Simon Glass (17):
  ext4l: bring in extents.c
  ext4l: bring in inode.c
  ext4l: bring in mballoc.c
  ext4l: bring in namei.c
  ext4l: bring in super.c
  ext4l: bring in ext4.h
  ext4l: bring in files a-d
  ext4l: bring in extents_status, fsync, and hash
  ext4l: bring in ext4_jbd2 and fast_commit
  ext4l: bring in file, fsmap, and ialloc
  ext4l: bring in indirect and inline
  ext4l: bring in inode-test, ioctl, and mballoc headers
  ext4l: bring in migrate, mmp, move_extent, orphan, and page-io
  ext4l: bring in resize, symlink, sysfs, truncate, verity, and readpage
  ext4l: bring in xattr files
  ext4l: bring in Kconfig and Makefile
  ext4l: bring in jbd2 header file

 fs/ext4l/Kconfig          |   92 +
 fs/ext4l/Makefile         |   20 +
 fs/ext4l/acl.c            |  304 ++
 fs/ext4l/acl.h            |   74 +
 fs/ext4l/balloc.c         | 1003 +++++
 fs/ext4l/bitmap.c         |   99 +
 fs/ext4l/block_validity.c |  370 ++
 fs/ext4l/crypto.c         |  241 ++
 fs/ext4l/dir.c            |  693 ++++
 fs/ext4l/ext4.h           | 3932 +++++++++++++++++++
 fs/ext4l/ext4_extents.h   |  268 ++
 fs/ext4l/ext4_jbd2.c      |  408 ++
 fs/ext4l/ext4_jbd2.h      |  461 +++
 fs/ext4l/extents.c        | 6189 ++++++++++++++++++++++++++++++
 fs/ext4l/extents_status.c | 2306 ++++++++++++
 fs/ext4l/extents_status.h |  254 ++
 fs/ext4l/fast_commit.c    | 2343 ++++++++++++
 fs/ext4l/fast_commit.h    |  186 +
 fs/ext4l/file.c           |  995 +++++
 fs/ext4l/fsmap.c          |  792 ++++
 fs/ext4l/fsmap.h          |   56 +
 fs/ext4l/fsync.c          |  177 +
 fs/ext4l/hash.c           |  323 ++
 fs/ext4l/ialloc.c         | 1621 ++++++++
 fs/ext4l/indirect.c       | 1474 ++++++++
 fs/ext4l/inline.c         | 1982 ++++++++++
 fs/ext4l/inode-test.c     |  283 ++
 fs/ext4l/inode.c          | 6756 +++++++++++++++++++++++++++++++++
 fs/ext4l/ioctl.c          | 2020 ++++++++++
 fs/ext4l/mballoc-test.c   |  999 +++++
 fs/ext4l/mballoc.c        | 7175 +++++++++++++++++++++++++++++++++++
 fs/ext4l/mballoc.h        |  273 ++
 fs/ext4l/migrate.c        |  672 ++++
 fs/ext4l/mmp.c            |  408 ++
 fs/ext4l/move_extent.c    |  706 ++++
 fs/ext4l/namei.c          | 4241 +++++++++++++++++++++
 fs/ext4l/orphan.c         |  659 ++++
 fs/ext4l/page-io.c        |  593 +++
 fs/ext4l/readpage.c       |  422 +++
 fs/ext4l/resize.c         | 2193 +++++++++++
 fs/ext4l/super.c          | 7516 +++++++++++++++++++++++++++++++++++++
 fs/ext4l/symlink.c        |  136 +
 fs/ext4l/sysfs.c          |  648 ++++
 fs/ext4l/truncate.h       |   52 +
 fs/ext4l/verity.c         |  399 ++
 fs/ext4l/xattr.c          | 3225 ++++++++++++++++
 fs/ext4l/xattr.h          |  236 ++
 fs/ext4l/xattr_hurd.c     |   52 +
 fs/ext4l/xattr_security.c |   66 +
 fs/ext4l/xattr_trusted.c  |   47 +
 fs/ext4l/xattr_user.c     |   50 +
 include/linux/jbd2.h      | 1815 +++++++++
 52 files changed, 68305 insertions(+)
 create mode 100644 fs/ext4l/Kconfig
 create mode 100644 fs/ext4l/Makefile
 create mode 100644 fs/ext4l/acl.c
 create mode 100644 fs/ext4l/acl.h
 create mode 100644 fs/ext4l/balloc.c
 create mode 100644 fs/ext4l/bitmap.c
 create mode 100644 fs/ext4l/block_validity.c
 create mode 100644 fs/ext4l/crypto.c
 create mode 100644 fs/ext4l/dir.c
 create mode 100644 fs/ext4l/ext4.h
 create mode 100644 fs/ext4l/ext4_extents.h
 create mode 100644 fs/ext4l/ext4_jbd2.c
 create mode 100644 fs/ext4l/ext4_jbd2.h
 create mode 100644 fs/ext4l/extents.c
 create mode 100644 fs/ext4l/extents_status.c
 create mode 100644 fs/ext4l/extents_status.h
 create mode 100644 fs/ext4l/fast_commit.c
 create mode 100644 fs/ext4l/fast_commit.h
 create mode 100644 fs/ext4l/file.c
 create mode 100644 fs/ext4l/fsmap.c
 create mode 100644 fs/ext4l/fsmap.h
 create mode 100644 fs/ext4l/fsync.c
 create mode 100644 fs/ext4l/hash.c
 create mode 100644 fs/ext4l/ialloc.c
 create mode 100644 fs/ext4l/indirect.c
 create mode 100644 fs/ext4l/inline.c
 create mode 100644 fs/ext4l/inode-test.c
 create mode 100644 fs/ext4l/inode.c
 create mode 100644 fs/ext4l/ioctl.c
 create mode 100644 fs/ext4l/mballoc-test.c
 create mode 100644 fs/ext4l/mballoc.c
 create mode 100644 fs/ext4l/mballoc.h
 create mode 100644 fs/ext4l/migrate.c
 create mode 100644 fs/ext4l/mmp.c
 create mode 100644 fs/ext4l/move_extent.c
 create mode 100644 fs/ext4l/namei.c
 create mode 100644 fs/ext4l/orphan.c
 create mode 100644 fs/ext4l/page-io.c
 create mode 100644 fs/ext4l/readpage.c
 create mode 100644 fs/ext4l/resize.c
 create mode 100644 fs/ext4l/super.c
 create mode 100644 fs/ext4l/symlink.c
 create mode 100644 fs/ext4l/sysfs.c
 create mode 100644 fs/ext4l/truncate.h
 create mode 100644 fs/ext4l/verity.c
 create mode 100644 fs/ext4l/xattr.c
 create mode 100644 fs/ext4l/xattr.h
 create mode 100644 fs/ext4l/xattr_hurd.c
 create mode 100644 fs/ext4l/xattr_security.c
 create mode 100644 fs/ext4l/xattr_trusted.c
 create mode 100644 fs/ext4l/xattr_user.c
 create mode 100644 include/linux/jbd2.h