This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Hurd".

The branch, master has been updated
       via  4133fc0b38fe2c50ce657dbd8c44e15f270f010b (commit)
       via  23324e2911b30c3c93a992abc582f1be6f64ce7c (commit)
       via  36c6358d65cb9499f23227553a4e166a1af8f372 (commit)
      from  2336993cf542f430a424fbad426844594c80d213 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 4133fc0b38fe2c50ce657dbd8c44e15f270f010b
Author: Milos Nikic <[email protected]>
Date:   Sun Oct 25 20:19:19 2026 -0700

    ext2fs: Grow preallocation windows for sequential writers
    
    Files written at the same time take blocks in turn, so each file's
    fragments were at most the 8-block window long.  Eight files appended
    to in turn got 1949 fragments per 64 MB file, and four parallel dd of
    256 MB got about 6400.
    
    When a file has used up its window and keeps writing sequentially,
    give it a window twice as big, up to 1024 blocks; any other miss starts
    again from the base size.  The window is no longer dropped whenever the
    inode is written, which would undo the growth, but at the last close,
    so that a closed file leaves no reservation behind.
    
    The appended files now get 23 fragments each, and the dd files about
    55 to 70.  Kills of the translator during rm -rf and tar -xf, and
    filling the disk with several writers, left e2fsck -f clean.  With two
    concurrent tar -xf of a Linux tree, half as many files are fragmented
    (0.4% against 0.8%), but about 200 more holes of 4 to 64K stay in the
    free space of a 4 GB disk, 1% of it.  Most are the size of what a small
    file leaves of its 8-block window, likely given back only after the
    next file was placed, as the last close comes in with a no-senders
    notification.
    Message-ID: <[email protected]>

commit 23324e2911b30c3c93a992abc582f1be6f64ce7c
Author: Milos Nikic <[email protected]>
Date:   Sun Oct 25 20:19:18 2026 -0700

    ext2fs: Keep block preallocation in memory
    
    Preallocated blocks were marked allocated in the block bitmap while
    only the node's memory owned them, so a crash between the allocation
    and the discard leaked them.  With a journal, a normal boot replays the
    log without a full check, and nothing frees them until e2fsck -f.
    Killing the translator during tar -xf left such blocks repeatedly.
    
    Reserve the preallocation window in memory instead, in a per-group map
    next to the busy blocks.  ext2_new_block skips other nodes' reserved
    blocks, takes them only when nothing else is free, and sets a block in
    the bitmap only when a file takes it.  The window is dropped under
    alloc_lock, which ext2_alloc_block holds while it uses it, and when the
    node is freed.  The layout does not change: 8 files appended to in turn
    get 1949 fragments per 64 MB file, as before.  Ten kills of the
    translator at random times during rm -rf and tar -xf of a Linux kernel
    tree all left e2fsck -f clean.
    Message-ID: <[email protected]>

commit 36c6358d65cb9499f23227553a4e166a1af8f372
Author: Milos Nikic <[email protected]>
Date:   Mon Oct 26 09:01:44 2026 -0700

    ext2fs: Start a node with no preallocation window
    
    A node can be dropped before its inode is read: a lookup that lost the
    race to make it, or whose read of the inode failed, drops the node it
    made.  Dropping a node gives its preallocation window back, now that
    the window is kept in memory, but the window's fields were only set
    when the inode was read.  Such a node gave back garbage.
    
    Clear the window when the node is made.

-----------------------------------------------------------------------

Summary of changes:
 ext2fs/balloc.c   | 274 ++++++++++++++++++++++++++++++++++++++----------------
 ext2fs/ext2_fs.h  |   3 +
 ext2fs/ext2fs.h   |   6 +-
 ext2fs/getblk.c   |  70 ++++++++------
 ext2fs/ialloc.c   |   1 +
 ext2fs/inode.c    |  23 ++++-
 ext2fs/truncate.c |   4 +-
 7 files changed, 262 insertions(+), 119 deletions(-)


hooks/post-receive
-- 
Hurd

Reply via email to