diff options
| author | Chi Zhiling <chizhiling@kylinos.cn> | 2026-10-04 18:19:33 +0800 |
|---|---|---|
| committer | Namjae Jeon <linkinjeon@kernel.org> | 2026-10-21 08:28:30 +0900 |
| commit | 6bb112f5d90a78461648e3bd89093ea299196be5 (patch) | |
| tree | 10b5ee1a425804c8c957e2780b35e35c1e68e2ab /scripts/Makefile.thinlto | |
| parent | 03ac97285b699954fa7bc24f8b6cdc1830c94d28 (diff) | |
| download | linux-6bb112f5d90a78461648e3bd89093ea299196be5.tar.gz linux-6bb112f5d90a78461648e3bd89093ea299196be5.zip | |
exfat: make valid_size and zeroed_size atomic
ei->valid_size and ei->zeroed_size are 64-bit fields read from bio
completion context (exfat_iomap_read_end_io()) and from ->iomap_begin
without i_rwsem, while writers update them under i_rwsem. On 32-bit
these loads can tear, and the "if (x < new) x = new" read-modify-write
can lose an update or regress the value when two writers race.
Convert both to atomic64_t and funnel updates through a cmpxchg-based
monotonic advance helper so the value only moves forward; plain reads use
exfat_get_*(), and the few shrink/init paths (truncate, inode fill,
create) use exfat_set_*(). This is a prerequisite for taking
exfat_page_mkwrite() out from under i_rwsem.
Fixes: 82a81a7352bc ("exfat: add iomap buffered I/O support")
Cc: stable@vger.kernel.org
Signed-off-by: Chi Zhiling <chizhiling@kylinos.cn>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Diffstat (limited to 'scripts/Makefile.thinlto')
0 files changed, 0 insertions, 0 deletions
