]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 May 2019 18:00:53 +0000 (20:00 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 May 2019 18:00:53 +0000 (20:00 +0200)
added patches:
btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch
md-raid-raid5-preserve-the-writeback-action-after-the-parity-check.patch
revert-don-t-jump-to-compute_result-state-from-check_result-state.patch

queue-4.4/btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch [new file with mode: 0644]
queue-4.4/kvm-arm-arm64-ensure-vcpu-target-is-unset-on-reset-f.patch
queue-4.4/md-raid-raid5-preserve-the-writeback-action-after-the-parity-check.patch [new file with mode: 0644]
queue-4.4/revert-don-t-jump-to-compute_result-state-from-check_result-state.patch [new file with mode: 0644]
queue-4.4/series
queue-4.4/vti4-ipip-tunnel-deregistration-fixes.patch
queue-4.4/xfrm-policy-fix-out-of-bound-array-accesses-in-__xfr.patch
queue-4.4/xfrm6_tunnel-fix-potential-panic-when-unloading-xfrm.patch

diff --git a/queue-4.4/btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch b/queue-4.4/btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch
new file mode 100644 (file)
index 0000000..1a43782
--- /dev/null
@@ -0,0 +1,91 @@
+From c2d1b3aae33605a61cbab445d8ae1c708ccd2698 Mon Sep 17 00:00:00 2001
+From: Nikolay Borisov <nborisov@suse.com>
+Date: Mon, 25 Mar 2019 14:31:21 +0200
+Subject: btrfs: Honour FITRIM range constraints during free space trim
+
+From: Nikolay Borisov <nborisov@suse.com>
+
+commit c2d1b3aae33605a61cbab445d8ae1c708ccd2698 upstream.
+
+Up until now trimming the freespace was done irrespective of what the
+arguments of the FITRIM ioctl were. For example fstrim's -o/-l arguments
+will be entirely ignored. Fix it by correctly handling those paramter.
+This requires breaking if the found freespace extent is after the end of
+the passed range as well as completing trim after trimming
+fstrim_range::len bytes.
+
+Fixes: 499f377f49f0 ("btrfs: iterate over unused chunk space in FITRIM")
+CC: stable@vger.kernel.org # 4.4+
+Signed-off-by: Nikolay Borisov <nborisov@suse.com>
+Reviewed-by: David Sterba <dsterba@suse.com>
+Signed-off-by: David Sterba <dsterba@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+
+---
+ fs/btrfs/extent-tree.c |   25 +++++++++++++++++++------
+ 1 file changed, 19 insertions(+), 6 deletions(-)
+
+--- a/fs/btrfs/extent-tree.c
++++ b/fs/btrfs/extent-tree.c
+@@ -10730,9 +10730,9 @@ int btrfs_error_unpin_extent_range(struc
+  * transaction.
+  */
+ static int btrfs_trim_free_extents(struct btrfs_device *device,
+-                                 u64 minlen, u64 *trimmed)
++                                 struct fstrim_range *range, u64 *trimmed)
+ {
+-      u64 start = 0, len = 0;
++      u64 start = range->start, len = 0;
+       int ret;
+       *trimmed = 0;
+@@ -10768,8 +10768,8 @@ static int btrfs_trim_free_extents(struc
+                       atomic_inc(&trans->use_count);
+               spin_unlock(&fs_info->trans_lock);
+-              ret = find_free_dev_extent_start(trans, device, minlen, start,
+-                                               &start, &len);
++              ret = find_free_dev_extent_start(trans, device, range->minlen,
++                                               start, &start, &len);
+               if (trans)
+                       btrfs_put_transaction(trans);
+@@ -10781,6 +10781,16 @@ static int btrfs_trim_free_extents(struc
+                       break;
+               }
++              /* If we are out of the passed range break */
++              if (start > range->start + range->len - 1) {
++                      mutex_unlock(&fs_info->chunk_mutex);
++                      ret = 0;
++                      break;
++              }
++
++              start = max(range->start, start);
++              len = min(range->len, len);
++
+               ret = btrfs_issue_discard(device->bdev, start, len, &bytes);
+               up_read(&fs_info->commit_root_sem);
+               mutex_unlock(&fs_info->chunk_mutex);
+@@ -10791,6 +10801,10 @@ static int btrfs_trim_free_extents(struc
+               start += len;
+               *trimmed += bytes;
++              /* We've trimmed enough */
++              if (*trimmed >= range->len)
++                      break;
++
+               if (fatal_signal_pending(current)) {
+                       ret = -ERESTARTSYS;
+                       break;
+@@ -10857,8 +10871,7 @@ int btrfs_trim_fs(struct btrfs_root *roo
+       mutex_lock(&root->fs_info->fs_devices->device_list_mutex);
+       devices = &root->fs_info->fs_devices->devices;
+       list_for_each_entry(device, devices, dev_list) {
+-              ret = btrfs_trim_free_extents(device, range->minlen,
+-                                            &group_trimmed);
++              ret = btrfs_trim_free_extents(device, range, &group_trimmed);
+               if (ret)
+                       break;
index 2644c357ae5dffe90a17cad1e5f85d71e5324546..a3f6d0dc350b835a3bca15b052fcba6be3ade290 100644 (file)
@@ -17,14 +17,12 @@ Signed-off-by: Andrew Jones <drjones@redhat.com>
 Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
 Signed-off-by: Sasha Levin <sashal@kernel.org>
 ---
- arch/arm/kvm/arm.c | 11 ++++++++---
+ arch/arm/kvm/arm.c |   11 ++++++++---
  1 file changed, 8 insertions(+), 3 deletions(-)
 
-diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
-index d7bef2144760c..e96ddc599c303 100644
 --- a/arch/arm/kvm/arm.c
 +++ b/arch/arm/kvm/arm.c
-@@ -744,7 +744,7 @@ int kvm_vm_ioctl_irq_line(struct kvm *kvm, struct kvm_irq_level *irq_level,
+@@ -744,7 +744,7 @@ int kvm_vm_ioctl_irq_line(struct kvm *kv
  static int kvm_vcpu_set_target(struct kvm_vcpu *vcpu,
                               const struct kvm_vcpu_init *init)
  {
@@ -33,7 +31,7 @@ index d7bef2144760c..e96ddc599c303 100644
        int phys_target = kvm_target_cpu();
  
        if (init->target != phys_target)
-@@ -779,9 +779,14 @@ static int kvm_vcpu_set_target(struct kvm_vcpu *vcpu,
+@@ -779,9 +779,14 @@ static int kvm_vcpu_set_target(struct kv
        vcpu->arch.target = phys_target;
  
        /* Now we know what it is, we can reset it. */
@@ -50,6 +48,3 @@ index d7bef2144760c..e96ddc599c303 100644
  
  static int kvm_arch_vcpu_ioctl_vcpu_init(struct kvm_vcpu *vcpu,
                                         struct kvm_vcpu_init *init)
--- 
-2.20.1
-
diff --git a/queue-4.4/md-raid-raid5-preserve-the-writeback-action-after-the-parity-check.patch b/queue-4.4/md-raid-raid5-preserve-the-writeback-action-after-the-parity-check.patch
new file mode 100644 (file)
index 0000000..c46288f
--- /dev/null
@@ -0,0 +1,52 @@
+From b2176a1dfb518d870ee073445d27055fea64dfb8 Mon Sep 17 00:00:00 2001
+From: Nigel Croxon <ncroxon@redhat.com>
+Date: Tue, 16 Apr 2019 09:50:09 -0700
+Subject: md/raid: raid5 preserve the writeback action after the parity check
+
+From: Nigel Croxon <ncroxon@redhat.com>
+
+commit b2176a1dfb518d870ee073445d27055fea64dfb8 upstream.
+
+The problem is that any 'uptodate' vs 'disks' check is not precise
+in this path. Put a "WARN_ON(!test_bit(R5_UPTODATE, &dev->flags)" on the
+device that might try to kick off writes and then skip the action.
+Better to prevent the raid driver from taking unexpected action *and* keep
+the system alive vs killing the machine with BUG_ON.
+
+Note: fixed warning reported by kbuild test robot <lkp@intel.com>
+
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Nigel Croxon <ncroxon@redhat.com>
+Signed-off-by: Song Liu <songliubraving@fb.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/raid5.c |   10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -3861,7 +3861,7 @@ static void handle_parity_checks6(struct
+               /* now write out any block on a failed drive,
+                * or P or Q if they were recomputed
+                */
+-              BUG_ON(s->uptodate < disks - 1); /* We don't need Q to recover */
++              dev = NULL;
+               if (s->failed == 2) {
+                       dev = &sh->dev[s->failed_num[1]];
+                       s->locked++;
+@@ -3886,6 +3886,14 @@ static void handle_parity_checks6(struct
+                       set_bit(R5_LOCKED, &dev->flags);
+                       set_bit(R5_Wantwrite, &dev->flags);
+               }
++              if (WARN_ONCE(dev && !test_bit(R5_UPTODATE, &dev->flags),
++                            "%s: disk%td not up to date\n",
++                            mdname(conf->mddev),
++                            dev - (struct r5dev *) &sh->dev)) {
++                      clear_bit(R5_LOCKED, &dev->flags);
++                      clear_bit(R5_Wantwrite, &dev->flags);
++                      s->locked--;
++              }
+               clear_bit(STRIPE_DEGRADED, &sh->state);
+               set_bit(STRIPE_INSYNC, &sh->state);
diff --git a/queue-4.4/revert-don-t-jump-to-compute_result-state-from-check_result-state.patch b/queue-4.4/revert-don-t-jump-to-compute_result-state-from-check_result-state.patch
new file mode 100644 (file)
index 0000000..6f99ba2
--- /dev/null
@@ -0,0 +1,54 @@
+From a25d8c327bb41742dbd59f8c545f59f3b9c39983 Mon Sep 17 00:00:00 2001
+From: Song Liu <songliubraving@fb.com>
+Date: Tue, 16 Apr 2019 09:34:21 -0700
+Subject: Revert "Don't jump to compute_result state from check_result state"
+
+From: Song Liu <songliubraving@fb.com>
+
+commit a25d8c327bb41742dbd59f8c545f59f3b9c39983 upstream.
+
+This reverts commit 4f4fd7c5798bbdd5a03a60f6269cf1177fbd11ef.
+
+Cc: Dan Williams <dan.j.williams@intel.com>
+Cc: Nigel Croxon <ncroxon@redhat.com>
+Cc: Xiao Ni <xni@redhat.com>
+Signed-off-by: Song Liu <songliubraving@fb.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/raid5.c |   19 +++++++++++++++----
+ 1 file changed, 15 insertions(+), 4 deletions(-)
+
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -3897,15 +3897,26 @@ static void handle_parity_checks6(struct
+       case check_state_check_result:
+               sh->check_state = check_state_idle;
+-              if (s->failed > 1)
+-                      break;
+               /* handle a successful check operation, if parity is correct
+                * we are done.  Otherwise update the mismatch count and repair
+                * parity if !MD_RECOVERY_CHECK
+                */
+               if (sh->ops.zero_sum_result == 0) {
+-                      /* Any parity checked was correct */
+-                      set_bit(STRIPE_INSYNC, &sh->state);
++                      /* both parities are correct */
++                      if (!s->failed)
++                              set_bit(STRIPE_INSYNC, &sh->state);
++                      else {
++                              /* in contrast to the raid5 case we can validate
++                               * parity, but still have a failure to write
++                               * back
++                               */
++                              sh->check_state = check_state_compute_result;
++                              /* Returning at this point means that we may go
++                               * off and bring p and/or q uptodate again so
++                               * we make sure to check zero_sum_result again
++                               * to verify if p or q need writeback
++                               */
++                      }
+               } else {
+                       atomic64_add(STRIPE_SECTORS, &conf->mddev->resync_mismatches);
+                       if (test_bit(MD_RECOVERY_CHECK, &conf->mddev->recovery))
index de2d2341d9e72ed0d51352964eda3a57825f34d6..98300d7741009ff19fa9755f302446a3ffd8c1fe 100644 (file)
@@ -70,3 +70,6 @@ kvm-arm-arm64-ensure-vcpu-target-is-unset-on-reset-f.patch
 power-supply-sysfs-prevent-endless-uevent-loop-with-.patch
 ufs-fix-braino-in-ufs_get_inode_gid-for-solaris-ufs-.patch
 perf-bench-numa-add-define-for-rusage_thread-if-not-.patch
+revert-don-t-jump-to-compute_result-state-from-check_result-state.patch
+md-raid-raid5-preserve-the-writeback-action-after-the-parity-check.patch
+btrfs-honour-fitrim-range-constraints-during-free-space-trim.patch
index a0ef240f28101aa0cf8c81fc09422fedddcebe91..d08d8ab1ea6a8652813aa2c928999a719f4d17e3 100644 (file)
@@ -16,11 +16,9 @@ Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
 Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
 Signed-off-by: Sasha Levin <sashal@kernel.org>
 ---
- net/ipv4/ip_vti.c | 5 +++--
+ net/ipv4/ip_vti.c |    5 +++--
  1 file changed, 3 insertions(+), 2 deletions(-)
 
-diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
-index fcf327ebd1345..bbcbbc1cc2cc6 100644
 --- a/net/ipv4/ip_vti.c
 +++ b/net/ipv4/ip_vti.c
 @@ -648,9 +648,9 @@ static int __init vti_init(void)
@@ -43,6 +41,3 @@ index fcf327ebd1345..bbcbbc1cc2cc6 100644
        xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP);
        xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH);
        xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
--- 
-2.20.1
-
index 6c9a391769009d00907873a3a592f0b7d9d9dba1..1236106da1fefb4cb30f8a83dc2fcac564fd8b67 100644 (file)
@@ -68,14 +68,12 @@ Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
 Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
 Signed-off-by: Sasha Levin <sashal@kernel.org>
 ---
- net/xfrm/xfrm_user.c | 2 +-
+ net/xfrm/xfrm_user.c |    2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
-diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
-index 177a6c75f136b..b04c030439762 100644
 --- a/net/xfrm/xfrm_user.c
 +++ b/net/xfrm/xfrm_user.c
-@@ -1340,7 +1340,7 @@ static int verify_newpolicy_info(struct xfrm_userpolicy_info *p)
+@@ -1340,7 +1340,7 @@ static int verify_newpolicy_info(struct
        ret = verify_policy_dir(p->dir);
        if (ret)
                return ret;
@@ -84,6 +82,3 @@ index 177a6c75f136b..b04c030439762 100644
                return -EINVAL;
  
        return 0;
--- 
-2.20.1
-
index b006daaf728ffef7724da69947404a3a40a746c4..aa8fa263f2d62f1bf9d62bbe23ebb4c23ee89ce5 100644 (file)
@@ -15,14 +15,12 @@ Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
 Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
 Signed-off-by: Sasha Levin <sashal@kernel.org>
 ---
- net/ipv6/xfrm6_tunnel.c | 4 ++++
+ net/ipv6/xfrm6_tunnel.c |    4 ++++
  1 file changed, 4 insertions(+)
 
-diff --git a/net/ipv6/xfrm6_tunnel.c b/net/ipv6/xfrm6_tunnel.c
-index 56b72cada346f..f9d493c59d6c1 100644
 --- a/net/ipv6/xfrm6_tunnel.c
 +++ b/net/ipv6/xfrm6_tunnel.c
-@@ -391,6 +391,10 @@ static void __exit xfrm6_tunnel_fini(void)
+@@ -391,6 +391,10 @@ static void __exit xfrm6_tunnel_fini(voi
        xfrm6_tunnel_deregister(&xfrm6_tunnel_handler, AF_INET6);
        xfrm_unregister_type(&xfrm6_tunnel_type, AF_INET6);
        unregister_pernet_subsys(&xfrm6_tunnel_net_ops);
@@ -33,6 +31,3 @@ index 56b72cada346f..f9d493c59d6c1 100644
        kmem_cache_destroy(xfrm6_tunnel_spi_kmem);
  }
  
--- 
-2.20.1
-