• Linus Torvalds's avatar
    Revert "ext4: make __ext4_get_inode_loc plug" · 72dbcf72
    Linus Torvalds authored
    This reverts commit b03755ad.
    
    This is sad, and done for all the wrong reasons.  Because that commit is
    good, and does exactly what it says: avoids a lot of small disk requests
    for the inode table read-ahead.
    
    However, it turns out that it causes an entirely unrelated problem: the
    getrandom() system call was introduced back in 2014 by commit
    c6e9d6f3 ("random: introduce getrandom(2) system call"), and people
    use it as a convenient source of good random numbers.
    
    But part of the current semantics for getrandom() is that it waits for
    the entropy pool to fill at least partially (unlike /dev/urandom).  And
    at least ArchLinux apparently has a systemd that uses getrandom() at
    boot time, and the improvements in IO patterns means that existing
    installations suddenly start hanging, waiting for entropy that will
    never happen.
    
    It seems to be an unlucky combination of not _quite_ enough entropy,
    together with a particular systemd version and configuration.  Lennart
    says that the systemd-random-seed process (which is what does this early
    access) is supposed to not block any other boot activity, but sadly that
    doesn't actually seem to be the case (possibly due bogus dependencies on
    cryptsetup for encrypted swapspace).
    
    The correct fix is to fix getrandom() to not block when it's not
    appropriate, but that fix is going to take a lot more discussion.  Do we
    just make it act like /dev/urandom by default, and add a new flag for
    "wait for entropy"? Do we add a boot-time option? Or do we just limit
    the amount of time it will wait for entropy?
    
    So in the meantime, we do the revert to give us time to discuss the
    eventual fix for the fundamental problem, at which point we can re-apply
    the ext4 inode table access optimization.
    Reported-by: default avatarAhmed S. Darwish <darwish.07@gmail.com>
    Cc: Ted Ts'o <tytso@mit.edu>
    Cc: Willy Tarreau <w@1wt.eu>
    Cc: Alexander E. Patrakov <patrakov@gmail.com>
    Cc: Lennart Poettering <mzxreary@0pointer.de>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    72dbcf72
Name
Last commit
Last update
..
9p Loading commit data...
adfs Loading commit data...
affs Loading commit data...
afs Loading commit data...
autofs Loading commit data...
befs Loading commit data...
bfs Loading commit data...
btrfs Loading commit data...
cachefiles Loading commit data...
ceph Loading commit data...
cifs Loading commit data...
coda Loading commit data...
configfs Loading commit data...
cramfs Loading commit data...
crypto Loading commit data...
debugfs Loading commit data...
devpts Loading commit data...
dlm Loading commit data...
ecryptfs Loading commit data...
efivarfs Loading commit data...
efs Loading commit data...
exportfs Loading commit data...
ext2 Loading commit data...
ext4 Loading commit data...
f2fs Loading commit data...
fat Loading commit data...
freevxfs Loading commit data...
fscache Loading commit data...
fuse Loading commit data...
gfs2 Loading commit data...
hfs Loading commit data...
hfsplus Loading commit data...
hostfs Loading commit data...
hpfs Loading commit data...
hugetlbfs Loading commit data...
iomap Loading commit data...
isofs Loading commit data...
jbd2 Loading commit data...
jffs2 Loading commit data...
jfs Loading commit data...
kernfs Loading commit data...
lockd Loading commit data...
minix Loading commit data...
nfs Loading commit data...
nfs_common Loading commit data...
nfsd Loading commit data...
nilfs2 Loading commit data...
nls Loading commit data...
notify Loading commit data...
ntfs Loading commit data...
ocfs2 Loading commit data...
omfs Loading commit data...
openpromfs Loading commit data...
orangefs Loading commit data...
overlayfs Loading commit data...
proc Loading commit data...
pstore Loading commit data...
qnx4 Loading commit data...
qnx6 Loading commit data...
quota Loading commit data...
ramfs Loading commit data...
reiserfs Loading commit data...
romfs Loading commit data...
squashfs Loading commit data...
sysfs Loading commit data...
sysv Loading commit data...
tracefs Loading commit data...
ubifs Loading commit data...
udf Loading commit data...
ufs Loading commit data...
unicode Loading commit data...
xfs Loading commit data...
Kconfig Loading commit data...
Kconfig.binfmt Loading commit data...
Makefile Loading commit data...
aio.c Loading commit data...
anon_inodes.c Loading commit data...
attr.c Loading commit data...
bad_inode.c Loading commit data...
binfmt_aout.c Loading commit data...
binfmt_elf.c Loading commit data...
binfmt_elf_fdpic.c Loading commit data...
binfmt_em86.c Loading commit data...
binfmt_flat.c Loading commit data...
binfmt_misc.c Loading commit data...
binfmt_script.c Loading commit data...
block_dev.c Loading commit data...
buffer.c Loading commit data...
char_dev.c Loading commit data...
compat.c Loading commit data...
compat_binfmt_elf.c Loading commit data...
compat_ioctl.c Loading commit data...
coredump.c Loading commit data...
d_path.c Loading commit data...
dax.c Loading commit data...
dcache.c Loading commit data...
dcookies.c Loading commit data...
direct-io.c Loading commit data...
drop_caches.c Loading commit data...
eventfd.c Loading commit data...
eventpoll.c Loading commit data...
exec.c Loading commit data...
fcntl.c Loading commit data...
fhandle.c Loading commit data...
file.c Loading commit data...
file_table.c Loading commit data...
filesystems.c Loading commit data...
fs-writeback.c Loading commit data...
fs_context.c Loading commit data...
fs_parser.c Loading commit data...
fs_pin.c Loading commit data...
fs_struct.c Loading commit data...
fs_types.c Loading commit data...
fsopen.c Loading commit data...
inode.c Loading commit data...
internal.h Loading commit data...
io_uring.c Loading commit data...
ioctl.c Loading commit data...
libfs.c Loading commit data...
locks.c Loading commit data...
mbcache.c Loading commit data...
mount.h Loading commit data...
mpage.c Loading commit data...
namei.c Loading commit data...
namespace.c Loading commit data...
no-block.c Loading commit data...
nsfs.c Loading commit data...
open.c Loading commit data...
pipe.c Loading commit data...
pnode.c Loading commit data...
pnode.h Loading commit data...
posix_acl.c Loading commit data...
proc_namespace.c Loading commit data...
read_write.c Loading commit data...
readdir.c Loading commit data...
select.c Loading commit data...
seq_file.c Loading commit data...
signalfd.c Loading commit data...
splice.c Loading commit data...
stack.c Loading commit data...
stat.c Loading commit data...
statfs.c Loading commit data...
super.c Loading commit data...
sync.c Loading commit data...
timerfd.c Loading commit data...
userfaultfd.c Loading commit data...
utimes.c Loading commit data...
xattr.c Loading commit data...