1. 05 6月, 2015 2 次提交
    • A
      i40e: start up in VEPA mode by default · fc60861e
      Anjali Singhai Jain 提交于
      The patch fixes a bug in the default configuration which
      prevented a software bridge loaded on the PF interface from
      working correctly because broadcast packets are incorrectly
      looped back.
      
      Fix the general case, by loading the driver in VEPA mode Until a
      VF or VMDq VSI is added. This way loopback on the Main VSI is
      turned off until needed and can resolve the issue of unnecessary
      reflection for users that do not have VF or VMDq VSIs setup.
      
      The driver must now coordinate the loopback setting for the Flow
      Director (FDIR) VSI to make sure it is in sync with the current
      VEB or VEPA mode setting.
      
      The user can still switch bridge modes from the bridge commands and
      choose to be in VEPA mode with VF VSIs. Because of hardware
      requirements, the call to switch to VEB mode when no VF/VMDqs are
      present will be rejected.
      
      NOTE: This patch uses BIT_ULL as that is preferred going forward,
      a followup patch in the lower priority queue to net-next will fix
      up the remaining 1 << usages.
      
      Change-ID: Ib121ddb18fe4b3c4f52e9deda6fcbeb9105683d1
      Signed-off-by: NAnjali Singhai Jain <anjali.singhai@intel.com>
      Signed-off-by: NJesse Brandeburg <jesse.brandeburg@intel.com>
      Tested-by: NJim Young <james.m.young@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      fc60861e
    • A
      i40e/i40evf: Fix mixed size frags and linearization · 30520831
      Anjali Singhai Jain 提交于
      This patch fixes a bug where the i40e Tx queue will hang if this
      skb is passed to the driver.
      
      With mixed size fragments while using TSO there was a corner case
      where we needed to linearize but we were not. This was seen with
      iSCSI traffic and could be reproduced with a frag list that looks
      like this:
      
      num_frags = 17, gso_segs = 17, hdr_len = 66,
      skb_shinfo(skb)->gso_size = 1448
      size = 3002, j = 1, frag_size = 2936, num_frags = 17
      size = 4268, j = 1, frag_size = 4096, num_frags = 16
      size = 5534, j = 1, frag_size = 4096, num_frags = 15
      size = 5352, j = 1, frag_size = 4096, num_frags = 14
      size = 5170, j = 1, frag_size = 4096, num_frags = 13
      size = 3468, j = 1, frag_size = 2576, num_frags = 12
      size = 750, j = 1, frag_size = 112, num_frags = 11
      size = 862, j = 2, frag_size = 112, num_frags = 10
      size = 974, j = 3, frag_size = 112, num_frags = 9
      size = 1126, j = 4, frag_size = 152, num_frags = 8
      size = 1330, j = 5, frag_size = 204, num_frags = 7
      size = 1534, j = 6, frag_size = 204, num_frags = 6
      size = 356, j = 1, frag_size = 204, num_frags = 5
      size = 560, j = 2, frag_size = 204, num_frags = 4
      size = 764, j = 3, frag_size = 204, num_frags = 3
      size = 968, j = 4, frag_size = 204, num_frags = 2
      size = 1140, j = 5, frag_size = 172, num_frags = 1
      result: linearize = 0, j = 6
      
      Change-ID: I79bb1aeab0af255fe2ce28e93672a85d85bf47e8
      Signed-off-by: NAnjali Singhai Jain <anjali.singhai@intel.com>
      Signed-off-by: NJesse Brandeburg <jesse.brandeburg@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      30520831
  2. 02 6月, 2015 3 次提交
    • Y
      bnx2x: Move statistics implementation into semaphores · c6e36d8c
      Yuval Mintz 提交于
      Commit dff173de ("bnx2x: Fix statistics locking scheme") changed the
      bnx2x locking around statistics state into using a mutex - but the lock
      is being accessed via a timer which is forbidden.
      
      [If compiled with CONFIG_DEBUG_MUTEXES, logs show a warning about
      accessing the mutex in interrupt context]
      
      This moves the implementation into using a semaphore [with size '1']
      instead.
      Signed-off-by: NYuval Mintz <Yuval.Mintz@qlogic.com>
      Signed-off-by: NAriel Elior <Ariel.Elior@qlogic.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c6e36d8c
    • I
      xen: netback: read hotplug script once at start of day. · 31a41898
      Ian Campbell 提交于
      When we come to tear things down in netback_remove() and generate the
      uevent it is possible that the xenstore directory has already been
      removed (details below).
      
      In such cases netback_uevent() won't be able to read the hotplug
      script and will write a xenstore error node.
      
      A recent change to the hypervisor exposed this race such that we now
      sometimes lose it (where apparently we didn't ever before).
      
      Instead read the hotplug script configuration during setup and use it
      for the lifetime of the backend device.
      
      The apparently more obvious fix of moving the transition to
      state=Closed in netback_remove() to after the uevent does not work
      because it is possible that we are already in state=Closed (in
      reaction to the guest having disconnected as it shutdown). Being
      already in Closed means the toolstack is at liberty to start tearing
      down the xenstore directories. In principal it might be possible to
      arrange to unregister the device sooner (e.g on transition to Closing)
      such that xenstore would still be there but this state machine is
      fragile and prone to anger...
      
      A modern Xen system only relies on the hotplug uevent for driver
      domains, when the backend is in the same domain as the toolstack it
      will run the necessary setup/teardown directly in the correct sequence
      wrt xenstore changes.
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      Acked-by: NWei Liu <wei.liu2@citrix.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      31a41898
    • I
      xen: netback: fix printf format string warning · dc5e7a81
      Ian Campbell 提交于
      drivers/net/xen-netback/netback.c: In function ‘xenvif_tx_build_gops’:
      drivers/net/xen-netback/netback.c:1253:8: warning: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 5 has type ‘int’ [-Wformat=]
              (txreq.offset&~PAGE_MASK) + txreq.size);
              ^
      
      PAGE_MASK's type can vary by arch, so a cast is needed.
      Signed-off-by: NIan Campbell <ian.campbell@citrix.com>
      ----
      v2: Cast to unsigned long, since PAGE_MASK can vary by arch.
      Acked-by: NWei Liu <wei.liu2@citrix.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      dc5e7a81
  3. 01 6月, 2015 1 次提交
  4. 31 5月, 2015 9 次提交
  5. 30 5月, 2015 5 次提交
    • G
      hwmon: (nct6683) Add missing sysfs attribute initialization · c7bd6dc3
      Guenter Roeck 提交于
      The following error message is seen when loading the nct6683 driver
      with DEBUG_LOCK_ALLOC enabled.
      
      BUG: key ffff88040b2f0030 not in .data!
      ------------[ cut here ]------------
      WARNING: CPU: 0 PID: 186 at kernel/locking/lockdep.c:2988
      				lockdep_init_map+0x469/0x630()
      DEBUG_LOCKS_WARN_ON(1)
      
      Caused by a missing call to sysfs_attr_init() when initializing
      sysfs attributes.
      Reported-by: NAlexey Orishko <alexey.orishko@gmail.com>
      Reviewed-by: NJean Delvare <jdelvare@suse.de>
      Cc: stable@vger.kernel.org # v3.18+
      Signed-off-by: NGuenter Roeck <linux@roeck-us.net>
      c7bd6dc3
    • G
      hwmon: (nct6775) Add missing sysfs attribute initialization · 1b63bf61
      Guenter Roeck 提交于
      The following error message is seen when loading the nct6775 driver
      with DEBUG_LOCK_ALLOC enabled.
      
      BUG: key ffff88040b2f0030 not in .data!
      ------------[ cut here ]------------
      WARNING: CPU: 0 PID: 186 at kernel/locking/lockdep.c:2988
      				lockdep_init_map+0x469/0x630()
      DEBUG_LOCKS_WARN_ON(1)
      
      Caused by a missing call to sysfs_attr_init() when initializing
      sysfs attributes.
      Reported-by: NAlexey Orishko <alexey.orishko@gmail.com>
      Reviewed-by: NJean Delvare <jdelvare@suse.de>
      Cc: stable@vger.kernel.org # v3.12+
      Signed-off-by: NGuenter Roeck <linux@roeck-us.net>
      1b63bf61
    • G
      hwmon: (tmp401) Do not auto-detect chip on I2C address 0x37 · 9aecac04
      Guenter Roeck 提交于
      I2C address 0x37 may be used by EEPROMs, which can result in false
      positives. Do not attempt to detect a chip at this address.
      Reviewed-by: NJean Delvare <jdelvare@suse.de>
      Cc: stable@vger.kernel.org # v4.0+
      Signed-off-by: NGuenter Roeck <linux@roeck-us.net>
      9aecac04
    • J
      dm: fix casting bug in dm_merge_bvec() · 1c220c69
      Joe Thornber 提交于
      dm_merge_bvec() was originally added in f6fccb ("dm: introduce
      merge_bvec_fn").  In that commit a value in sectors is converted to
      bytes using << 9, and then assigned to an int.  This code made
      assumptions about the value of BIO_MAX_SECTORS.
      
      A later commit 148e51 ("dm: improve documentation and code clarity in
      dm_merge_bvec") was meant to have no functional change but it removed
      the use of BIO_MAX_SECTORS in favor of using queue_max_sectors().  At
      this point the cast from sector_t to int resulted in a zero value.  The
      fallout being dm_merge_bvec() would only allow a single page to be added
      to a bio.
      
      This interim fix is minimal for the benefit of stable@ because the more
      comprehensive cleanup of passing a sector_t to all DM targets' merge
      function will impact quite a few DM targets.
      Signed-off-by: NJoe Thornber <ejt@redhat.com>
      Signed-off-by: NMike Snitzer <snitzer@redhat.com>
      Cc: stable@vger.kernel.org # 3.19+
      1c220c69
    • J
      dm: fix reload failure of 0 path multipath mapping on blk-mq devices · 15b94a69
      Junichi Nomura 提交于
      dm-multipath accepts 0 path mapping.
      
        # echo '0 2097152 multipath 0 0 0 0' | dmsetup create newdev
      
      Such a mapping can be used to release underlying devices while still
      holding requests in its queue until working paths come back.
      
      However, once the multipath device is created over blk-mq devices,
      it rejects reloading of 0 path mapping:
      
        # echo '0 2097152 multipath 0 0 1 1 queue-length 0 1 1 /dev/sda 1' \
            | dmsetup create mpath1
        # echo '0 2097152 multipath 0 0 0 0' | dmsetup load mpath1
        device-mapper: reload ioctl on mpath1 failed: Invalid argument
        Command failed
      
      With following kernel message:
        device-mapper: ioctl: can't change device type after initial table load.
      
      DM tries to inherit the current table type using dm_table_set_type()
      but it doesn't work as expected because of unnecessary check about
      whether the target type is hybrid or not.
      
      Hybrid type is for targets that work as either request-based or bio-based
      and not required for blk-mq or non blk-mq checking.
      
      Fixes: 65803c20 ("dm table: train hybrid target type detection to select blk-mq if appropriate")
      Signed-off-by: NJun'ichi Nomura <j-nomura@ce.jp.nec.com>
      Signed-off-by: NMike Snitzer <snitzer@redhat.com>
      15b94a69
  6. 29 5月, 2015 5 次提交
  7. 28 5月, 2015 15 次提交
    • C
      drm/radeon: partially revert "fix VM_CONTEXT*_PAGE_TABLE_END_ADDR handling" · 7c0411d2
      Christian König 提交于
      We have that bug for years and some users report side effects when fixing it on older hardware.
      
      So revert it for VM_CONTEXT0_PAGE_TABLE_END_ADDR, but keep it for VM 1-15.
      Signed-off-by: NChristian König <christian.koenig@amd.com>
      CC: stable@vger.kernel.org
      Signed-off-by: NAlex Deucher <alexander.deucher@amd.com>
      7c0411d2
    • A
      brcmfmac: avoid null pointer access when brcmf_msgbuf_get_pktid() fails · 7d072b40
      Arend van Spriel 提交于
      The function brcmf_msgbuf_get_pktid() may return a NULL pointer so
      the callers should check the return pointer before accessing it to
      avoid the crash below (see [1]):
      
      brcmfmac: brcmf_msgbuf_get_pktid: Invalid packet id 273 (not in use)
      BUG: unable to handle kernel NULL pointer dereference at 0000000000000080
      IP: [<ffffffff8145b225>] skb_pull+0x5/0x50
      PGD 0
      Oops: 0000 [#1] PREEMPT SMP
      Modules linked in: pci_stub vboxpci(O) vboxnetflt(O) vboxnetadp(O) vboxdrv(O)
       snd_hda_codec_hdmi bnep mousedev hid_generic ushwmon msr ext4 crc16 mbcache
       jbd2 sd_mod uas usb_storage ahci libahci libata scsi_mod xhci_pci xhci_hcd
       usbcore usb_common
      CPU: 0 PID: 1661 Comm: irq/61-brcmf_pc Tainted: G O    4.0.1-MacbookPro-ARCH #1
      Hardware name: Apple Inc. MacBookPro12,1/Mac-E43C1C25D4880AD6,
       BIOS MBP121.88Z.0167.B02.1503241251 03/24/2015
      task: ffff880264203cc0 ti: ffff88025ffe4000 task.ti: ffff88025ffe4000
      RIP: 0010:[<ffffffff8145b225>]  [<ffffffff8145b225>] skb_pull+0x5/0x50
      RSP: 0018:ffff88025ffe7d40  EFLAGS: 00010202
      RAX: 0000000000000000 RBX: ffff88008a33c000 RCX: 0000000000000044
      RDX: 0000000000000000 RSI: 000000000000004a RDI: 0000000000000000
      RBP: ffff88025ffe7da8 R08: 0000000000000096 R09: 000000000000004a
      R10: 0000000000000000 R11: 000000000000048e R12: ffff88025ff14f00
      R13: 0000000000000000 R14: ffff880263b48200 R15: ffff88008a33c000
      FS:  0000000000000000(0000) GS:ffff88026ec00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000080 CR3: 000000000180b000 CR4: 00000000003407f0
      Stack:
       ffffffffa06aed74 ffff88025ffe7dc8 ffff880263b48270 ffff880263b48278
       05ea88020000004a 0002ffff81014635 000000001720b2f6 ffff88026ec116c0
       ffff880263b48200 0000000000010000 ffff880263b4ae00 ffff880264203cc0
      Call Trace:
       [<ffffffffa06aed74>] ? brcmf_msgbuf_process_rx+0x404/0x480 [brcmfmac]
       [<ffffffff810cea60>] ? irq_finalize_oneshot.part.30+0xf0/0xf0
       [<ffffffffa06afb55>] brcmf_proto_msgbuf_rx_trigger+0x35/0xf0 [brcmfmac]
       [<ffffffffa06baf2a>] brcmf_pcie_isr_thread_v2+0x8a/0x130 [brcmfmac]
       [<ffffffff810cea80>] irq_thread_fn+0x20/0x50
       [<ffffffff810ceddf>] irq_thread+0x13f/0x170
       [<ffffffff810cebf0>] ? wake_threads_waitq+0x30/0x30
       [<ffffffff810ceca0>] ? irq_thread_dtor+0xb0/0xb0
       [<ffffffff81092a08>] kthread+0xd8/0xf0
       [<ffffffff81092930>] ? kthread_create_on_node+0x1c0/0x1c0
       [<ffffffff8156d898>] ret_from_fork+0x58/0x90
       [<ffffffff81092930>] ? kthread_create_on_node+0x1c0/0x1c0
      Code: 01 83 e2 f7 88 50 01 48 83 c4 08 5b 5d f3 c3 0f 1f 80 00 00 00 00 83 e2
       f7 88 50 01 c3 66 0f 1f 84 00 00 00 00 00 0f 1f
      RIP  [<ffffffff8145b225>] skb_pull+0x5/0x50
       RSP <ffff88025ffe7d40>
      CR2: 0000000000000080
      ---[ end trace b074c0f90e7c997d ]---
      
      [1] http://mid.gmane.org/20150430193259.GA5630@googlemail.com
      
      Cc: <stable@vger.kernel.org> # v3.18, v3.19, v4.0, v4.1
      Reported-by: NMichael Hornung <mhornung.linux@gmail.com>
      Reviewed-by: NHante Meuleman <meuleman@broadcom.com>
      Reviewed-by: NPieter-Paul Giesberts <pieterpg@broadcom.com>
      Signed-off-by: NArend van Spriel <arend@broadcom.com>
      Signed-off-by: NKalle Valo <kvalo@codeaurora.org>
      7d072b40
    • L
      iwlwifi: nvm: fix otp parsing in 8000 hw family · f115fdfd
      Liad Kaufman 提交于
      The radio cfg DWORD was taken from the wrong place in the
      8000 HW family, after a line in the code was wrongly changed
      by mistake. This broke several 8260 devices.
      
      Fixes: 5dd9c68a ("iwlwifi: drop support for early versions of 8000")
      Signed-off-by: NLiad Kaufman <liad.kaufman@intel.com>
      Reviewed-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      f115fdfd
    • I
      iwlwifi: pcie: fix tracking of cmd_in_flight · fc8a350d
      Ilan Peer 提交于
      The cmd_in_flight tracking was introduced to workaround faulty
      power management hardware, by having the driver keep the NIC
      awake as long as there are commands in flight. However, some of
      the code handling this workaround was unconditionally executed,
      which resulted with an inconsistent state where the driver assumed
      that the NIC was awake although it wasn't.
      
      Fix this by renaming 'cmd_in_flight' to 'cmd_hold_nic_awake' and
      handling the NIC requested awake state only for hardwares for
      which the workaround is needed.
      Signed-off-by: NIlan Peer <ilan.peer@intel.com>
      Signed-off-by: NEmmanuel Grumbach <emmanuel.grumbach@intel.com>
      fc8a350d
    • N
      md: fix race when unfreezing sync_action · 56ccc112
      NeilBrown 提交于
      A recent change removed the need for locking around writing
      to "sync_action" (and various other places), but introduced a
      subtle race.
      When e.g. setting 'reshape' on a 'frozen' array, the 'frozen'
      flag is cleared before 'reshape' is set, so the md thread can
      get in and start trying recovery - which isn't wanted.
      
      So instead of clearing MD_RECOVERY_FROZEN for any command
      except 'frozen', only clear it when each specific command
      is parsed.  This allows the handling of 'reshape' to clear
      the bit while a lock is held.
      
      Also remove some places where we set MD_RECOVERY_NEEDED,
      as it is always set on non-error exit of the function.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      Fixes: 6791875e ("md: make reconfig_mutex optional for writes to md sysfs files.")
      56ccc112
    • N
      md/raid5: break stripe-batches when the array has failed. · 626f2092
      NeilBrown 提交于
      Once the array has too much failure, we need to break
      stripe-batches up so they can all be dealt with.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      626f2092
    • N
      md/raid5: call break_stripe_batch_list from handle_stripe_clean_event · 787b76fa
      NeilBrown 提交于
      Now that the code in break_stripe_batch_list() is nearly identical
      to the end of handle_stripe_clean_event, replace the later
      with a function call.
      
      The only remaining difference of any interest is the masking that is
      applieds to dev[i].flags copied from head_sh.
      R5_WriteError certainly isn't wanted as it is set per-stripe, not
      per-patch.  R5_Overlap isn't wanted as it is explicitly handled.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      787b76fa
    • N
      md/raid5: be more selective about distributing flags across batch. · 1b956f7a
      NeilBrown 提交于
      When a batch of stripes is broken up, we keep some of the flags
      that were per-stripe, and copy other flags from the head to all
      others.
      
      This only happens while a stripe is being handled, so many of the
      flags are irrelevant.
      
      The "SYNC_FLAGS" (which I've renamed to make it clear there are
      several) and STRIPE_DEGRADED are set per-stripe and so need to be
      preserved.  STRIPE_INSYNC is the only flag that is set on the head
      that needs to be propagated to all others.
      
      For safety, add a WARN_ON if others are set, except:
       STRIPE_HANDLE - this is safe and per-stripe and we are going to set
            in several cases anyway
       STRIPE_INSYNC
       STRIPE_IO_STARTED - this is just a hint and doesn't hurt.
       STRIPE_ON_PLUG_LIST
       STRIPE_ON_RELEASE_LIST - It is a point pointless for a batched
                 stripe to be on one of these lists, but it can happen
                 as can be safely ignored.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      1b956f7a
    • N
      md/raid5: add handle_flags arg to break_stripe_batch_list. · 3960ce79
      NeilBrown 提交于
      When we break a stripe_batch_list we sometimes want to set
      STRIPE_HANDLE on the individual stripes, and sometimes not.
      
      So pass a 'handle_flags' arg.  If it is zero, always set STRIPE_HANDLE
      (on non-head stripes).  If not zero, only set it if any of the given
      flags are present.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      3960ce79
    • N
      md/raid5: duplicate some more handle_stripe_clean_event code in break_stripe_batch_list · fb642b92
      NeilBrown 提交于
      break_stripe_batch list didn't clear head_sh->batch_head.
      This was probably a bug.
      
      Also clear all R5_Overlap flags and if any were cleared, wake up
      'wait_for_overlap'.
      This isn't always necessary but the worst effect is a little
      extra checking for code that is waiting on wait_for_overlap.
      
      Also, don't use wake_up_nr() because that does the wrong thing
      if 'nr' is zero, and it number of flags cleared doesn't
      strongly correlate with the number of threads to wake.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      fb642b92
    • N
      md/raid5: remove condition test from check_break_stripe_batch_list. · 4e3d62ff
      NeilBrown 提交于
      handle_stripe_clean_event() contains a chunk of code very
      similar to check_break_stripe_batch_list().
      If we make the latter more like the former, we can end up
      with just one copy of this code.
      
      This  first step removed the condition (and the 'check_') part
      of the name.  This has the added advantage of making it clear
      what check is being performed at the point where the function is
      called.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      4e3d62ff
    • N
      md/raid5: Ensure a batch member is not handled prematurely. · b15a9dbd
      NeilBrown 提交于
      If a stripe is a member of a batch, but not the head, it must
      not be handled separately from the rest of the batch.
      
      'clear_batch_ready()' handles this requirement to some
      extent but not completely.  If a member is passed to handle_stripe()
      a second time it returns '0' indicating the stripe can be handled,
      which is wrong.
      So add an extra test.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      b15a9dbd
    • R
      cpumask_set_cpu_local_first => cpumask_local_spread, lament · f36963c9
      Rusty Russell 提交于
      da91309e (cpumask: Utility function to set n'th cpu...) created a
      genuinely weird function.  I never saw it before, it went through DaveM.
      (He only does this to make us other maintainers feel better about our own
      mistakes.)
      
      cpumask_set_cpu_local_first's purpose is say "I need to spread things
      across N online cpus, choose the ones on this numa node first"; you call
      it in a loop.
      
      It can fail.  One of the two callers ignores this, the other aborts and
      fails the device open.
      
      It can fail in two ways: allocating the off-stack cpumask, or through a
      convoluted codepath which AFAICT can only occur if cpu_online_mask
      changes.  Which shouldn't happen, because if cpu_online_mask can change
      while you call this, it could return a now-offline cpu anyway.
      
      It contains a nonsensical test "!cpumask_of_node(numa_node)".  This was
      drawn to my attention by Geert, who said this causes a warning on Sparc.
      It sets a single bit in a cpumask instead of returning a cpu number,
      because that's what the callers want.
      
      It could be made more efficient by passing the previous cpu rather than
      an index, but that would be more invasive to the callers.
      
      Fixes: da91309e
      Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (then rebased)
      Tested-by: NAmir Vadai <amirv@mellanox.com>
      Acked-by: NAmir Vadai <amirv@mellanox.com>
      Acked-by: NDavid S. Miller <davem@davemloft.net>
      f36963c9
    • N
      md/raid5: close race between STRIPE_BIT_DELAY and batching. · d0852df5
      NeilBrown 提交于
      When we add a write to a stripe we need to make sure the bitmap
      bit is set.  While doing that the stripe is not locked so it could
      be added to a batch after which further changes to STRIPE_BIT_DELAY
      and ->bm_seq are ineffective.
      
      So we need to hold off adding to a stripe until bitmap_startwrite has
      completed at least once, and we need to avoid further changes to
      STRIPE_BIT_DELAY once the stripe has been added to a batch.
      
      If a bitmap_startwrite() completes after the stripe was added to a
      batch, it will not have set the bit, only incremented a counter, so no
      extra delay of the stripe is needed.
      Reported-by: NShaohua Li <shli@kernel.org>
      Signed-off-by: NNeilBrown <neilb@suse.de>
      d0852df5
    • N
      md/raid5: ensure whole batch is delayed for all required bitmap updates. · 2b6b2457
      NeilBrown 提交于
      When we add a stripe to a batch, we need to be sure that
      head stripe will wait for the bitmap update required for the new
      stripe.
      Signed-off-by: NNeilBrown <neilb@suse.de>
      2b6b2457