Zhihao Cheng
e86d1b2bb7
ubifs: Reserve one leb for each journal head while doing budget
...
[ Upstream commit e874dcde1cbf82c786c0e7f2899811c02630cc52 ]
UBIFS calculates available space by c->main_bytes - c->lst.total_used
(which means non-index lebs' free and dirty space is accounted into
total available), then index lebs and four lebs (one for gc_lnum, one
for deletions, two for journal heads) are deducted.
In following situation, ubifs may get -ENOSPC from make_reservation():
LEB 84: DATAHD free 122880 used 1920 dirty 2176 dark 6144
LEB 110:DELETION free 126976 used 0 dirty 0 dark 6144 (empty)
LEB 201:gc_lnum free 126976 used 0 dirty 0 dark 6144
LEB 272:GCHD free 77824 used 47672 dirty 1480 dark 6144
LEB 356:BASEHD free 0 used 39776 dirty 87200 dark 6144
OTHERS: index lebs, zero-available non-index lebs
UBIFS calculates the available bytes is 6888 (How to calculate it:
126976 * 5[remain main bytes] - 1920[used] - 47672[used] - 39776[used] -
126976 * 1[deletions] - 126976 * 1[gc_lnum] - 126976 * 2[journal heads]
- 6144 * 5[dark] = 6888) after doing budget, however UBIFS cannot use
BASEHD's dirty space(87200), because UBIFS cannot find next BASEHD to
reclaim current BASEHD. (c->bi.min_idx_lebs equals to c->lst.idx_lebs,
the empty leb won't be found by ubifs_find_free_space(), and dirty index
lebs won't be picked as gced lebs. All non-index lebs has dirty space
less then c->dead_wm, non-index lebs won't be picked as gced lebs
either. So new free lebs won't be produced.). See more details in Link.
To fix it, reserve one leb for each journal head while doing budget.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216562
Fixes: 1e51764a3c ("UBIFS: add new flash file system")
Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-03-11 16:44:09 +01:00
..
9p
9p: missing chunk of "fs/9p: Don't update file type when updating file attributes"
2022-06-22 14:11:02 +02:00
adfs
affs
affs: initialize fsdata in affs_truncate()
2023-02-06 07:52:36 +01:00
afs
afs: Fix fileserver probe RTT handling
2022-12-08 11:23:03 +01:00
autofs
befs
bfs
btrfs
btrfs: send: limit number of clones and allocated memory size
2023-03-03 11:41:48 +01:00
cachefiles
ceph
ceph: flush cap releases when the session is flushed
2023-02-22 12:50:33 +01:00
cifs
cifs: Fix warning and UAF when destroy the MR list
2023-03-11 16:43:49 +01:00
coda
coda: Avoid partial allocation of sig_inputArgs
2023-03-11 16:43:56 +01:00
configfs
configfs: fix possible memory leak in configfs_create_dir()
2023-01-18 11:41:09 +01:00
cramfs
crypto
debugfs
debugfs: fix error when writing negative value to atomic_t debugfs file
2023-01-18 11:40:56 +01:00
devpts
dlm
fs: dlm: handle -EBUSY first in lock arg validation
2022-10-26 13:22:14 +02:00
ecryptfs
efivarfs
efs
erofs
erofs: avoid consecutive detection for Highmem memory
2022-08-25 11:17:36 +02:00
exportfs
ext2
ext2: Add more validity checks for inode counts
2022-08-25 11:17:28 +02:00
ext4
ext4: refuse to create ea block when umounted
2023-03-11 16:44:03 +01:00
f2fs
fs: f2fs: initialize fsdata in pagecache_write()
2023-03-11 16:44:08 +01:00
fat
fat: add ratelimit to fat*_ent_bread()
2022-06-14 18:11:30 +02:00
freevxfs
fscache
fuse
fuse: lock inode unconditionally in fuse_fallocate()
2022-12-08 11:23:01 +01:00
gfs2
gfs2: jdata writepage fix
2023-03-11 16:43:49 +01:00
hfs
hfs: fix missing hfs_bnode_get() in __hfs_bnode_create
2023-03-11 16:43:59 +01:00
hfsplus
fs: hfsplus: fix UAF issue in hfsplus_put_super
2023-03-11 16:43:59 +01:00
hostfs
hpfs
hugetlbfs
hugetlbfs: fix null-ptr-deref in hugetlbfs_parse_param()
2023-01-18 11:41:38 +01:00
iomap
iomap: iomap_write_failed fix
2022-06-14 18:11:36 +02:00
isofs
jbd2
jbd2: wake up journal waiters in FIFO order, not LIFO
2022-10-26 13:22:17 +02:00
jffs2
jffs2: fix memory leak in jffs2_do_fill_super
2022-06-14 18:11:55 +02:00
jfs
fs/jfs: fix shift exponent db_agl2size negative
2023-03-11 16:44:07 +01:00
kernfs
kernfs: fix use-after-free in __kernfs_remove
2022-11-03 23:56:54 +09:00
lockd
minix
minix: fix bug when opening a file with O_DIRECT
2022-04-15 14:18:35 +02:00
nfs
pNFS/filelayout: Fix coalescing test for single DS
2023-01-24 07:17:58 +01:00
nfs_common
nfsd
nfsd: zero out pointers after putting nfsd_files on COPY setup error
2023-03-11 16:43:58 +01:00
nilfs2
nilfs2: fix underflow in second superblock position calculations
2023-02-22 12:50:41 +01:00
nls
notify
fsnotify: fix wrong lockdep annotations
2022-06-14 18:11:34 +02:00
ntfs
ntfs: check overflow when iterating ATTR_RECORDs
2022-11-25 17:42:22 +01:00
ocfs2
ocfs2: fix non-auto defrag path not working issue
2023-03-11 16:44:00 +01:00
omfs
openpromfs
orangefs
orangefs: Fix kmemleak in orangefs_{kernel,client}_debug_init()
2023-01-18 11:41:39 +01:00
overlayfs
ovl: Use ovl mounter's fsuid and fsgid in ovl_link()
2023-01-18 11:41:43 +01:00
proc
mm: hugetlb: proc: check for hugetlb shared PMD in /proc/PID/smaps
2023-02-22 12:50:28 +01:00
pstore
pstore: Make sure CONFIG_PSTORE_PMSG selects CONFIG_RT_MUTEXES
2023-01-18 11:41:40 +01:00
qnx4
qnx6
quota
ext4: fix bug_on in __es_tree_search caused by bad quota inode
2023-01-18 11:42:02 +01:00
ramfs
reiserfs
fs: reiserfs: remove useless new_opts in reiserfs_remount
2023-02-06 07:52:43 +01:00
romfs
squashfs
revert "squashfs: harden sanity check in squashfs_read_xattr_id_table"
2023-02-22 12:50:39 +01:00
sysfs
sysv
fs: sysv: Fix sysv_nblocks() returns wrong value
2023-01-18 11:40:58 +01:00
tracefs
tracefs: Only clobber mode/uid/gid on remount if asked
2022-09-20 12:28:00 +02:00
ubifs
ubifs: Reserve one leb for each journal head while doing budget
2023-03-11 16:44:09 +01:00
udf
udf: Fix file corruption when appending just after end of preallocated extent
2023-03-11 16:44:01 +01:00
ufs
unicode
verity
xfs
xfs: sync lazy sb accounting on quiesce of read-only mounts
2023-02-22 12:50:38 +01:00
aio.c
aio: fix mremap after fork null-deref
2023-02-22 12:50:35 +01:00
anon_inodes.c
attr.c
vfs: Check the truncate maximum size in inode_newsize_ok()
2022-08-25 11:17:21 +02:00
bad_inode.c
binfmt_aout.c
binfmt: Move install_exec_creds after setup_new_exec to match binfmt_elf
2023-01-18 11:41:46 +01:00
binfmt_elf.c
binfmt_elf_fdpic.c
binfmt: Fix error return code in load_elf_fdpic_binary()
2023-01-18 11:41:46 +01:00
binfmt_em86.c
binfmt_flat.c
binfmt: Move install_exec_creds after setup_new_exec to match binfmt_elf
2023-01-18 11:41:46 +01:00
binfmt_misc.c
binfmt_misc: fix shift-out-of-bounds in check_special_flags
2023-01-18 11:41:33 +01:00
binfmt_script.c
block_dev.c
buffer.c
mm: fs: initialize fsdata passed to write_begin/write_end interface
2022-11-25 17:42:22 +01:00
char_dev.c
chardev: fix error handling in cdev_device_add()
2023-01-18 11:41:25 +01:00
compat.c
compat_binfmt_elf.c
compat_ioctl.c
compat_ioctl: remove /dev/random commands
2022-06-22 14:11:03 +02:00
coredump.c
d_path.c
dax.c
dax: fix cache flush on PMD-mapped pages
2022-06-14 18:11:41 +02:00
dcache.c
dcookies.c
direct-io.c
drop_caches.c
eventfd.c
eventpoll.c
epoll: check for events when removing a timed out thread from the wait queue
2022-12-08 11:23:05 +01:00
exec.c
exec: Force single empty string when argv is empty
2022-06-06 08:33:50 +02:00
fcntl.c
fhandle.c
file.c
file_table.c
SUNRPC: Ensure we flush any closed sockets before xs_xprt_free()
2022-05-25 09:14:34 +02:00
filesystems.c
fs-writeback.c
fs-writeback: writeback_sb_inodes:Recalculate 'wrote' according skipped pages
2022-06-14 18:11:44 +02:00
fs_context.c
fs_parser.c
fs_pin.c
fs_struct.c
fs_types.c
fsopen.c
inode.c
fs: fix UAF/GPF bug in nilfs_mdt_destroy
2022-10-15 07:54:36 +02:00
internal.h
io_uring.c
io_uring/af_unix: defer registered files gc to io_uring release
2022-10-26 13:22:59 +02:00
ioctl.c
Kconfig
Kconfig.binfmt
libfs.c
libfs: add DEFINE_SIMPLE_ATTRIBUTE_SIGNED for signed value
2023-01-18 11:40:55 +01:00
locks.c
Makefile
mbcache.c
mbcache: Avoid nesting of cache->c_list_lock under bit locks
2023-01-18 11:41:59 +01:00
mount.h
mpage.c
namei.c
mm: fs: initialize fsdata passed to write_begin/write_end interface
2022-11-25 17:42:22 +01:00
namespace.c
no-block.c
nsfs.c
open.c
pipe.c
pnode.c
pnode: terminate at peers of source
2023-01-18 11:41:44 +01:00
pnode.h
posix_acl.c
proc_namespace.c
read_write.c
readdir.c
select.c
seq_file.c
signalfd.c
io_uring: disable polling pollfree files
2022-09-05 10:27:47 +02:00
splice.c
Revert "fs: check FMODE_LSEEK to control internal pipe splicing"
2022-10-17 17:24:32 +02:00
stack.c
stat.c
stat: fix inconsistency between struct stat and struct compat_stat
2022-04-27 13:50:48 +02:00
statfs.c
super.c
sync.c
timerfd.c
userfaultfd.c
userfaultfd: open userfaultfds with O_RDONLY
2022-10-26 13:22:21 +02:00
utimes.c
xattr.c
fs: don't audit the capability check in simple_xattr_list()
2023-01-18 11:40:53 +01:00