Merge android13-5.10 into android13-5.10-lts This merges the android13-5.10 branch into the -lts branch, catching it up with the latest changes in there. It contains the following commits: * 96481b34da0a Merge tag 'android13-5.10.246_r00' into android13-5.10 * 9536d991bb59 UPSTREAM: crypto: essiv - Check ssize for decryption and in-place encryption * 2cceddb2f318 UPSTREAM: net: qede: Initialize qede_ll_ops with designated initializer * 407fcd15d423 BACKPORT: f2fs: fix to truncate preallocated blocks in f2fs_file_open() Change-Id: Ideb33f7aa4bc20201daf50ece1982749694d2090 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c index 681ec14..16c3f32 100644 --- a/drivers/net/ethernet/qlogic/qede/qede_main.c +++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -199,7 +199,7 @@ static struct pci_driver qede_pci_driver = { }; static struct qed_eth_cb_ops qede_ll_ops = { - { + .common = { #ifdef CONFIG_RFS_ACCEL .arfs_filter_op = qede_arfs_filter_op, #endif
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 8acff09..e02e84a 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h
@@ -765,6 +765,7 @@ enum { FI_ENABLE_COMPRESS, /* enable compression in "user" compression mode */ FI_COMPRESS_RELEASED, /* compressed blocks were released */ FI_ALIGNED_WRITE, /* enable aligned write */ + FI_OPENED_FILE, /* indicate file has been opened */ FI_MAX, /* max flag, never be used */ };
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index fd04bc1..74757b5 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c
@@ -557,6 +557,42 @@ static int f2fs_file_mmap(struct file *file, struct vm_area_struct *vma) return 0; } +static int finish_preallocate_blocks(struct inode *inode) +{ + int ret; + + inode_lock(inode); + if (is_inode_flag_set(inode, FI_OPENED_FILE)) { + inode_unlock(inode); + return 0; + } + + if (!file_should_truncate(inode)) { + set_inode_flag(inode, FI_OPENED_FILE); + inode_unlock(inode); + return 0; + } + + f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); + f2fs_down_write(&F2FS_I(inode)->i_mmap_sem); + + truncate_setsize(inode, i_size_read(inode)); + ret = f2fs_truncate(inode); + + f2fs_up_write(&F2FS_I(inode)->i_mmap_sem); + f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); + + if (!ret) + set_inode_flag(inode, FI_OPENED_FILE); + + inode_unlock(inode); + if (ret) + return ret; + + file_dont_truncate(inode); + return 0; +} + static int f2fs_file_open(struct inode *inode, struct file *filp) { int err = fscrypt_file_open(inode, filp); @@ -573,7 +609,11 @@ static int f2fs_file_open(struct inode *inode, struct file *filp) filp->f_mode |= FMODE_NOWAIT; - return dquot_file_open(inode, filp); + err = dquot_file_open(inode, filp); + if (err) + return err; + + return finish_preallocate_blocks(inode); } void f2fs_truncate_data_blocks_range(struct dnode_of_data *dn, int count)
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index 6749469..8a118eb8 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c
@@ -565,14 +565,6 @@ struct inode *f2fs_iget(struct super_block *sb, unsigned long ino) } f2fs_set_inode_flags(inode); - if (file_should_truncate(inode) && - !is_sbi_flag_set(sbi, SBI_POR_DOING)) { - ret = f2fs_truncate(inode); - if (ret) - goto bad_inode; - file_dont_truncate(inode); - } - unlock_new_inode(inode); trace_f2fs_iget(inode); return inode;