linux/fs/exfat
Dongliang Cui f761fcdd28 exfat: Implement sops->shutdown and ioctl
We found that when writing a large file through buffer write, if the
disk is inaccessible, exFAT does not return an error normally, which
leads to the writing process not stopping properly.

To easily reproduce this issue, you can follow the steps below:

1. format a device to exFAT and then mount (with a full disk erase)
2. dd if=/dev/zero of=/exfat_mount/test.img bs=1M count=8192
3. eject the device

You may find that the dd process does not stop immediately and may
continue for a long time.

The root cause of this issue is that during buffer write process,
exFAT does not need to access the disk to look up directory entries
or the FAT table (whereas FAT would do) every time data is written.
Instead, exFAT simply marks the buffer as dirty and returns,
delegating the writeback operation to the writeback process.

If the disk cannot be accessed at this time, the error will only be
returned to the writeback process, and the original process will not
receive the error, so it cannot be returned to the user side.

When the disk cannot be accessed normally, an error should be returned
to stop the writing process.

Implement sops->shutdown and ioctl to shut down the file system
when underlying block device is marked dead.

Signed-off-by: Dongliang Cui <dongliang.cui@unisoc.com>
Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
2024-09-18 07:40:56 +09:00
..
balloc.c exfat: using ffs instead of internal logic 2024-01-08 21:57:21 +09:00
cache.c mm, slab: remove last vestiges of SLAB_MEM_SPREAD 2024-03-12 20:32:19 -07:00
dir.c exfat: fix potential deadlock on __exfat_get_dentry_set 2024-07-15 21:44:28 +09:00
exfat_fs.h exfat: Implement sops->shutdown and ioctl 2024-09-18 07:40:56 +09:00
exfat_raw.h exfat: add ioctls for accessing attributes 2023-10-31 10:00:51 +09:00
fatent.c exfat: fix the newly allocated clusters are not freed in error handling 2023-02-28 20:01:40 +09:00
file.c exfat: Implement sops->shutdown and ioctl 2024-09-18 07:40:56 +09:00
inode.c exfat: Implement sops->shutdown and ioctl 2024-09-18 07:40:56 +09:00
Kconfig fs: add CONFIG_BUFFER_HEAD 2023-08-02 09:13:09 -06:00
Makefile exfat: add Kconfig and Makefile 2020-03-05 21:00:40 -05:00
misc.c exfat: convert to new timestamp accessors 2023-10-18 13:26:21 +02:00
namei.c exfat: Implement sops->shutdown and ioctl 2024-09-18 07:40:56 +09:00
nls.c exfat: move freeing sbi, upcase table and dropping nls into rcu-delayed helper 2024-02-25 02:10:31 -05:00
super.c exfat: Implement sops->shutdown and ioctl 2024-09-18 07:40:56 +09:00