Hello, Here is the seventh version of my series to speed up orphan inode handling in ext4. I've forgot to add a check that orphan file is not exposed in directory hierarchy. The only change in this version is addition of that fix. Orphan inode handling in ext4 is a bottleneck for workloads which heavily excercise truncate / unlink of small files as they contend on global s_orphan_mutex (when you have fast enough storage). This patch set implements new way of handling orphan inodes - instead of using a linked list, we store inode numbers of orphaned inodes in a file which is possible to implement in a more scalable manner than linked list manipulations. See description of patch 3/5 for more details. The patch set achieves significant gains both for a micro benchmark stressing orphan inode handling (truncating file byte-by-byte, several threads in parallel) and for reaim creat_clo workload. I'm happy for any review, thoughts, ideas about the patches. I have also implemented full support in e2fsprogs which I'll send separately. Honza [1] https://lore.kernel.org/lkml/20210227120804.GB22871@xsang-OptiPlex-9020/ Changes since v6: * Rebased on top of v5.14-rc6 + patches fixing exposure of hidden inodes in directory hierarchy * Added check orphan file cannot be linked from directory hierarchy * Get orphan file inode with EXT4_IGET_SPECIAL flag Changes since v5: * Added Reviewed-by tags from Ted * Fixed up sparse warning spotted by 0-day * Fixed error handling path in ext4_orphan_add() to not leak orphan entry Changes since v4: * Rebased on top of v5.14-rc5 * Updated commit message of patch 1/5 * Added Reviewed-by tags from Ted Changes since v3: * Added documentation about on-disk format changes * Add physical block number into orphan block checksum * Improve some sanity checks, handling of corrupted orphan file * Improved some changelogs Changes since v2: * Updated some comments * Rebased onto 5.13-rc5 * Change orphan file inode from a fixed inode number to inode number stored in the superblock Changes since v1: * orphan blocks have now magic numbers * split out orphan handling to a separate source file * some smaller updates according to review Previous versions: Link: http://lore.kernel.org/r/20210816091810.16994-1-jack@xxxxxxx # v6 Link: http://lore.kernel.org/r/20210811101006.2033-1-jack@xxxxxxx # v5 Link: https://lore.kernel.org/linux-ext4/20210712154009.9290-1-jack@xxxxxxx/ #v4 Link: https://lore.kernel.org/linux-ext4/20210616105655.5129-1-jack@xxxxxxx/ #v3 Link: https://lore.kernel.org/linux-ext4/1432293717-24010-1-git-send-email-jack@xxxxxxx/ #v2