mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
Merge tag 'ext4_for_linus-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
Pull ext4 updates from Ted Ts'o:
"Many ext4 and jbd2 cleanups and bug fixes:
- Cleanups in the ext4 remount code when going to and from read-only
- Cleanups in ext4's multiblock allocator
- Cleanups in the jbd2 setup/mounting code paths
- Performance improvements when appending to a delayed allocation file
- Miscellaneous syzbot and other bug fixes"
* tag 'ext4_for_linus-6.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: (60 commits)
ext4: fix slab-use-after-free in ext4_es_insert_extent()
libfs: remove redundant checks of s_encoding
ext4: remove redundant checks of s_encoding
ext4: reject casefold inode flag without casefold feature
ext4: use LIST_HEAD() to initialize the list_head in mballoc.c
ext4: do not mark inode dirty every time when appending using delalloc
ext4: rename s_error_work to s_sb_upd_work
ext4: add periodic superblock update check
ext4: drop dio overwrite only flag and associated warning
ext4: add correct group descriptors and reserved GDT blocks to system zone
ext4: remove unused function declaration
ext4: mballoc: avoid garbage value from err
ext4: use sbi instead of EXT4_SB(sb) in ext4_mb_new_blocks_simple()
ext4: change the type of blocksize in ext4_mb_init_cache()
ext4: fix unttached inode after power cut with orphan file feature enabled
jbd2: correct the end of the journal recovery scan range
ext4: ext4_get_{dev}_journal return proper error value
ext4: cleanup ext4_get_dev_journal() and ext4_get_journal()
jbd2: jbd2_journal_init_{dev,inode} return proper error return value
jbd2: drop useless error tag in jbd2_journal_wipe()
...
This commit is contained in:
@@ -131,7 +131,7 @@ static ssize_t ext4_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
|
||||
{
|
||||
struct inode *inode = file_inode(iocb->ki_filp);
|
||||
|
||||
if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
||||
if (unlikely(ext4_forced_shutdown(inode->i_sb)))
|
||||
return -EIO;
|
||||
|
||||
if (!iov_iter_count(to))
|
||||
@@ -153,7 +153,7 @@ static ssize_t ext4_file_splice_read(struct file *in, loff_t *ppos,
|
||||
{
|
||||
struct inode *inode = file_inode(in);
|
||||
|
||||
if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
||||
if (unlikely(ext4_forced_shutdown(inode->i_sb)))
|
||||
return -EIO;
|
||||
return filemap_splice_read(in, ppos, pipe, len, flags);
|
||||
}
|
||||
@@ -476,6 +476,11 @@ restart:
|
||||
* required to change security info in file_modified(), for extending
|
||||
* I/O, any form of non-overwrite I/O, and unaligned I/O to unwritten
|
||||
* extents (as partial block zeroing may be required).
|
||||
*
|
||||
* Note that unaligned writes are allowed under shared lock so long as
|
||||
* they are pure overwrites. Otherwise, concurrent unaligned writes risk
|
||||
* data corruption due to partial block zeroing in the dio layer, and so
|
||||
* the I/O must occur exclusively.
|
||||
*/
|
||||
if (*ilock_shared &&
|
||||
((!IS_NOSEC(inode) || *extend || !overwrite ||
|
||||
@@ -492,21 +497,12 @@ restart:
|
||||
|
||||
/*
|
||||
* Now that locking is settled, determine dio flags and exclusivity
|
||||
* requirements. Unaligned writes are allowed under shared lock so long
|
||||
* as they are pure overwrites. Set the iomap overwrite only flag as an
|
||||
* added precaution in this case. Even though this is unnecessary, we
|
||||
* can detect and warn on unexpected -EAGAIN if an unsafe unaligned
|
||||
* write is ever submitted.
|
||||
*
|
||||
* Otherwise, concurrent unaligned writes risk data corruption due to
|
||||
* partial block zeroing in the dio layer, and so the I/O must occur
|
||||
* exclusively. The inode lock is already held exclusive if the write is
|
||||
* non-overwrite or extending, so drain all outstanding dio and set the
|
||||
* force wait dio flag.
|
||||
* requirements. We don't use DIO_OVERWRITE_ONLY because we enforce
|
||||
* behavior already. The inode lock is already held exclusive if the
|
||||
* write is non-overwrite or extending, so drain all outstanding dio and
|
||||
* set the force wait dio flag.
|
||||
*/
|
||||
if (*ilock_shared && unaligned_io) {
|
||||
*dio_flags = IOMAP_DIO_OVERWRITE_ONLY;
|
||||
} else if (!*ilock_shared && (unaligned_io || *extend)) {
|
||||
if (!*ilock_shared && (unaligned_io || *extend)) {
|
||||
if (iocb->ki_flags & IOCB_NOWAIT) {
|
||||
ret = -EAGAIN;
|
||||
goto out;
|
||||
@@ -608,7 +604,6 @@ static ssize_t ext4_dio_write_iter(struct kiocb *iocb, struct iov_iter *from)
|
||||
iomap_ops = &ext4_iomap_overwrite_ops;
|
||||
ret = iomap_dio_rw(iocb, from, iomap_ops, &ext4_dio_write_ops,
|
||||
dio_flags, NULL, 0);
|
||||
WARN_ON_ONCE(ret == -EAGAIN && !(iocb->ki_flags & IOCB_NOWAIT));
|
||||
if (ret == -ENOTBLK)
|
||||
ret = 0;
|
||||
|
||||
@@ -709,7 +704,7 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
|
||||
{
|
||||
struct inode *inode = file_inode(iocb->ki_filp);
|
||||
|
||||
if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
||||
if (unlikely(ext4_forced_shutdown(inode->i_sb)))
|
||||
return -EIO;
|
||||
|
||||
#ifdef CONFIG_FS_DAX
|
||||
@@ -806,10 +801,9 @@ static const struct vm_operations_struct ext4_file_vm_ops = {
|
||||
static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
{
|
||||
struct inode *inode = file->f_mapping->host;
|
||||
struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
|
||||
struct dax_device *dax_dev = sbi->s_daxdev;
|
||||
struct dax_device *dax_dev = EXT4_SB(inode->i_sb)->s_daxdev;
|
||||
|
||||
if (unlikely(ext4_forced_shutdown(sbi)))
|
||||
if (unlikely(ext4_forced_shutdown(inode->i_sb)))
|
||||
return -EIO;
|
||||
|
||||
/*
|
||||
@@ -885,7 +879,7 @@ static int ext4_file_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
|
||||
if (unlikely(ext4_forced_shutdown(inode->i_sb)))
|
||||
return -EIO;
|
||||
|
||||
ret = ext4_sample_last_mounted(inode->i_sb, filp->f_path.mnt);
|
||||
|
||||
Reference in New Issue
Block a user