[PATCH v2 0/9] ecryptfs: remove the remaining struct page usage

From: Tal Zussman

Date: Fri Oct 30 2026 - 06:27:39 EST


Convert the page cache side of the encryption path to folios, and use
plain kernel memory for the buffers that were only pages because of the
old interfaces: the ciphertext block, the header buffer from
ecryptfs_get_zeroed_pages(), and the scatterlists built by
virt_to_scatterlist(). Also make a shrinking truncate zero the tail of
the last folio in place, as other filesystems do, instead of copying
from the zero page through the write path. After this, fs/ecryptfs has
no struct page usage left.

Two related fixes are included: the packet parsers now reject a
zero-length encrypted session key, which used to leave a file set up
with an all-zero key, and ecryptfs_write() keeps the folio locked until
it has been written to the lower file.

Ran cleanly with fsx and fsstress on ecryptfs over ext4 in the default,
xattr, and passthrough mount options.

---
Changes in v2:
- Patch 1 (new): Reject zero-length encrypted session keys in the
tag 1 and tag 3 packet parsers, per Sashiko.
- Patch 2 (new): Keep the folio locked in ecryptfs_write() until it
has been written to the lower file, per Sashiko.
- Patch 7: Hold the folio lock while encrypting the zeroed tail and
mark the folio not uptodate if that fails, per Sashiko.
- Link to v1: https://patch.msgid.link/20261014-ecryptfs-folio-v1-0-f4412187b1d3@xxxxxxxxxxxx

---
Tal Zussman (9):
ecryptfs: reject zero-length encrypted session keys
ecryptfs: keep the folio locked while ecryptfs_write() writes it out
ecryptfs: remove struct ecryptfs_page_crypt_context
ecryptfs: use a folio and a buffer in crypt_extent()
ecryptfs: use kzalloc() for the header buffer
ecryptfs: use sg_init_one() instead of virt_to_scatterlist()
ecryptfs: zero the tail of the last folio in place on truncate
ecryptfs: rename functions to refer to folios
ecryptfs: refer to folios in comments and printk strings

fs/ecryptfs/crypto.c | 145 ++++++++++++------------------------------
fs/ecryptfs/ecryptfs_kernel.h | 21 ++----
fs/ecryptfs/inode.c | 51 +++++++++++----
fs/ecryptfs/keystore.c | 118 ++++++++--------------------------
fs/ecryptfs/mmap.c | 60 +++++++++--------
fs/ecryptfs/read_write.c | 52 +++++++--------
6 files changed, 164 insertions(+), 283 deletions(-)
---
base-commit: 8f6626bd6594a78f454d02b27b74a580c890cab9
change-id: 20261014-ecryptfs-folio-67e80ccec7f3

Best regards,
--
Tal Zussman <tz2294@xxxxxxxxxxxx>