diff options
author | Thorsten Leemhuis <fedora@leemhuis.info> | 2019-04-03 07:01:55 +0200 |
---|---|---|
committer | Thorsten Leemhuis <fedora@leemhuis.info> | 2019-04-03 07:01:55 +0200 |
commit | e03d1fb1e4e118c0dd0c434d3b841b8906e7cef0 (patch) | |
tree | 9775611e4b60b398065c21eedc13c987392c5ab8 | |
parent | de844a3e12accbc030e4477ffbf61519bcb63ca5 (diff) | |
parent | e6ece0fd9878bbb6bcf7e7161ef083063d7f7321 (diff) | |
download | kernel-e03d1fb1e4e118c0dd0c434d3b841b8906e7cef0.tar.gz kernel-e03d1fb1e4e118c0dd0c434d3b841b8906e7cef0.tar.xz kernel-e03d1fb1e4e118c0dd0c434d3b841b8906e7cef0.zip |
Merge remote-tracking branch 'origin/f30' into f30-user-thl-vanilla-fedora
25 files changed, 351 insertions, 36 deletions
diff --git a/0001-inotify-Fix-fsnotify_mark-refcount-leak-in-inotify_u.patch b/0001-inotify-Fix-fsnotify_mark-refcount-leak-in-inotify_u.patch new file mode 100644 index 000000000..e0c6f73a3 --- /dev/null +++ b/0001-inotify-Fix-fsnotify_mark-refcount-leak-in-inotify_u.patch @@ -0,0 +1,45 @@ +From 62c9d2674b31d4c8a674bee86b7edc6da2803aea Mon Sep 17 00:00:00 2001 +From: ZhangXiaoxu <zhangxiaoxu5@huawei.com> +Date: Sat, 2 Mar 2019 09:17:32 +0800 +Subject: [PATCH] inotify: Fix fsnotify_mark refcount leak in + inotify_update_existing_watch() + +Commit 4d97f7d53da7dc83 ("inotify: Add flag IN_MASK_CREATE for +inotify_add_watch()") forgot to call fsnotify_put_mark() with +IN_MASK_CREATE after fsnotify_find_mark() + +Fixes: 4d97f7d53da7dc83 ("inotify: Add flag IN_MASK_CREATE for inotify_add_watch()") +Signed-off-by: ZhangXiaoxu <zhangxiaoxu5@huawei.com> +Signed-off-by: Jan Kara <jack@suse.cz> +--- + fs/notify/inotify/inotify_user.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c +index e2901fbb9f76..7b53598c8804 100644 +--- a/fs/notify/inotify/inotify_user.c ++++ b/fs/notify/inotify/inotify_user.c +@@ -519,8 +519,10 @@ static int inotify_update_existing_watch(struct fsnotify_group *group, + fsn_mark = fsnotify_find_mark(&inode->i_fsnotify_marks, group); + if (!fsn_mark) + return -ENOENT; +- else if (create) +- return -EEXIST; ++ else if (create) { ++ ret = -EEXIST; ++ goto out; ++ } + + i_mark = container_of(fsn_mark, struct inotify_inode_mark, fsn_mark); + +@@ -548,6 +550,7 @@ static int inotify_update_existing_watch(struct fsnotify_group *group, + /* return the wd */ + ret = i_mark->wd; + ++out: + /* match the get from fsnotify_find_mark() */ + fsnotify_put_mark(fsn_mark); + +-- +2.20.1 + diff --git a/configs/fedora/generic/CONFIG_GENERIC_PHY b/configs/fedora/generic/CONFIG_GENERIC_PHY index 582e87c3b..40cd1a4f5 100644 --- a/configs/fedora/generic/CONFIG_GENERIC_PHY +++ b/configs/fedora/generic/CONFIG_GENERIC_PHY @@ -1 +1 @@ -# CONFIG_GENERIC_PHY is not set +CONFIG_GENERIC_PHY=y diff --git a/configs/fedora/generic/CONFIG_IOSCHED_BFQ b/configs/fedora/generic/CONFIG_IOSCHED_BFQ index 3023fb0b5..784fa4506 100644 --- a/configs/fedora/generic/CONFIG_IOSCHED_BFQ +++ b/configs/fedora/generic/CONFIG_IOSCHED_BFQ @@ -1 +1 @@ -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y diff --git a/configs/fedora/generic/CONFIG_MQ_IOSCHED_KYBER b/configs/fedora/generic/CONFIG_MQ_IOSCHED_KYBER index 939264da2..16623d2a0 100644 --- a/configs/fedora/generic/CONFIG_MQ_IOSCHED_KYBER +++ b/configs/fedora/generic/CONFIG_MQ_IOSCHED_KYBER @@ -1 +1 @@ -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y diff --git a/configs/fedora/generic/arm/CONFIG_GENERIC_PHY b/configs/fedora/generic/arm/CONFIG_GENERIC_PHY deleted file mode 100644 index 40cd1a4f5..000000000 --- a/configs/fedora/generic/arm/CONFIG_GENERIC_PHY +++ /dev/null @@ -1 +0,0 @@ -CONFIG_GENERIC_PHY=y diff --git a/configs/fedora/generic/powerpc/CONFIG_GENERIC_PHY b/configs/fedora/generic/powerpc/CONFIG_GENERIC_PHY deleted file mode 100644 index 40cd1a4f5..000000000 --- a/configs/fedora/generic/powerpc/CONFIG_GENERIC_PHY +++ /dev/null @@ -1 +0,0 @@ -CONFIG_GENERIC_PHY=y diff --git a/configs/fedora/generic/s390x/CONFIG_GENERIC_PHY b/configs/fedora/generic/s390x/CONFIG_GENERIC_PHY deleted file mode 100644 index 40cd1a4f5..000000000 --- a/configs/fedora/generic/s390x/CONFIG_GENERIC_PHY +++ /dev/null @@ -1 +0,0 @@ -CONFIG_GENERIC_PHY=y diff --git a/configs/fedora/generic/x86/i686/CONFIG_GENERIC_PHY b/configs/fedora/generic/x86/i686/CONFIG_GENERIC_PHY deleted file mode 100644 index 40cd1a4f5..000000000 --- a/configs/fedora/generic/x86/i686/CONFIG_GENERIC_PHY +++ /dev/null @@ -1 +0,0 @@ -CONFIG_GENERIC_PHY=y diff --git a/configs/fedora/generic/x86/x86_64/CONFIG_GENERIC_PHY b/configs/fedora/generic/x86/x86_64/CONFIG_GENERIC_PHY deleted file mode 100644 index 40cd1a4f5..000000000 --- a/configs/fedora/generic/x86/x86_64/CONFIG_GENERIC_PHY +++ /dev/null @@ -1 +0,0 @@ -CONFIG_GENERIC_PHY=y diff --git a/kernel-aarch64-debug.config b/kernel-aarch64-debug.config index 1ef3ef510..948d619d9 100644 --- a/kernel-aarch64-debug.config +++ b/kernel-aarch64-debug.config @@ -2511,7 +2511,7 @@ CONFIG_IOMMU_DMA=y # CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set CONFIG_IOMMU_IO_PGTABLE_LPAE=y CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -3452,7 +3452,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-aarch64.config b/kernel-aarch64.config index 0989c243c..96c01a15e 100644 --- a/kernel-aarch64.config +++ b/kernel-aarch64.config @@ -2495,7 +2495,7 @@ CONFIG_IOMMU_DMA=y # CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set CONFIG_IOMMU_IO_PGTABLE_LPAE=y CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -3432,7 +3432,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-armv7hl-debug.config b/kernel-armv7hl-debug.config index 4256b86f8..89deaad5a 100644 --- a/kernel-armv7hl-debug.config +++ b/kernel-armv7hl-debug.config @@ -2559,7 +2559,7 @@ CONFIG_IOMMU_DMA=y # CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set CONFIG_IOMMU_IO_PGTABLE_LPAE=y CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -3540,7 +3540,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-armv7hl-lpae-debug.config b/kernel-armv7hl-lpae-debug.config index c17f3f5b4..4c24692a7 100644 --- a/kernel-armv7hl-lpae-debug.config +++ b/kernel-armv7hl-lpae-debug.config @@ -2461,7 +2461,7 @@ CONFIG_IOMMU_DMA=y # CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set CONFIG_IOMMU_IO_PGTABLE_LPAE=y CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -3418,7 +3418,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-armv7hl-lpae.config b/kernel-armv7hl-lpae.config index a48379654..727056fe7 100644 --- a/kernel-armv7hl-lpae.config +++ b/kernel-armv7hl-lpae.config @@ -2446,7 +2446,7 @@ CONFIG_IOMMU_DMA=y # CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set CONFIG_IOMMU_IO_PGTABLE_LPAE=y CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -3399,7 +3399,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-armv7hl.config b/kernel-armv7hl.config index 430235c56..c9f90d36c 100644 --- a/kernel-armv7hl.config +++ b/kernel-armv7hl.config @@ -2544,7 +2544,7 @@ CONFIG_IOMMU_DMA=y # CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set CONFIG_IOMMU_IO_PGTABLE_LPAE=y CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -3521,7 +3521,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-i686-debug.config b/kernel-i686-debug.config index b1402dfdd..9c0b17f5b 100644 --- a/kernel-i686-debug.config +++ b/kernel-i686-debug.config @@ -2304,7 +2304,7 @@ CONFIG_IO_DELAY_0X80=y CONFIG_IOMMU_DEBUGFS=y # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y # CONFIG_IOSF_MBI_DEBUG is not set CONFIG_IOSF_MBI=y CONFIG_IO_STRICT_DEVMEM=y @@ -3220,7 +3220,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-i686.config b/kernel-i686.config index c7240332a..3ae262491 100644 --- a/kernel-i686.config +++ b/kernel-i686.config @@ -2287,7 +2287,7 @@ CONFIG_IO_DELAY_0X80=y # CONFIG_IOMMU_DEBUGFS is not set # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y # CONFIG_IOSF_MBI_DEBUG is not set CONFIG_IOSF_MBI=y CONFIG_IO_STRICT_DEVMEM=y @@ -3201,7 +3201,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-ppc64le-debug.config b/kernel-ppc64le-debug.config index 5b9b68f07..328ac18d2 100644 --- a/kernel-ppc64le-debug.config +++ b/kernel-ppc64le-debug.config @@ -2075,7 +2075,7 @@ CONFIG_IO_EVENT_IRQ=y CONFIG_IOMMU_DEBUGFS=y # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -2959,7 +2959,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-ppc64le.config b/kernel-ppc64le.config index 97b21565e..2eb7ac949 100644 --- a/kernel-ppc64le.config +++ b/kernel-ppc64le.config @@ -2058,7 +2058,7 @@ CONFIG_IO_EVENT_IRQ=y # CONFIG_IOMMU_DEBUGFS is not set # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -2938,7 +2938,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-s390x-debug.config b/kernel-s390x-debug.config index c978c1bae..f175bd115 100644 --- a/kernel-s390x-debug.config +++ b/kernel-s390x-debug.config @@ -2054,7 +2054,7 @@ CONFIG_IO_DELAY_0X80=y CONFIG_IOMMU_DEBUGFS=y # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -2933,7 +2933,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-s390x.config b/kernel-s390x.config index 4dd57ce6c..c401340cf 100644 --- a/kernel-s390x.config +++ b/kernel-s390x.config @@ -2037,7 +2037,7 @@ CONFIG_IO_DELAY_0X80=y # CONFIG_IOMMU_DEBUGFS is not set # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y CONFIG_IO_STRICT_DEVMEM=y CONFIG_IP6_NF_FILTER=m CONFIG_IP6_NF_IPTABLES=m @@ -2912,7 +2912,7 @@ CONFIG_MPLS_IPTUNNEL=m CONFIG_MPLS_ROUTING=m CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-x86_64-debug.config b/kernel-x86_64-debug.config index e354f55f2..072e8fc8d 100644 --- a/kernel-x86_64-debug.config +++ b/kernel-x86_64-debug.config @@ -2348,7 +2348,7 @@ CONFIG_IO_DELAY_0X80=y CONFIG_IOMMU_DEBUGFS=y # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y # CONFIG_IOSF_MBI_DEBUG is not set CONFIG_IOSF_MBI=y CONFIG_IO_STRICT_DEVMEM=y @@ -3256,7 +3256,7 @@ CONFIG_MPLS_ROUTING=m # CONFIG_MPSC is not set CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel-x86_64.config b/kernel-x86_64.config index 16625c7f5..1f85a3d02 100644 --- a/kernel-x86_64.config +++ b/kernel-x86_64.config @@ -2331,7 +2331,7 @@ CONFIG_IO_DELAY_0X80=y # CONFIG_IOMMU_DEBUGFS is not set # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_IOMMU_SUPPORT=y -CONFIG_IOSCHED_BFQ=m +CONFIG_IOSCHED_BFQ=y # CONFIG_IOSF_MBI_DEBUG is not set CONFIG_IOSF_MBI=y CONFIG_IO_STRICT_DEVMEM=y @@ -3237,7 +3237,7 @@ CONFIG_MPLS_ROUTING=m # CONFIG_MPSC is not set CONFIG_MPU3050_I2C=m CONFIG_MQ_IOSCHED_DEADLINE=y -CONFIG_MQ_IOSCHED_KYBER=m +CONFIG_MQ_IOSCHED_KYBER=y # CONFIG_MS5611 is not set # CONFIG_MS5637 is not set # CONFIG_MS_BLOCK is not set diff --git a/kernel.spec b/kernel.spec index fc7e8dba4..7aea0d8c2 100644 --- a/kernel.spec +++ b/kernel.spec @@ -640,6 +640,12 @@ Patch511: 0001-virt-vbox-Implement-passing-requestor-info-to-the-ho.patch # rhbz 1688283 Patch512: v3-tpm-fix-an-invalid-condition-in-tpm_common_poll.patch +# rhbz 1683382 +Patch515: nfsv4.1-avoid-false-retries.patch + +# CVE-2019-9857 rhbz 1694758 1694759 +Patch516: 0001-inotify-Fix-fsnotify_mark-refcount-leak-in-inotify_u.patch + # END OF PATCH DEFINITIONS %endif @@ -1916,6 +1922,15 @@ fi # # %changelog +* Mon Apr 01 2019 Justin M. Forbes <jforbes@fedoraproject.org> +- Fix CVE-2019-9857 (rhbz 1694758 1694759) + +* Mon Apr 01 2019 Laura Abbott <labbott@redhat.com> +- Ensure ioschedulers are built in (rhbz 1690604) + +* Wed Mar 27 2019 Laura Abbott <labbott@redhat.com> - 5.0.5-300 +- Linux v5.0.5 + * Tue Mar 26 2019 Peter Robinson <pbrobinson@fedoraproject.org> - Initial NXP i.MX8 enablement diff --git a/nfsv4.1-avoid-false-retries.patch b/nfsv4.1-avoid-false-retries.patch new file mode 100644 index 000000000..ebec54dab --- /dev/null +++ b/nfsv4.1-avoid-false-retries.patch @@ -0,0 +1,260 @@ +From 675f11241a9f5b434effc7aee9eb84bf3d17d685 Mon Sep 17 00:00:00 2001 +From: Trond Myklebust <trond.myklebust@hammerspace.com> +Date: Wed, 20 Jun 2018 17:53:34 -0400 +Subject: [PATCH] NFSv4.1: Avoid false retries when RPC calls are interrupted + +A 'false retry' in NFSv4.1 occurs when the client attempts to transmit a +new RPC call using a slot+sequence number combination that references an +already cached one. Currently, the Linux NFS client will do this if a +user process interrupts an RPC call that is in progress. +The problem with doing so is that we defeat the main mechanism used by +the server to differentiate between a new call and a replayed one. Even +if the server is able to perfectly cache the arguments of the old call, +it cannot know if the client intended to replay or send a new call. + +The obvious fix is to bump the sequence number pre-emptively if an +RPC call is interrupted, but in order to deal with the corner cases +where the interrupted call is not actually received and processed by +the server, we need to interpret the error NFS4ERR_SEQ_MISORDERED +as a sign that we need to either wait or locate a correct sequence +number that lies between the value we sent, and the last value that +was acked by a SEQUENCE call on that slot. + +Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com> +--- + fs/nfs/nfs4proc.c | 105 ++++++++++++++++++++----------------------- + fs/nfs/nfs4session.c | 5 ++- + fs/nfs/nfs4session.h | 5 ++- + 3 files changed, 55 insertions(+), 60 deletions(-) + +diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c +index 64ac80ec6b7b..3a6a9c9ee369 100644 +--- a/fs/nfs/nfs4proc.c ++++ b/fs/nfs/nfs4proc.c +@@ -730,13 +730,25 @@ static void nfs41_sequence_free_slot(struct nfs4_sequence_res *res) + res->sr_slot = NULL; + } + ++static void nfs4_slot_sequence_record_sent(struct nfs4_slot *slot, ++ u32 seqnr) ++{ ++ if ((s32)(seqnr - slot->seq_nr_highest_sent) > 0) ++ slot->seq_nr_highest_sent = seqnr; ++} ++static void nfs4_slot_sequence_acked(struct nfs4_slot *slot, ++ u32 seqnr) ++{ ++ slot->seq_nr_highest_sent = seqnr; ++ slot->seq_nr_last_acked = seqnr; ++} ++ + static int nfs41_sequence_process(struct rpc_task *task, + struct nfs4_sequence_res *res) + { + struct nfs4_session *session; + struct nfs4_slot *slot = res->sr_slot; + struct nfs_client *clp; +- bool interrupted = false; + int ret = 1; + + if (slot == NULL) +@@ -747,16 +759,12 @@ static int nfs41_sequence_process(struct rpc_task *task, + + session = slot->table->session; + +- if (slot->interrupted) { +- if (res->sr_status != -NFS4ERR_DELAY) +- slot->interrupted = 0; +- interrupted = true; +- } +- + trace_nfs4_sequence_done(session, res); + /* Check the SEQUENCE operation status */ + switch (res->sr_status) { + case 0: ++ /* Mark this sequence number as having been acked */ ++ nfs4_slot_sequence_acked(slot, slot->seq_nr); + /* Update the slot's sequence and clientid lease timer */ + slot->seq_done = 1; + clp = session->clp; +@@ -771,9 +779,9 @@ static int nfs41_sequence_process(struct rpc_task *task, + * sr_status remains 1 if an RPC level error occurred. + * The server may or may not have processed the sequence + * operation.. +- * Mark the slot as having hosted an interrupted RPC call. + */ +- slot->interrupted = 1; ++ nfs4_slot_sequence_record_sent(slot, slot->seq_nr); ++ slot->seq_done = 1; + goto out; + case -NFS4ERR_DELAY: + /* The server detected a resend of the RPC call and +@@ -784,6 +792,7 @@ static int nfs41_sequence_process(struct rpc_task *task, + __func__, + slot->slot_nr, + slot->seq_nr); ++ nfs4_slot_sequence_acked(slot, slot->seq_nr); + goto out_retry; + case -NFS4ERR_RETRY_UNCACHED_REP: + case -NFS4ERR_SEQ_FALSE_RETRY: +@@ -791,6 +800,7 @@ static int nfs41_sequence_process(struct rpc_task *task, + * The server thinks we tried to replay a request. + * Retry the call after bumping the sequence ID. + */ ++ nfs4_slot_sequence_acked(slot, slot->seq_nr); + goto retry_new_seq; + case -NFS4ERR_BADSLOT: + /* +@@ -801,21 +811,28 @@ static int nfs41_sequence_process(struct rpc_task *task, + goto session_recover; + goto retry_nowait; + case -NFS4ERR_SEQ_MISORDERED: ++ nfs4_slot_sequence_record_sent(slot, slot->seq_nr); + /* +- * Was the last operation on this sequence interrupted? +- * If so, retry after bumping the sequence number. ++ * Were one or more calls using this slot interrupted? ++ * If the server never received the request, then our ++ * transmitted slot sequence number may be too high. + */ +- if (interrupted) +- goto retry_new_seq; +- /* +- * Could this slot have been previously retired? +- * If so, then the server may be expecting seq_nr = 1! +- */ +- if (slot->seq_nr != 1) { +- slot->seq_nr = 1; ++ if ((s32)(slot->seq_nr - slot->seq_nr_last_acked) > 1) { ++ slot->seq_nr--; + goto retry_nowait; + } +- goto session_recover; ++ /* ++ * RFC5661: ++ * A retry might be sent while the original request is ++ * still in progress on the replier. The replier SHOULD ++ * deal with the issue by returning NFS4ERR_DELAY as the ++ * reply to SEQUENCE or CB_SEQUENCE operation, but ++ * implementations MAY return NFS4ERR_SEQ_MISORDERED. ++ * ++ * Restart the search after a delay. ++ */ ++ slot->seq_nr = slot->seq_nr_highest_sent; ++ goto out_retry; + default: + /* Just update the slot sequence no. */ + slot->seq_done = 1; +@@ -906,17 +923,6 @@ static const struct rpc_call_ops nfs41_call_sync_ops = { + .rpc_call_done = nfs41_call_sync_done, + }; + +-static void +-nfs4_sequence_process_interrupted(struct nfs_client *client, +- struct nfs4_slot *slot, const struct cred *cred) +-{ +- struct rpc_task *task; +- +- task = _nfs41_proc_sequence(client, cred, slot, true); +- if (!IS_ERR(task)) +- rpc_put_task_async(task); +-} +- + #else /* !CONFIG_NFS_V4_1 */ + + static int nfs4_sequence_process(struct rpc_task *task, struct nfs4_sequence_res *res) +@@ -937,14 +943,6 @@ int nfs4_sequence_done(struct rpc_task *task, + } + EXPORT_SYMBOL_GPL(nfs4_sequence_done); + +-static void +-nfs4_sequence_process_interrupted(struct nfs_client *client, +- struct nfs4_slot *slot, const struct cred *cred) +-{ +- WARN_ON_ONCE(1); +- slot->interrupted = 0; +-} +- + #endif /* !CONFIG_NFS_V4_1 */ + + static void nfs41_sequence_res_init(struct nfs4_sequence_res *res) +@@ -985,26 +983,19 @@ int nfs4_setup_sequence(struct nfs_client *client, + task->tk_timeout = 0; + } + +- for (;;) { +- spin_lock(&tbl->slot_tbl_lock); +- /* The state manager will wait until the slot table is empty */ +- if (nfs4_slot_tbl_draining(tbl) && !args->sa_privileged) +- goto out_sleep; +- +- slot = nfs4_alloc_slot(tbl); +- if (IS_ERR(slot)) { +- /* Try again in 1/4 second */ +- if (slot == ERR_PTR(-ENOMEM)) +- task->tk_timeout = HZ >> 2; +- goto out_sleep; +- } +- spin_unlock(&tbl->slot_tbl_lock); ++ spin_lock(&tbl->slot_tbl_lock); ++ /* The state manager will wait until the slot table is empty */ ++ if (nfs4_slot_tbl_draining(tbl) && !args->sa_privileged) ++ goto out_sleep; + +- if (likely(!slot->interrupted)) +- break; +- nfs4_sequence_process_interrupted(client, +- slot, task->tk_msg.rpc_cred); ++ slot = nfs4_alloc_slot(tbl); ++ if (IS_ERR(slot)) { ++ /* Try again in 1/4 second */ ++ if (slot == ERR_PTR(-ENOMEM)) ++ task->tk_timeout = HZ >> 2; ++ goto out_sleep; + } ++ spin_unlock(&tbl->slot_tbl_lock); + + nfs4_sequence_attach_slot(args, res, slot); + +diff --git a/fs/nfs/nfs4session.c b/fs/nfs/nfs4session.c +index a5489d70a724..39962c19744f 100644 +--- a/fs/nfs/nfs4session.c ++++ b/fs/nfs/nfs4session.c +@@ -110,6 +110,8 @@ static struct nfs4_slot *nfs4_new_slot(struct nfs4_slot_table *tbl, + slot->table = tbl; + slot->slot_nr = slotid; + slot->seq_nr = seq_init; ++ slot->seq_nr_highest_sent = seq_init; ++ slot->seq_nr_last_acked = seq_init - 1; + } + return slot; + } +@@ -276,7 +278,8 @@ static void nfs4_reset_slot_table(struct nfs4_slot_table *tbl, + p = &tbl->slots; + while (*p) { + (*p)->seq_nr = ivalue; +- (*p)->interrupted = 0; ++ (*p)->seq_nr_highest_sent = ivalue; ++ (*p)->seq_nr_last_acked = ivalue - 1; + p = &(*p)->next; + } + tbl->highest_used_slotid = NFS4_NO_SLOT; +diff --git a/fs/nfs/nfs4session.h b/fs/nfs/nfs4session.h +index 3c550f297561..230509b77121 100644 +--- a/fs/nfs/nfs4session.h ++++ b/fs/nfs/nfs4session.h +@@ -23,8 +23,9 @@ struct nfs4_slot { + unsigned long generation; + u32 slot_nr; + u32 seq_nr; +- unsigned int interrupted : 1, +- privileged : 1, ++ u32 seq_nr_last_acked; ++ u32 seq_nr_highest_sent; ++ unsigned int privileged : 1, + seq_done : 1; + }; + +-- +2.20.1 + |