Jinke Han
6b22c5a9a3
ext4: place buffer head allocation before handle start
...
commit d1052d236eddf6aa851434db1897b942e8db9921 upstream.
In our product environment, we encounter some jbd hung waiting handles to
stop while several writters were doing memory reclaim for buffer head
allocation in delay alloc write path. Ext4 do buffer head allocation with
holding transaction handle which may be blocked too long if the reclaim
works not so smooth. According to our bcc trace, the reclaim time in
buffer head allocation can reach 258s and the jbd transaction commit also
take almost the same time meanwhile. Except for these extreme cases,
we often see several seconds delays for cgroup memory reclaim on our
servers. This is more likely to happen considering docker environment.
One thing to note, the allocation of buffer heads is as often as page
allocation or more often when blocksize less than page size. Just like
page cache allocation, we should also place the buffer head allocation
before startting the handle.
Cc: stable@kernel.org
Signed-off-by: Jinke Han <hanjinke.666@bytedance.com>
Link: https://lore.kernel.org/r/20220903012429.22555-1-hanjinke.666@bytedance.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-10-26 13:15:38 +02:00
..
9p
9p: missing chunk of "fs/9p: Don't update file type when updating file attributes"
2022-06-25 11:44:57 +02:00
adfs
fs/adfs: super: fix use-after-free bug
2019-08-06 18:29:35 +02:00
affs
affs: fix basic permission bits to actually work
2020-09-12 11:47:39 +02:00
afs
afs: Fix large file support
2020-01-29 10:24:34 +01:00
autofs4
autofs: fix a leak in autofs_expire_indirect()
2019-12-21 10:40:46 +01:00
befs
bfs
bfs: add sanity check at bfs_fill_super()
2018-12-01 09:44:19 +01:00
btrfs
btrfs: check if root is readonly while setting security xattr
2022-09-05 10:23:56 +02:00
cachefiles
cachefiles: Handle readpage error correctly
2020-11-10 10:24:00 +01:00
ceph
ceph: don't truncate file in atomic_open
2022-10-26 13:15:35 +02:00
cifs
cifs: don't send down the destination address to sendmsg for a SOCK_STREAM
2022-09-28 10:55:44 +02:00
coda
coda: add error handling for fget
2019-08-06 18:29:38 +02:00
configfs
configfs: fix a race in configfs_{,un}register_subsystem()
2022-03-02 11:32:03 +01:00
cramfs
Cramfs: fix abad comparison when wrap-arounds occur
2018-11-13 11:17:03 -08:00
crypto
fscrypt: don't ignore minor_hash when hash is 0
2021-07-20 16:21:11 +02:00
debugfs
debugfs: fix use-after-free on symlink traversal
2019-05-08 07:19:10 +02:00
devpts
fs/devpts: always delete dcache dentry-s in dput()
2019-03-23 13:19:47 +01:00
dlm
fs: dlm: handle -EBUSY first in lock arg validation
2022-10-26 13:15:37 +02:00
ecryptfs
Revert "ecryptfs: replace BUG_ON with error handling code"
2021-05-26 11:29:07 +02:00
efivarfs
efivarfs: revert "fix memory leak in efivarfs_create()"
2020-12-02 08:31:28 +01:00
efs
exofs
fs/exofs: fix potential memory leak in mount option parsing
2018-11-27 16:09:38 +01:00
exportfs
exportfs: fix 'passing zero to ERR_PTR()' warning
2020-01-29 10:24:03 +01:00
ext2
ext2: correct max file size computing
2022-04-20 09:06:35 +02:00
ext4
ext4: place buffer head allocation before handle start
2022-10-26 13:15:38 +02:00
f2fs
f2fs: fix a redundant call to f2fs_balance_fs if an error occurs
2021-05-22 10:40:30 +02:00
fat
fat: add ratelimit to fat*_ent_bread()
2022-06-14 16:52:30 +02:00
freevxfs
fscache
fscache: fix race between enablement and dropping of object
2018-12-17 09:38:34 +01:00
fuse
fuse: limit nsec
2022-08-25 11:09:24 +02:00
gfs2
gfs2: assign rgrp glock before compute_bitstructs
2022-04-27 13:14:10 +02:00
hfs
hfs: add lock nesting notation to hfs_find_init
2021-08-04 11:58:02 +02:00
hfsplus
hfsplus: fix crash and filesystem corruption when deleting files
2020-04-24 07:58:59 +02:00
hostfs
hpfs
hugetlbfs
hugetlbfs: hugetlb_fault_mutex_hash() cleanup
2021-06-03 08:23:33 +02:00
isofs
isofs: Fix out of bound access for corrupted isofs image
2021-11-12 13:18:02 +01:00
jbd2
jbd2: abort journal if free a async write error metadata buffer
2020-09-03 11:21:19 +02:00
jffs2
jffs2: fix memory leak in jffs2_do_fill_super
2022-06-14 16:52:38 +02:00
jfs
fs: jfs: fix possible NULL pointer dereference in dbFree()
2022-06-14 16:52:30 +02:00
kernfs
kernfs: Fix range checks in kernfs_get_target_path
2019-11-25 09:52:23 +01:00
lockd
lockd: don't use interval-based rebinding over TCP
2020-12-29 13:44:57 +01:00
logfs
minix
fs/minix: reject too-large maximum file size
2020-08-21 11:02:06 +02:00
ncpfs
ncpfs: fix build warning of strncpy
2019-03-13 14:04:52 -07:00
nfs
NFSv4.1: RECLAIM_COMPLETE must handle EACCES
2022-08-25 11:09:28 +02:00
nfs_common
nfs_common: need lock during iterate through the list
2020-12-29 13:44:59 +01:00
nfsd
NFSD: Fix possible sleep during nfsd4_release_lockowner()
2022-06-06 08:19:46 +02:00
nilfs2
nilfs2: fix use-after-free bug of struct nilfs_root
2022-10-26 13:15:37 +02:00
nls
notify
inotify: show inotify mask flags in proc fdinfo
2022-06-14 16:52:31 +02:00
ntfs
ntfs: fix BUG_ON in ntfs_lookup_inode_by_name()
2022-10-26 13:15:32 +02:00
ocfs2
ocfs2: dlmfs: fix error handling of user_dlm_destroy_lock
2022-06-14 16:52:34 +02:00
omfs
openpromfs
orangefs
fs: orangefs: fix error return code of orangefs_revalidate_lookup()
2021-11-26 11:48:38 +01:00
overlayfs
ovl: fix missing negative dentry check in ovl_rename()
2021-10-17 10:05:38 +02:00
proc
proc: Pass file mode to proc_pid_make_inode
2022-08-25 11:09:21 +02:00
pstore
pstore/ram: Write new dumps to start of recycled zones
2020-01-12 11:24:20 +01:00
qnx4
qnx4: work around gcc false positive warning bug
2021-10-06 10:23:41 +02:00
qnx6
quota
quota: Check next/prev free block number after reading from quota file
2022-10-26 13:15:37 +02:00
ramfs
reiserfs
reiserfs: check directory items on read from disk
2021-08-15 13:01:04 +02:00
romfs
romfs: fix uninitialized memory leak in romfs_dev_read()
2020-08-26 10:29:03 +02:00
squashfs
squashfs: fix divide error in calculate_skip()
2021-05-22 10:40:32 +02:00
sysfs
fs: sysfs_emit: Remove PAGE_SIZE alignment check
2022-03-23 09:00:34 +01:00
sysv
sysv: return 'err' instead of 0 in __sysv_write_inode
2018-12-17 09:38:32 +01:00
tracefs
tracefs: Only clobber mode/uid/gid on remount if asked
2022-09-20 11:50:16 +02:00
ubifs
ubifs: setflags: Make dirtied_ino_d 8 bytes aligned
2022-04-20 09:06:40 +02:00
udf
udf: Fix NULL ptr deref when converting from inline format
2022-02-08 18:15:26 +01:00
ufs
fs/ufs: avoid potential u32 multiplication overflow
2020-08-21 11:02:11 +02:00
xfs
xfs: remove incorrect ASSERT in xfs_rename
2022-07-12 16:26:24 +02:00
aio.c
aio: fix spectre gadget in lookup_ioctx
2018-12-21 14:11:31 +01:00
anon_inodes.c
attr.c
vfs: Check the truncate maximum size in inode_newsize_ok()
2022-08-25 11:09:23 +02:00
bad_inode.c
binfmt_aout.c
binfmt_elf.c
fs/binfmt_elf.c: allocate initialized memory in fill_thread_core_info()
2020-06-03 08:16:42 +02:00
binfmt_elf_fdpic.c
binfmt_em86.c
binfmt_flat.c
fs/binfmt_flat.c: make load_flat_shared_library() work
2019-07-10 09:55:38 +02:00
binfmt_misc.c
binfmt_misc: fix possible deadlock in bm_register_write
2021-03-17 16:10:18 +01:00
binfmt_script.c
exec: load_script: Do not exec truncated interpreter path
2019-11-06 12:18:04 +01:00
block_dev.c
bdev: Reduce time holding bd_mutex in sync in blkdev_close()
2020-10-01 20:40:12 +02:00
buffer.c
fs: Don't invalidate page buffers in block_write_full_page()
2020-11-10 10:23:56 +01:00
char_dev.c
chardev: add helper function to register char devs with a struct device
2020-05-20 08:15:32 +02:00
compat.c
compat_binfmt_elf.c
binfmt_elf: compat: avoid unused function warning
2018-02-25 11:05:55 +01:00
compat_ioctl.c
media: dvb_frontend: Add compat_ioctl callback
2020-06-30 15:38:35 -04:00
coredump.c
coredump: Ensure proper size of sparse core files
2017-07-05 14:40:26 +02:00
dax.c
fs/dax.c: fix inefficiency in dax_writeback_mapping_range()
2018-02-28 10:18:33 +01:00
dcache.c
Hang/soft lockup in d_invalidate with simultaneous calls
2019-03-27 14:13:04 +09:00
dcookies.c
direct-io.c
fs: direct-io: fix missing sdio->boundary
2021-04-16 11:59:07 +02:00
drop_caches.c
fs/drop_caches.c: avoid softlockups in drop_pagecache_sb()
2019-03-13 14:04:58 -07:00
eventfd.c
eventpoll.c
ep_create_wakeup_source(): dentry name can change under you...
2020-10-14 09:48:13 +02:00
exec.c
exec: Force single empty string when argv is empty
2022-06-06 08:19:46 +02:00
fcntl.c
fs/fcntl: f_setown, avoid undefined behaviour
2018-01-31 12:55:52 +01:00
fhandle.c
file.c
fget: clarify and improve __fget_files() implementation
2022-03-02 11:32:07 +01:00
file_table.c
fs: add fget_many() and fput_many()
2021-12-08 08:45:06 +01:00
filesystems.c
fs-writeback.c
fs-writeback: writeback_sb_inodes:Recalculate 'wrote' according skipped pages
2022-06-14 16:52:34 +02:00
fs_pin.c
fs_struct.c
inode.c
fs: fix UAF/GPF bug in nilfs_mdt_destroy
2022-10-26 13:15:34 +02:00
internal.h
xfs: evict all inodes involved with log redo item
2017-09-20 08:20:01 +02:00
ioctl.c
iomap.c
iomap: fix integer truncation issues in the zeroing and dirtying helpers
2017-09-20 08:19:59 +02:00
Kconfig
Kconfig.binfmt
libfs.c
libfs: fix error cast of negative value in simple_attr_write()
2020-11-24 13:03:05 +01:00
locks.c
locks: print unsigned ino in /proc/locks
2020-01-12 11:24:13 +01:00
Makefile
mbcache.c
mbcache: initialize entry->e_referenced in mb_cache_entry_create()
2018-02-22 15:43:48 +01:00
mount.h
mnt: In propgate_umount handle visiting mounts in any order
2017-07-21 07:42:22 +02:00
mpage.c
fs/mpage.c: fix mpage_writepage() for pages with buffers
2017-10-18 09:35:39 +02:00
namei.c
namei: only return -ECHILD from follow_dotdot_rcu()
2020-03-11 07:53:07 +01:00
namespace.c
fs: warn about impending deprecation of mandatory locks
2021-08-26 08:37:29 -04:00
no-block.c
nsfs.c
nsfs: mark dentry with DCACHE_RCUACCESS
2018-02-17 13:21:15 +01:00
open.c
cifs_atomic_open(): fix double-put on late allocation failure
2020-03-20 09:07:44 +01:00
pipe.c
pipe: increase minimum default pipe size to 2 pages
2021-08-15 13:01:03 +02:00
pnode.c
propagate_one(): mnt_set_mountpoint() needs mount_lock
2020-05-02 17:23:20 +02:00
pnode.h
mnt: Tuck mounts under others instead of creating shadow/side mounts.
2017-03-15 10:02:43 +08:00
posix_acl.c
proc_namespace.c
read_write.c
fs: stream_open - opener for stream-like files so that read and write can run simultaneously without deadlock
2019-06-11 12:22:49 +02:00
readdir.c
filldir[64]: remove WARN_ON_ONCE() for bad directory entries
2020-01-04 13:41:06 +01:00
select.c
kernel, fs: Introduce and use set_restart_fn() and arch_set_restart_data()
2021-03-24 10:59:25 +01:00
seq_file.c
seq_file: disallow extremely large seq buffer allocations
2021-07-20 16:21:16 +02:00
signalfd.c
signalfd: use wake_up_pollfree()
2021-12-14 10:04:48 +01:00
splice.c
fs: prevent page refcount overflow in pipe_buf_get
2019-06-11 12:22:45 +02:00
stack.c
stat.c
ufs: restore maintaining ->i_blocks
2017-06-14 15:06:01 +02:00
statfs.c
super.c
vfs: make freeze_super abort when sync_filesystem returns error
2022-02-23 11:56:39 +01:00
sync.c
timerfd.c
timerfd: Protect the might cancel mechanism proper
2017-05-08 07:47:54 +02:00
userfaultfd.c
userfaultfd_release: always remove uffd flags and clear vm_userfaultfd_ctx
2019-09-06 10:19:37 +02:00
utimes.c
xattr.c
xattr: break delegations in {set,remove}xattr
2020-08-21 11:01:55 +02:00