linux/fs/ext4
Baokun Li ba84162730 ext4: do not convert the unwritten extents if data writeback fails
[ Upstream commit e856f93e0f ]

When dioread_nolock is turned on (the default), it will convert unwritten
extents to written at ext4_end_io_end(), even if the data writeback fails.

It leads to the possibility that stale data may be exposed when the
physical block corresponding to the file data is read-only (i.e., writes
return -EIO, but reads are normal).

Therefore a new ext4_io_end->flags EXT4_IO_END_FAILED is added, which
indicates that some bio write-back failed in the current ext4_io_end.
When this flag is set, the unwritten to written conversion is no longer
performed. Users can read the data normally until the caches are dropped,
after that, the failed extents can only be read to all 0.

Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
Link: https://patch.msgid.link/20250122110533.4116662-3-libaokun@huaweicloud.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2025-06-04 14:41:59 +02:00
..
.kunitconfig ext4: add .kunitconfig fragment to enable ext4-specific tests 2021-02-11 23:16:30 -05:00
acl.c ext4: convert to ctime accessor functions 2023-07-24 10:29:54 +02:00
acl.h ext4: apply umask if ACL support is disabled 2023-11-28 17:20:15 +00:00
balloc.c ext4: reorder capability check last 2025-06-04 14:41:57 +02:00
bitmap.c ext4: remove useless conditional branch code 2023-04-19 23:39:08 -04:00
block_validity.c ext4: make block validity check resistent to sb bh corruption 2025-05-02 07:51:00 +02:00
crypto.c ext4: fix memory leaks in ext4_fname_{setup_filename,prepare_lookup} 2023-08-05 08:17:56 -04:00
dir.c ext4: fix OOB read when checking dotdot dir 2025-04-10 14:37:43 +02:00
ext4.h ext4: do not convert the unwritten extents if data writeback fails 2025-06-04 14:41:59 +02:00
ext4_extents.h ext4: fix sparse warnings 2021-08-30 23:36:50 -04:00
ext4_jbd2.c Many ext4 and jbd2 cleanups and bug fixes for v6.6-rc1. 2023-08-31 15:18:15 -07:00
ext4_jbd2.h ext4: split ext4_journal_start trace for debug 2022-12-01 10:46:54 -05:00
extents.c ext4: partial zero eof block on unaligned inode size extension 2025-01-09 13:31:40 +01:00
extents_status.c ext4: fix infinite loop when replaying fast_commit 2024-08-03 08:53:53 +02:00
extents_status.h ext4: make ext4_es_insert_extent() return void 2023-06-26 19:35:12 -04:00
fast_commit.c ext4: use handle to mark fc as ineligible in __track_dentry_update() 2024-10-10 11:57:49 +02:00
fast_commit.h ext4: add missing validation of fast-commit record lengths 2022-12-08 21:49:24 -05:00
file.c ext4: dax: fix overflowing extents beyond inode size when partially writing 2024-10-10 11:57:47 +02:00
fsmap.c ext4: fix FS_IOC_GETFSMAP handling 2024-12-09 10:32:42 +01:00
fsmap.h ext4: fsmap: fix the block/inode bitmap comment 2021-06-24 09:48:29 -04:00
fsync.c ext4: drop EXT4_MF_FS_ABORTED flag 2023-07-29 18:37:53 -04:00
hash.c ext4: remove redundant checks of s_encoding 2023-08-27 11:27:13 -04:00
ialloc.c ext4: convert to new timestamp accessors 2025-01-09 13:31:40 +01:00
indirect.c ext4: fix race in buffer_head read fault injection 2024-12-09 10:31:46 +01:00
inline.c ext4: convert to new timestamp accessors 2025-01-09 13:31:40 +01:00
inode-test.c ext4: convert to ctime accessor functions 2023-07-24 10:29:54 +02:00
inode.c ext4: goto right label 'out_mmap_sem' in ext4_setattr() 2025-05-02 07:51:03 +02:00
ioctl.c ext4: convert to new timestamp accessors 2025-01-09 13:31:40 +01:00
Kconfig fs: add CONFIG_BUFFER_HEAD 2023-08-02 09:13:09 -06:00
Makefile ext4: move ext4 crypto code to its own file crypto.c 2022-05-21 22:24:24 -04:00
mballoc.c ext4: fix FS_IOC_GETFSMAP handling 2024-12-09 10:32:42 +01:00
mballoc.h ext4: fix FS_IOC_GETFSMAP handling 2024-12-09 10:32:42 +01:00
migrate.c ext4: fix i_data_sem unlock order in ext4_ind_migrate() 2024-10-10 11:57:39 +02:00
mmp.c ext4: fix race in buffer_head read fault injection 2024-12-09 10:31:46 +01:00
move_extent.c ext4: fix race in buffer_head read fault injection 2024-12-09 10:31:46 +01:00
namei.c ext4: fix off-by-one error in do_split 2025-04-25 10:45:27 +02:00
orphan.c ext4: remove trailing newline from ext4_msg() message 2022-12-08 21:49:23 -05:00
page-io.c ext4: do not convert the unwritten extents if data writeback fails 2025-06-04 14:41:59 +02:00
readpage.c ext4: remove calls to to set/clear the folio error flag 2024-12-09 10:31:45 +01:00
resize.c ext4: fix race in buffer_head read fault injection 2024-12-09 10:31:46 +01:00
super.c ext4: reject the 'data_err=abort' option in nojournal mode 2025-06-04 14:41:59 +02:00
symlink.c fs: port ->getattr() to pass mnt_idmap 2023-01-19 09:24:25 +01:00
sysfs.c ext4: avoid ptr null pointer dereference 2024-07-18 13:21:25 +02:00
truncate.h ext4: Convert to use mapping->invalidate_lock 2021-07-13 14:29:00 +02:00
verity.c - Nick Piggin's "shoot lazy tlbs" series, to improve the peformance of 2023-04-27 19:42:02 -07:00
xattr.c ext4: ignore xattrs past end 2025-04-25 10:45:16 +02:00
xattr.h ext4: remove EA inode entry from mbcache on inode eviction 2022-08-02 23:56:25 -04:00
xattr_hurd.c fs: port xattr to mnt_idmap 2023-01-19 09:24:28 +01:00
xattr_security.c fs: port xattr to mnt_idmap 2023-01-19 09:24:28 +01:00
xattr_trusted.c fs: port xattr to mnt_idmap 2023-01-19 09:24:28 +01:00
xattr_user.c fs: port xattr to mnt_idmap 2023-01-19 09:24:28 +01:00