commit: 8fb5ae6155bd43013b71d416870009d40c9128bc Author: Mike Pagano <mpagano <AT> gentoo <DOT> org> AuthorDate: Tue Jan 19 20:33:10 2021 +0000 Commit: Mike Pagano <mpagano <AT> gentoo <DOT> org> CommitDate: Tue Jan 19 20:33:10 2021 +0000 URL: https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=8fb5ae61
Linux poatch 4.19.169 Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org> 0000_README | 4 + 1168_linux-4.19.169.patch | 900 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 904 insertions(+) diff --git a/0000_README b/0000_README index 48fd7f2..0373220 100644 --- a/0000_README +++ b/0000_README @@ -711,6 +711,10 @@ Patch: 1167_linux-4.19.168.patch From: https://www.kernel.org Desc: Linux 4.19.168 +Patch: 1168_linux-4.19.169.patch +From: https://www.kernel.org +Desc: Linux 4.19.169 + Patch: 1500_XATTR_USER_PREFIX.patch From: https://bugs.gentoo.org/show_bug.cgi?id=470644 Desc: Support for namespace user.pax.* on tmpfs. diff --git a/1168_linux-4.19.169.patch b/1168_linux-4.19.169.patch new file mode 100644 index 0000000..880daff --- /dev/null +++ b/1168_linux-4.19.169.patch @@ -0,0 +1,900 @@ +diff --git a/Makefile b/Makefile +index 3e44a813604eb..a994b12d2011a 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,7 +1,7 @@ + # SPDX-License-Identifier: GPL-2.0 + VERSION = 4 + PATCHLEVEL = 19 +-SUBLEVEL = 168 ++SUBLEVEL = 169 + EXTRAVERSION = + NAME = "People's Front" + +@@ -438,7 +438,7 @@ KBUILD_AFLAGS := -D__ASSEMBLY__ + KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ + -fno-strict-aliasing -fno-common -fshort-wchar \ + -Werror-implicit-function-declaration \ +- -Wno-format-security \ ++ -Werror=return-type -Wno-format-security \ + -std=gnu89 + KBUILD_CPPFLAGS := -D__KERNEL__ + KBUILD_AFLAGS_KERNEL := +diff --git a/arch/arc/Makefile b/arch/arc/Makefile +index 16e6cc22e25cc..99c55f015ce86 100644 +--- a/arch/arc/Makefile ++++ b/arch/arc/Makefile +@@ -91,14 +91,9 @@ libs-y += arch/arc/lib/ $(LIBGCC) + + boot := arch/arc/boot + +-#default target for make without any arguments. +-KBUILD_IMAGE := $(boot)/bootpImage +- +-all: bootpImage +-bootpImage: vmlinux +- +-boot_targets += uImage uImage.bin uImage.gz ++boot_targets := uImage uImage.bin uImage.gz uImage.lzma + ++PHONY += $(boot_targets) + $(boot_targets): vmlinux + $(Q)$(MAKE) $(build)=$(boot) $(boot)/$@ + +diff --git a/arch/arc/include/asm/page.h b/arch/arc/include/asm/page.h +index 09ddddf71cc50..a70fef79c4055 100644 +--- a/arch/arc/include/asm/page.h ++++ b/arch/arc/include/asm/page.h +@@ -13,6 +13,7 @@ + #ifndef __ASSEMBLY__ + + #define clear_page(paddr) memset((paddr), 0, PAGE_SIZE) ++#define copy_user_page(to, from, vaddr, pg) copy_page(to, from) + #define copy_page(to, from) memcpy((to), (from), PAGE_SIZE) + + struct vm_area_struct; +diff --git a/arch/arm/boot/dts/picoxcell-pc3x2.dtsi b/arch/arm/boot/dts/picoxcell-pc3x2.dtsi +index a1266cf8776ce..8362c6a3bcd30 100644 +--- a/arch/arm/boot/dts/picoxcell-pc3x2.dtsi ++++ b/arch/arm/boot/dts/picoxcell-pc3x2.dtsi +@@ -54,18 +54,21 @@ + emac: gem@30000 { + compatible = "cadence,gem"; + reg = <0x30000 0x10000>; ++ interrupt-parent = <&vic0>; + interrupts = <31>; + }; + + dmac1: dmac@40000 { + compatible = "snps,dw-dmac"; + reg = <0x40000 0x10000>; ++ interrupt-parent = <&vic0>; + interrupts = <25>; + }; + + dmac2: dmac@50000 { + compatible = "snps,dw-dmac"; + reg = <0x50000 0x10000>; ++ interrupt-parent = <&vic0>; + interrupts = <26>; + }; + +@@ -243,6 +246,7 @@ + axi2pico@c0000000 { + compatible = "picochip,axi2pico-pc3x2"; + reg = <0xc0000000 0x10000>; ++ interrupt-parent = <&vic0>; + interrupts = <13 14 15 16 17 18 19 20 21>; + }; + }; +diff --git a/arch/mips/boot/compressed/decompress.c b/arch/mips/boot/compressed/decompress.c +index 81df9047e1109..40218be0b7ce8 100644 +--- a/arch/mips/boot/compressed/decompress.c ++++ b/arch/mips/boot/compressed/decompress.c +@@ -17,6 +17,7 @@ + #include <linux/libfdt.h> + + #include <asm/addrspace.h> ++#include <asm/unaligned.h> + + /* + * These two variables specify the free mem region +@@ -117,7 +118,7 @@ void decompress_kernel(unsigned long boot_heap_start) + dtb_size = fdt_totalsize((void *)&__appended_dtb); + + /* last four bytes is always image size in little endian */ +- image_size = le32_to_cpup((void *)&__image_end - 4); ++ image_size = get_unaligned_le32((void *)&__image_end - 4); + + /* copy dtb to where the booted kernel will expect it */ + memcpy((void *)VMLINUX_LOAD_ADDRESS_ULL + image_size, +diff --git a/arch/mips/kernel/relocate.c b/arch/mips/kernel/relocate.c +index cbf4cc0b0b6cf..934caf2040780 100644 +--- a/arch/mips/kernel/relocate.c ++++ b/arch/mips/kernel/relocate.c +@@ -187,8 +187,14 @@ static int __init relocate_exception_table(long offset) + static inline __init unsigned long rotate_xor(unsigned long hash, + const void *area, size_t size) + { +- size_t i; +- unsigned long *ptr = (unsigned long *)area; ++ const typeof(hash) *ptr = PTR_ALIGN(area, sizeof(hash)); ++ size_t diff, i; ++ ++ diff = (void *)ptr - area; ++ if (unlikely(size < diff + sizeof(hash))) ++ return hash; ++ ++ size = ALIGN_DOWN(size - diff, sizeof(hash)); + + for (i = 0; i < size / sizeof(hash); i++) { + /* Rotate by odd number of bits and XOR. */ +diff --git a/arch/x86/hyperv/mmu.c b/arch/x86/hyperv/mmu.c +index 2f34d52753526..e666f7eaf32de 100644 +--- a/arch/x86/hyperv/mmu.c ++++ b/arch/x86/hyperv/mmu.c +@@ -66,11 +66,17 @@ static void hyperv_flush_tlb_others(const struct cpumask *cpus, + if (!hv_hypercall_pg) + goto do_native; + +- if (cpumask_empty(cpus)) +- return; +- + local_irq_save(flags); + ++ /* ++ * Only check the mask _after_ interrupt has been disabled to avoid the ++ * mask changing under our feet. ++ */ ++ if (cpumask_empty(cpus)) { ++ local_irq_restore(flags); ++ return; ++ } ++ + flush_pcpu = (struct hv_tlb_flush **) + this_cpu_ptr(hyperv_pcpu_input_arg); + +diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c +index 5198ed1b36690..b7ad8ac6bb41e 100644 +--- a/block/bfq-iosched.c ++++ b/block/bfq-iosched.c +@@ -5280,13 +5280,13 @@ static unsigned int bfq_update_depths(struct bfq_data *bfqd, + * limit 'something'. + */ + /* no more than 50% of tags for async I/O */ +- bfqd->word_depths[0][0] = max((1U << bt->sb.shift) >> 1, 1U); ++ bfqd->word_depths[0][0] = max(bt->sb.depth >> 1, 1U); + /* + * no more than 75% of tags for sync writes (25% extra tags + * w.r.t. async I/O, to prevent async I/O from starving sync + * writes) + */ +- bfqd->word_depths[0][1] = max(((1U << bt->sb.shift) * 3) >> 2, 1U); ++ bfqd->word_depths[0][1] = max((bt->sb.depth * 3) >> 2, 1U); + + /* + * In-word depths in case some bfq_queue is being weight- +@@ -5296,9 +5296,9 @@ static unsigned int bfq_update_depths(struct bfq_data *bfqd, + * shortage. + */ + /* no more than ~18% of tags for async I/O */ +- bfqd->word_depths[1][0] = max(((1U << bt->sb.shift) * 3) >> 4, 1U); ++ bfqd->word_depths[1][0] = max((bt->sb.depth * 3) >> 4, 1U); + /* no more than ~37% of tags for sync writes (~20% extra tags) */ +- bfqd->word_depths[1][1] = max(((1U << bt->sb.shift) * 6) >> 4, 1U); ++ bfqd->word_depths[1][1] = max((bt->sb.depth * 6) >> 4, 1U); + + for (i = 0; i < 2; i++) + for (j = 0; j < 2; j++) +diff --git a/drivers/acpi/internal.h b/drivers/acpi/internal.h +index f59d0b9e26833..6def196cc23cf 100644 +--- a/drivers/acpi/internal.h ++++ b/drivers/acpi/internal.h +@@ -98,7 +98,7 @@ void acpi_scan_table_handler(u32 event, void *table, void *context); + extern struct list_head acpi_bus_id_list; + + struct acpi_device_bus_id { +- char bus_id[15]; ++ const char *bus_id; + unsigned int instance_no; + struct list_head node; + }; +diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c +index 1cfa3ac1d91f7..de9dc041d703e 100644 +--- a/drivers/acpi/scan.c ++++ b/drivers/acpi/scan.c +@@ -486,6 +486,7 @@ static void acpi_device_del(struct acpi_device *device) + acpi_device_bus_id->instance_no--; + else { + list_del(&acpi_device_bus_id->node); ++ kfree_const(acpi_device_bus_id->bus_id); + kfree(acpi_device_bus_id); + } + break; +@@ -674,7 +675,14 @@ int acpi_device_add(struct acpi_device *device, + } + if (!found) { + acpi_device_bus_id = new_bus_id; +- strcpy(acpi_device_bus_id->bus_id, acpi_device_hid(device)); ++ acpi_device_bus_id->bus_id = ++ kstrdup_const(acpi_device_hid(device), GFP_KERNEL); ++ if (!acpi_device_bus_id->bus_id) { ++ pr_err(PREFIX "Memory allocation error for bus id\n"); ++ result = -ENOMEM; ++ goto err_free_new_bus_id; ++ } ++ + acpi_device_bus_id->instance_no = 0; + list_add_tail(&acpi_device_bus_id->node, &acpi_bus_id_list); + } +@@ -709,6 +717,11 @@ int acpi_device_add(struct acpi_device *device, + if (device->parent) + list_del(&device->node); + list_del(&device->wakeup_list); ++ ++ err_free_new_bus_id: ++ if (!found) ++ kfree(new_bus_id); ++ + mutex_unlock(&acpi_device_lock); + + err_detach: +diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c +index 3ba3ae9749bec..81de5e1659551 100644 +--- a/drivers/gpu/drm/msm/msm_drv.c ++++ b/drivers/gpu/drm/msm/msm_drv.c +@@ -483,14 +483,14 @@ static int msm_drm_init(struct device *dev, struct drm_driver *drv) + + drm_mode_config_init(ddev); + +- /* Bind all our sub-components: */ +- ret = component_bind_all(dev, ddev); ++ ret = msm_init_vram(ddev); + if (ret) + goto err_destroy_mdss; + +- ret = msm_init_vram(ddev); ++ /* Bind all our sub-components: */ ++ ret = component_bind_all(dev, ddev); + if (ret) +- goto err_msm_uninit; ++ goto err_destroy_mdss; + + if (!dev->dma_parms) { + dev->dma_parms = devm_kzalloc(dev, sizeof(*dev->dma_parms), +diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c +index f41f3ff689c55..1695605eeb528 100644 +--- a/drivers/infiniband/hw/mlx5/main.c ++++ b/drivers/infiniband/hw/mlx5/main.c +@@ -6094,7 +6094,7 @@ int mlx5_ib_stage_bfrag_init(struct mlx5_ib_dev *dev) + + err = mlx5_alloc_bfreg(dev->mdev, &dev->fp_bfreg, false, true); + if (err) +- mlx5_free_bfreg(dev->mdev, &dev->fp_bfreg); ++ mlx5_free_bfreg(dev->mdev, &dev->bfreg); + + return err; + } +diff --git a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c +index e611f133aa97b..e6c11b5a1669b 100644 +--- a/drivers/infiniband/hw/usnic/usnic_ib_verbs.c ++++ b/drivers/infiniband/hw/usnic/usnic_ib_verbs.c +@@ -212,6 +212,7 @@ find_free_vf_and_create_qp_grp(struct usnic_ib_dev *us_ibdev, + + } + usnic_uiom_free_dev_list(dev_list); ++ dev_list = NULL; + } + + /* Try to find resources on an unused vf */ +@@ -236,6 +237,8 @@ find_free_vf_and_create_qp_grp(struct usnic_ib_dev *us_ibdev, + qp_grp_check: + if (IS_ERR_OR_NULL(qp_grp)) { + usnic_err("Failed to allocate qp_grp\n"); ++ if (usnic_ib_share_vf) ++ usnic_uiom_free_dev_list(dev_list); + return ERR_PTR(qp_grp ? PTR_ERR(qp_grp) : -ENOMEM); + } + return qp_grp; +diff --git a/drivers/isdn/mISDN/Kconfig b/drivers/isdn/mISDN/Kconfig +index c0730d5c734d6..fb61181a5c4f7 100644 +--- a/drivers/isdn/mISDN/Kconfig ++++ b/drivers/isdn/mISDN/Kconfig +@@ -12,6 +12,7 @@ if MISDN != n + config MISDN_DSP + tristate "Digital Audio Processing of transparent data" + depends on MISDN ++ select BITREVERSE + help + Enable support for digital audio processing capability. + +diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c +index e8eeee680750d..875c78b5e2242 100644 +--- a/drivers/md/dm-integrity.c ++++ b/drivers/md/dm-integrity.c +@@ -3078,7 +3078,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) + unsigned extra_args; + struct dm_arg_set as; + static const struct dm_arg _args[] = { +- {0, 9, "Invalid number of feature args"}, ++ {0, 15, "Invalid number of feature args"}, + }; + unsigned journal_sectors, interleave_sectors, buffer_sectors, journal_watermark, sync_msec; + bool recalculate; +diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c +index d3f28a9e3fd95..9e930a150aa29 100644 +--- a/drivers/md/dm-snap.c ++++ b/drivers/md/dm-snap.c +@@ -137,6 +137,11 @@ struct dm_snapshot { + * for them to be committed. + */ + struct bio_list bios_queued_during_merge; ++ ++ /* ++ * Flush data after merge. ++ */ ++ struct bio flush_bio; + }; + + /* +@@ -1061,6 +1066,17 @@ shut: + + static void error_bios(struct bio *bio); + ++static int flush_data(struct dm_snapshot *s) ++{ ++ struct bio *flush_bio = &s->flush_bio; ++ ++ bio_reset(flush_bio); ++ bio_set_dev(flush_bio, s->origin->bdev); ++ flush_bio->bi_opf = REQ_OP_WRITE | REQ_PREFLUSH; ++ ++ return submit_bio_wait(flush_bio); ++} ++ + static void merge_callback(int read_err, unsigned long write_err, void *context) + { + struct dm_snapshot *s = context; +@@ -1074,6 +1090,11 @@ static void merge_callback(int read_err, unsigned long write_err, void *context) + goto shut; + } + ++ if (flush_data(s) < 0) { ++ DMERR("Flush after merge failed: shutting down merge"); ++ goto shut; ++ } ++ + if (s->store->type->commit_merge(s->store, + s->num_merging_chunks) < 0) { + DMERR("Write error in exception store: shutting down merge"); +@@ -1198,6 +1219,7 @@ static int snapshot_ctr(struct dm_target *ti, unsigned int argc, char **argv) + s->first_merging_chunk = 0; + s->num_merging_chunks = 0; + bio_list_init(&s->bios_queued_during_merge); ++ bio_init(&s->flush_bio, NULL, 0); + + /* Allocate hash table for COW data */ + if (init_hash_tables(s)) { +@@ -1391,6 +1413,8 @@ static void snapshot_dtr(struct dm_target *ti) + + mutex_destroy(&s->lock); + ++ bio_uninit(&s->flush_bio); ++ + dm_put_device(ti, s->cow); + + dm_put_device(ti, s->origin); +diff --git a/drivers/md/dm.c b/drivers/md/dm.c +index 6c755eb0263fb..13237b85cfec5 100644 +--- a/drivers/md/dm.c ++++ b/drivers/md/dm.c +@@ -515,7 +515,7 @@ static int dm_blk_ioctl(struct block_device *bdev, fmode_t mode, + * subset of the parent bdev; require extra privileges. + */ + if (!capable(CAP_SYS_RAWIO)) { +- DMWARN_LIMIT( ++ DMDEBUG_LIMIT( + "%s: sending ioctl %x to DM device without required privilege.", + current->comm, cmd); + r = -ENOIOCTLCMD; +diff --git a/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c b/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c +index c8e5d889bd81f..21de56345503f 100644 +--- a/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c ++++ b/drivers/net/ethernet/freescale/fs_enet/mii-bitbang.c +@@ -223,3 +223,4 @@ static struct platform_driver fs_enet_bb_mdio_driver = { + }; + + module_platform_driver(fs_enet_bb_mdio_driver); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/net/ethernet/freescale/fs_enet/mii-fec.c b/drivers/net/ethernet/freescale/fs_enet/mii-fec.c +index 1582d82483eca..4e6a9c5d8af55 100644 +--- a/drivers/net/ethernet/freescale/fs_enet/mii-fec.c ++++ b/drivers/net/ethernet/freescale/fs_enet/mii-fec.c +@@ -224,3 +224,4 @@ static struct platform_driver fs_enet_fec_mdio_driver = { + }; + + module_platform_driver(fs_enet_fec_mdio_driver); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/net/ethernet/freescale/ucc_geth.h b/drivers/net/ethernet/freescale/ucc_geth.h +index 5da19b440a6a8..bf25e49d4fe34 100644 +--- a/drivers/net/ethernet/freescale/ucc_geth.h ++++ b/drivers/net/ethernet/freescale/ucc_geth.h +@@ -580,7 +580,14 @@ struct ucc_geth_tx_global_pram { + u32 vtagtable[0x8]; /* 8 4-byte VLAN tags */ + u32 tqptr; /* a base pointer to the Tx Queues Memory + Region */ +- u8 res2[0x80 - 0x74]; ++ u8 res2[0x78 - 0x74]; ++ u64 snums_en; ++ u32 l2l3baseptr; /* top byte consists of a few other bit fields */ ++ ++ u16 mtu[8]; ++ u8 res3[0xa8 - 0x94]; ++ u32 wrrtablebase; /* top byte is reserved */ ++ u8 res4[0xc0 - 0xac]; + } __packed; + + /* structure representing Extended Filtering Global Parameters in PRAM */ +diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c +index 1de97b69ce4e2..529c8fac15314 100644 +--- a/drivers/net/usb/cdc_ether.c ++++ b/drivers/net/usb/cdc_ether.c +@@ -800,6 +800,13 @@ static const struct usb_device_id products[] = { + .driver_info = 0, + }, + ++/* Lenovo Powered USB-C Travel Hub (4X90S92381, based on Realtek RTL8153) */ ++{ ++ USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0x721e, USB_CLASS_COMM, ++ USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), ++ .driver_info = 0, ++}, ++ + /* ThinkPad USB-C Dock Gen 2 (based on Realtek RTL8153) */ + { + USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0xa387, USB_CLASS_COMM, +diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c +index 1b1ec41978300..7dc6055855354 100644 +--- a/drivers/net/usb/r8152.c ++++ b/drivers/net/usb/r8152.c +@@ -5352,6 +5352,7 @@ static const struct usb_device_id rtl8152_table[] = { + {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7205)}, + {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x720c)}, + {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x7214)}, ++ {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x721e)}, + {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0xa387)}, + {REALTEK_USB_DEVICE(VENDOR_ID_LINKSYS, 0x0041)}, + {REALTEK_USB_DEVICE(VENDOR_ID_NVIDIA, 0x09ff)}, +diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c +index 9936e4b991aa3..7bda5586e4332 100644 +--- a/fs/btrfs/qgroup.c ++++ b/fs/btrfs/qgroup.c +@@ -2774,6 +2774,12 @@ out: + return ret; + } + ++static bool rescan_should_stop(struct btrfs_fs_info *fs_info) ++{ ++ return btrfs_fs_closing(fs_info) || ++ test_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state); ++} ++ + static void btrfs_qgroup_rescan_worker(struct btrfs_work *work) + { + struct btrfs_fs_info *fs_info = container_of(work, struct btrfs_fs_info, +@@ -2782,6 +2788,7 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work) + struct btrfs_trans_handle *trans = NULL; + int err = -ENOMEM; + int ret = 0; ++ bool stopped = false; + + path = btrfs_alloc_path(); + if (!path) +@@ -2794,7 +2801,7 @@ static void btrfs_qgroup_rescan_worker(struct btrfs_work *work) + path->skip_locking = 1; + + err = 0; +- while (!err && !btrfs_fs_closing(fs_info)) { ++ while (!err && !(stopped = rescan_should_stop(fs_info))) { + trans = btrfs_start_transaction(fs_info->fs_root, 0); + if (IS_ERR(trans)) { + err = PTR_ERR(trans); +@@ -2837,7 +2844,7 @@ out: + } + + mutex_lock(&fs_info->qgroup_rescan_lock); +- if (!btrfs_fs_closing(fs_info)) ++ if (!stopped) + fs_info->qgroup_flags &= ~BTRFS_QGROUP_STATUS_FLAG_RESCAN; + if (trans) { + ret = update_qgroup_status_item(trans); +@@ -2856,7 +2863,7 @@ out: + + btrfs_end_transaction(trans); + +- if (btrfs_fs_closing(fs_info)) { ++ if (stopped) { + btrfs_info(fs_info, "qgroup scan paused"); + } else if (err >= 0) { + btrfs_info(fs_info, "qgroup scan completed%s", +diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c +index 40f5b4dcb9276..521f6c2091ad1 100644 +--- a/fs/btrfs/super.c ++++ b/fs/btrfs/super.c +@@ -1845,6 +1845,14 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data) + btrfs_scrub_cancel(fs_info); + btrfs_pause_balance(fs_info); + ++ /* ++ * Pause the qgroup rescan worker if it is running. We don't want ++ * it to be still running after we are in RO mode, as after that, ++ * by the time we unmount, it might have left a transaction open, ++ * so we would leak the transaction and/or crash. ++ */ ++ btrfs_qgroup_wait_for_completion(fs_info, false); ++ + ret = btrfs_commit_super(fs_info); + if (ret) + goto restore; +diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c +index 783c54bb2ce75..21c9ebfe83478 100644 +--- a/fs/ext4/ioctl.c ++++ b/fs/ext4/ioctl.c +@@ -1092,7 +1092,10 @@ resizefs_out: + err = ext4_journal_get_write_access(handle, sbi->s_sbh); + if (err) + goto pwsalt_err_journal; ++ lock_buffer(sbi->s_sbh); + generate_random_uuid(sbi->s_es->s_encrypt_pw_salt); ++ ext4_superblock_csum_set(sb); ++ unlock_buffer(sbi->s_sbh); + err = ext4_handle_dirty_metadata(handle, NULL, + sbi->s_sbh); + pwsalt_err_journal: +diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c +index 3c238006870d3..8f7e0ad5b5ef1 100644 +--- a/fs/ext4/namei.c ++++ b/fs/ext4/namei.c +@@ -3437,8 +3437,6 @@ static int ext4_setent(handle_t *handle, struct ext4_renament *ent, + return retval; + } + } +- brelse(ent->bh); +- ent->bh = NULL; + + return 0; + } +@@ -3638,6 +3636,7 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, + } + } + ++ old_file_type = old.de->file_type; + if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir)) + ext4_handle_sync(handle); + +@@ -3665,7 +3664,6 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, + force_reread = (new.dir->i_ino == old.dir->i_ino && + ext4_test_inode_flag(new.dir, EXT4_INODE_INLINE_DATA)); + +- old_file_type = old.de->file_type; + if (whiteout) { + /* + * Do this before adding a new entry, so the old entry is sure +@@ -3737,15 +3735,19 @@ static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry, + retval = 0; + + end_rename: +- brelse(old.dir_bh); +- brelse(old.bh); +- brelse(new.bh); + if (whiteout) { +- if (retval) ++ if (retval) { ++ ext4_setent(handle, &old, ++ old.inode->i_ino, old_file_type); + drop_nlink(whiteout); ++ } + unlock_new_inode(whiteout); + iput(whiteout); ++ + } ++ brelse(old.dir_bh); ++ brelse(old.bh); ++ brelse(new.bh); + if (handle) + ext4_journal_stop(handle); + return retval; +diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h +index 8357ff69962f2..cc07189a501fa 100644 +--- a/fs/nfs/internal.h ++++ b/fs/nfs/internal.h +@@ -575,12 +575,14 @@ extern int nfs4_test_session_trunk(struct rpc_clnt *, + + static inline struct inode *nfs_igrab_and_active(struct inode *inode) + { +- inode = igrab(inode); +- if (inode != NULL && !nfs_sb_active(inode->i_sb)) { +- iput(inode); +- inode = NULL; ++ struct super_block *sb = inode->i_sb; ++ ++ if (sb && nfs_sb_active(sb)) { ++ if (igrab(inode)) ++ return inode; ++ nfs_sb_deactive(sb); + } +- return inode; ++ return NULL; + } + + static inline void nfs_iput_and_deactive(struct inode *inode) +diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c +index 1a395647ae265..d89a815f7c31f 100644 +--- a/fs/nfs/nfs4proc.c ++++ b/fs/nfs/nfs4proc.c +@@ -6721,9 +6721,9 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f + data->arg.new_lock_owner, ret); + } else + data->cancelled = true; ++ trace_nfs4_set_lock(fl, state, &data->res.stateid, cmd, ret); + rpc_put_task(task); + dprintk("%s: done, ret = %d!\n", __func__, ret); +- trace_nfs4_set_lock(fl, state, &data->res.stateid, cmd, ret); + return ret; + } + +diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c +index a253384a4710b..46ca5592b8b0d 100644 +--- a/fs/nfs/pnfs.c ++++ b/fs/nfs/pnfs.c +@@ -1460,12 +1460,18 @@ void pnfs_roc_release(struct nfs4_layoutreturn_args *args, + int ret) + { + struct pnfs_layout_hdr *lo = args->layout; ++ struct inode *inode = args->inode; + const nfs4_stateid *arg_stateid = NULL; + const nfs4_stateid *res_stateid = NULL; + struct nfs4_xdr_opaque_data *ld_private = args->ld_private; + + switch (ret) { + case -NFS4ERR_NOMATCHING_LAYOUT: ++ spin_lock(&inode->i_lock); ++ if (pnfs_layout_is_valid(lo) && ++ nfs4_stateid_match_other(&args->stateid, &lo->plh_stateid)) ++ pnfs_set_plh_return_info(lo, args->range.iomode, 0); ++ spin_unlock(&inode->i_lock); + break; + case 0: + if (res->lrs_present) +@@ -2141,6 +2147,7 @@ static void _lgopen_prepare_attached(struct nfs4_opendata *data, + &rng, GFP_KERNEL); + if (!lgp) { + pnfs_clear_first_layoutget(lo); ++ nfs_layoutget_end(lo); + pnfs_put_layout_hdr(lo); + return; + } +diff --git a/include/linux/acpi.h b/include/linux/acpi.h +index cd412817654fa..019468f072b7d 100644 +--- a/include/linux/acpi.h ++++ b/include/linux/acpi.h +@@ -812,6 +812,13 @@ static inline int acpi_device_modalias(struct device *dev, + return -ENODEV; + } + ++static inline struct platform_device * ++acpi_create_platform_device(struct acpi_device *adev, ++ struct property_entry *properties) ++{ ++ return NULL; ++} ++ + static inline bool acpi_dma_supported(struct acpi_device *adev) + { + return false; +diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig +index 5e3de28c76773..e656d1e232da4 100644 +--- a/kernel/trace/Kconfig ++++ b/kernel/trace/Kconfig +@@ -476,7 +476,7 @@ config KPROBE_EVENTS + config KPROBE_EVENTS_ON_NOTRACE + bool "Do NOT protect notrace function from kprobe events" + depends on KPROBE_EVENTS +- depends on KPROBES_ON_FTRACE ++ depends on DYNAMIC_FTRACE + default n + help + This is only for the developers who want to debug ftrace itself +diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c +index c45b017bacd47..5c17f70c7f2d2 100644 +--- a/kernel/trace/trace_kprobe.c ++++ b/kernel/trace/trace_kprobe.c +@@ -517,7 +517,7 @@ disable_trace_kprobe(struct trace_kprobe *tk, struct trace_event_file *file) + return ret; + } + +-#if defined(CONFIG_KPROBES_ON_FTRACE) && \ ++#if defined(CONFIG_DYNAMIC_FTRACE) && \ + !defined(CONFIG_KPROBE_EVENTS_ON_NOTRACE) + static bool __within_notrace_func(unsigned long addr) + { +diff --git a/mm/hugetlb.c b/mm/hugetlb.c +index 27e49c5ec2194..0b60ab3966968 100644 +--- a/mm/hugetlb.c ++++ b/mm/hugetlb.c +@@ -3852,7 +3852,7 @@ retry: + * So we need to block hugepage fault by PG_hwpoison bit check. + */ + if (unlikely(PageHWPoison(page))) { +- ret = VM_FAULT_HWPOISON | ++ ret = VM_FAULT_HWPOISON_LARGE | + VM_FAULT_SET_HINDEX(hstate_index(h)); + goto backout_unlocked; + } +diff --git a/mm/slub.c b/mm/slub.c +index dfc9b4267603e..02295fa61583c 100644 +--- a/mm/slub.c ++++ b/mm/slub.c +@@ -1830,7 +1830,7 @@ static void *get_partial_node(struct kmem_cache *s, struct kmem_cache_node *n, + + t = acquire_slab(s, n, page, object == NULL, &objects); + if (!t) +- break; ++ continue; /* cmpxchg raced */ + + available += objects; + if (!object) { +diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c +index 4c94f3ba2ae42..dcd8e79229515 100644 +--- a/net/netfilter/nf_conntrack_standalone.c ++++ b/net/netfilter/nf_conntrack_standalone.c +@@ -500,6 +500,9 @@ nf_conntrack_hash_sysctl(struct ctl_table *table, int write, + { + int ret; + ++ /* module_param hashsize could have changed value */ ++ nf_conntrack_htable_size_user = nf_conntrack_htable_size; ++ + ret = proc_dointvec(table, write, buffer, lenp, ppos); + if (ret < 0 || !write) + return ret; +diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c +index 2268b10a9dcf8..c31df6a76504d 100644 +--- a/net/netfilter/nf_nat_core.c ++++ b/net/netfilter/nf_nat_core.c +@@ -1068,6 +1068,7 @@ static int __init nf_nat_init(void) + ret = register_pernet_subsys(&nat_net_ops); + if (ret < 0) { + nf_ct_extend_unregister(&nat_extend); ++ kvfree(nf_nat_bysource); + return ret; + } + +diff --git a/net/sunrpc/addr.c b/net/sunrpc/addr.c +index 8391c27855501..7404f02702a1c 100644 +--- a/net/sunrpc/addr.c ++++ b/net/sunrpc/addr.c +@@ -184,7 +184,7 @@ static int rpc_parse_scope_id(struct net *net, const char *buf, + scope_id = dev->ifindex; + dev_put(dev); + } else { +- if (kstrtou32(p, 10, &scope_id) == 0) { ++ if (kstrtou32(p, 10, &scope_id) != 0) { + kfree(p); + return 0; + } +diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c +index 5596ea8f339a3..f0b2449897344 100644 +--- a/security/integrity/ima/ima_crypto.c ++++ b/security/integrity/ima/ima_crypto.c +@@ -641,7 +641,7 @@ int ima_calc_buffer_hash(const void *buf, loff_t len, + return calc_buffer_shash(buf, len, hash); + } + +-static void __init ima_pcrread(int idx, u8 *pcr) ++static void ima_pcrread(int idx, u8 *pcr) + { + if (!ima_tpm_chip) + return; +diff --git a/security/lsm_audit.c b/security/lsm_audit.c +index 33028c098ef3c..d6fea68d22ad6 100644 +--- a/security/lsm_audit.c ++++ b/security/lsm_audit.c +@@ -277,7 +277,9 @@ static void dump_common_audit_data(struct audit_buffer *ab, + struct inode *inode; + + audit_log_format(ab, " name="); ++ spin_lock(&a->u.dentry->d_lock); + audit_log_untrustedstring(ab, a->u.dentry->d_name.name); ++ spin_unlock(&a->u.dentry->d_lock); + + inode = d_backing_inode(a->u.dentry); + if (inode) { +@@ -295,8 +297,9 @@ static void dump_common_audit_data(struct audit_buffer *ab, + dentry = d_find_alias(inode); + if (dentry) { + audit_log_format(ab, " name="); +- audit_log_untrustedstring(ab, +- dentry->d_name.name); ++ spin_lock(&dentry->d_lock); ++ audit_log_untrustedstring(ab, dentry->d_name.name); ++ spin_unlock(&dentry->d_lock); + dput(dentry); + } + audit_log_format(ab, " dev="); +diff --git a/sound/firewire/fireface/ff-transaction.c b/sound/firewire/fireface/ff-transaction.c +index 332b29f8ed754..47280ae506829 100644 +--- a/sound/firewire/fireface/ff-transaction.c ++++ b/sound/firewire/fireface/ff-transaction.c +@@ -99,7 +99,7 @@ static void transmit_midi_msg(struct snd_ff *ff, unsigned int port) + + /* Set interval to next transaction. */ + ff->next_ktime[port] = ktime_add_ns(ktime_get(), +- len * 8 * NSEC_PER_SEC / 31250); ++ len * 8 * (NSEC_PER_SEC / 31250)); + ff->rx_bytes[port] = len; + + /* +diff --git a/sound/firewire/tascam/tascam-transaction.c b/sound/firewire/tascam/tascam-transaction.c +index 2ad692dd4b137..92f7e74d58478 100644 +--- a/sound/firewire/tascam/tascam-transaction.c ++++ b/sound/firewire/tascam/tascam-transaction.c +@@ -210,7 +210,7 @@ static void midi_port_work(struct work_struct *work) + + /* Set interval to next transaction. */ + port->next_ktime = ktime_add_ns(ktime_get(), +- port->consume_bytes * 8 * NSEC_PER_SEC / 31250); ++ port->consume_bytes * 8 * (NSEC_PER_SEC / 31250)); + + /* Start this transaction. */ + port->idling = false; +diff --git a/sound/soc/intel/skylake/cnl-sst.c b/sound/soc/intel/skylake/cnl-sst.c +index 245df1067ba89..7b429c0fb4e55 100644 +--- a/sound/soc/intel/skylake/cnl-sst.c ++++ b/sound/soc/intel/skylake/cnl-sst.c +@@ -212,6 +212,7 @@ static int cnl_set_dsp_D0(struct sst_dsp *ctx, unsigned int core_id) + "dsp boot timeout, status=%#x error=%#x\n", + sst_dsp_shim_read(ctx, CNL_ADSP_FW_STATUS), + sst_dsp_shim_read(ctx, CNL_ADSP_ERROR_CODE)); ++ ret = -ETIMEDOUT; + goto err; + } + } else { +diff --git a/sound/soc/meson/axg-tdm-interface.c b/sound/soc/meson/axg-tdm-interface.c +index 5c055d8de8c7d..01cc551a8e3fa 100644 +--- a/sound/soc/meson/axg-tdm-interface.c ++++ b/sound/soc/meson/axg-tdm-interface.c +@@ -459,8 +459,20 @@ static int axg_tdm_iface_set_bias_level(struct snd_soc_component *component, + return ret; + } + ++static const struct snd_soc_dapm_widget axg_tdm_iface_dapm_widgets[] = { ++ SND_SOC_DAPM_SIGGEN("Playback Signal"), ++}; ++ ++static const struct snd_soc_dapm_route axg_tdm_iface_dapm_routes[] = { ++ { "Loopback", NULL, "Playback Signal" }, ++}; ++ + static const struct snd_soc_component_driver axg_tdm_iface_component_drv = { +- .set_bias_level = axg_tdm_iface_set_bias_level, ++ .dapm_widgets = axg_tdm_iface_dapm_widgets, ++ .num_dapm_widgets = ARRAY_SIZE(axg_tdm_iface_dapm_widgets), ++ .dapm_routes = axg_tdm_iface_dapm_routes, ++ .num_dapm_routes = ARRAY_SIZE(axg_tdm_iface_dapm_routes), ++ .set_bias_level = axg_tdm_iface_set_bias_level, + }; + + static const struct of_device_id axg_tdm_iface_of_match[] = { +diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c +index 96800b7c82f67..4e99d9986f112 100644 +--- a/sound/soc/soc-dapm.c ++++ b/sound/soc/soc-dapm.c +@@ -2454,6 +2454,7 @@ void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w) + enum snd_soc_dapm_direction dir; + + list_del(&w->list); ++ list_del(&w->dirty); + /* + * remove source and sink paths associated to this widget. + * While removing the path, remove reference to it from both
