1. 11 Jun, 2009 15 commits
    • Arnd Bergmann's avatar
      asm-generic: add a generic uaccess.h · eed417dd
      Arnd Bergmann authored
      
      
      Based on discussions with Michal Simek and code
      from m68knommu and h8300, this version of uaccess.h
      should be usable by most architectures, by overriding
      some parts of it.
      
      Simple NOMMU architectures can use it out of
      the box, but a minimal __access_ok() should be
      added there as well.
      
      Cc: Michal Simek <monstr@monstr.eu>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      eed417dd
    • Arnd Bergmann's avatar
      asm-generic: add generic NOMMU versions of some headers · 5c01b46b
      Arnd Bergmann authored
      
      
      Memory management in generic is highly architecture specific,
      but on NOMMU architectures, it is mostly trivial, so just
      add a default implementation in asm-generic that applies
      to all NOMMU architectures.
      
      The two files cache.h and cacheflush.h can possibly also
      be used by architectures that have an MMU but never require
      flushing the cache or have cache lines larger than 32 bytes.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      5c01b46b
    • Arnd Bergmann's avatar
      asm-generic: add generic atomic.h and io.h · 3f7e212d
      Arnd Bergmann authored
      
      
      atomic.h and io.h are based on the mn10300 architecture,
      which is already pretty generic and can be used by
      other architectures that do not have hardware support
      for atomic operations or out-of-order I/O access.
      
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      3f7e212d
    • Arnd Bergmann's avatar
      asm-generic: add legacy I/O header files · ae49e807
      Arnd Bergmann authored
      
      
      The dma.h, hw_irq.h, serial.h and timex.h files originally
      described PC-style i8237, i8259A, i8250, i8253 and i8255 chips
      as well as the VGA style text mode graphics.
      
      Modern architectures live happily without these specific
      interfaces, but a few definitions from these headers keep
      getting used in common code.
      
      The new generic headers are what most architectures use
      anyway nowadays, just implementing the minimal definitions.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      ae49e807
    • Arnd Bergmann's avatar
      asm-generic: add generic versions of common headers · aafe4dbe
      Arnd Bergmann authored
      
      
      These are all kernel internal interfaces that get copied
      around a lot. In most cases, architectures can provide
      their own optimized versions, but these generic versions
      can work as well.
      
      I have tried to use the most common contents of each
      header to allow existing architectures to migrate easily.
      
      Thanks to Remis for suggesting a number of cleanups.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      aafe4dbe
    • Arnd Bergmann's avatar
      asm-generic: make bitops.h usable · 9858c60c
      Arnd Bergmann authored
      
      
      bitops.h apparently suffered from some level of bitrot, it
      was missing the smp_mb__{before,after}_clear_bit functions,
      and included other headers in an invalid order.
      
      This changes the file so that new architectures can use
      it out of the box.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      9858c60c
    • Arnd Bergmann's avatar
      asm-generic: make pci.h usable directly · d7c4f1b7
      Arnd Bergmann authored
      
      
      Some generic code is using the horribly misnamed PCI_DMA_BUS_IS_PHYS
      from asm/pci.h. This makes sure that an architecture without PCI
      support does not have to define this itself but can rely on the
      asm-generic version.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      d7c4f1b7
    • Arnd Bergmann's avatar
      asm-generic: make get_rtc_time overridable · 3aef3928
      Arnd Bergmann authored
      
      
      Evidently, set_rtc_time is supposed to be overridable
      by architectures that define their own version, but
      unfortunately, get_rtc_ss would in that case still
      use the generic version.
      
      This makes get_rtc_ss call the real set_rtc_time
      to let architectures define their own version.
      The change should fix the "Extended RTC operation"
      on Alpha, which uses the incorrect get_rtc_ss
      call. It also allows PowerPC to use the asm-generic/rtc.h
      file in the future.
      
      Cc: Richard Henderson <rth@twiddle.net>
      Cc: linux-alpha@vger.kernel.org
      Cc: Tom Rini <trini@mvista.com>
      Cc: rtc-linux@googlegroups.com
      Cc: Alessandro Zummo <a.zummo@towertech.it>
      Cc: Paul Gortmaker <p_gortmaker@yahoo.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      3aef3928
    • Arnd Bergmann's avatar
      asm-generic: rename page.h and uaccess.h · 5b17e1cd
      Arnd Bergmann authored
      
      
      The current asm-generic/page.h only contains the get_order
      function, and asm-generic/uaccess.h only implements
      unaligned accesses. This renames the file to getorder.h
      and uaccess-unaligned.h to make room for new page.h
      and uaccess.h file that will be usable by all simple
      (e.g. nommu) architectures.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      5b17e1cd
    • Arnd Bergmann's avatar
      asm-generic: rename atomic.h to atomic-long.h · 72099ed2
      Arnd Bergmann authored
      
      
      The existing asm-generic/atomic.h only defines the
      atomic_long type. This renames it to atomic-long.h
      so we have a place to add a truly generic atomic.h
      that can be used on all non-SMP systems.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Acked-by: default avatarIngo Molnar <mingo@elte.hu>
      72099ed2
    • Arnd Bergmann's avatar
      asm-generic: add a generic unistd.h · e64a1617
      Arnd Bergmann authored
      
      
      A new architecture should only define a minimal set of system
      calls while still providing the full functionality. This version
      of unistd.h has gone through intensive review to make sure that
      by default it only enables syscalls that do not already have
      a more featureful replacement.
      
      It is modeled after the x86-64 version of unistd.h, which unifies
      the syscall number definition and the actual system call table
      in a single file, in order to keep them synchronized much more
      easily.
      
      This first version still keeps legacy system call definitions
      around, guarded by various #ifdefs, and with numbers larger
      than 1024. The idea behind this is to make it easier for
      new architectures to transition from a full list to the reduced
      set. In particular, the new microblaze architecture that should
      migrate to using the generic ABI headers can at least use an
      existing uClibc source tree without major rewrites during the
      conversion.
      
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      e64a1617
    • Arnd Bergmann's avatar
      asm-generic: add generic ABI headers · 6103ec56
      Arnd Bergmann authored
      
      
      These header files are typically copied from an existing architecture
      into any new one, slightly modified and then remain untouched until
      the end of time in the name of ABI stability.
      
      To make it easier for future architectures, provide a sane generic
      version here. In cases where multiple architectures already use
      identical code, I used the most common version. In cases like
      stat.h that are more or less broken everywhere, I provide a
      version that is meant to be ideal for new architectures.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      6103ec56
    • Arnd Bergmann's avatar
      asm-generic: add generic sysv ipc headers · 2864d32b
      Arnd Bergmann authored
      
      
      The ipc64 data structures were originally meant to
      be architecture specific so that each architecture
      could add their own optimizations for padding.
      
      In the end, most of them just copied the x86 version,
      and most got that wrong. UClibc expects the x86 anyway,
      so we might just declare that the default and get
      rid of the extra copies.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      2864d32b
    • Arnd Bergmann's avatar
      asm-generic: introduce asm/bitsperlong.h · c31ae4bb
      Arnd Bergmann authored
      
      
      This provides a reliable way for asm-generic/types.h and other
      files to find out if it is running on a 32 or 64 bit platform.
      
      We cannot use CONFIG_64BIT for this in headers that are included
      from user space because CONFIG symbols are not available there.
      We also cannot do it inside of asm/types.h because some headers
      need the word size but cannot include types.h.
      
      The solution is to introduce a new header <asm/bitsperlong.h>
      that defines both __BITS_PER_LONG for user space and
      BITS_PER_LONG for usage in the kernel. The asm-generic
      version falls back to 32 bit unless the architecture overrides
      it, which I did for all 64 bit platforms.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      c31ae4bb
    • Arnd Bergmann's avatar
      asm-generic: rename termios.h, signal.h and mman.h · 63b852a6
      Arnd Bergmann authored
      
      
      The existing asm-generic versions are incomplete and included
      by some architectures. New architectures should be able
      to use a generic version, so rename the existing files and
      change all users, which lets us add the new files.
      
      Signed-off-by: default avatarRemis Lima Baima <remis.developer@googlemail.com>
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      63b852a6
  2. 10 Jun, 2009 2 commits
  3. 09 Jun, 2009 16 commits
    • Jan Kara's avatar
      jbd: fix race in buffer processing in commit code · a61d90d7
      Jan Kara authored
      
      
      In commit code, we scan buffers attached to a transaction.  During this
      scan, we sometimes have to drop j_list_lock and then we recheck whether
      the journal buffer head didn't get freed by journal_try_to_free_buffers().
       But checking for buffer_jbd(bh) isn't enough because a new journal head
      could get attached to our buffer head.  So add a check whether the journal
      head remained the same and whether it's still at the same transaction and
      list.
      
      This is a nasty bug and can cause problems like memory corruption (use after
      free) or trigger various assertions in JBD code (observed).
      
      Signed-off-by: default avatarJan Kara <jack@suse.cz>
      Cc: <stable@kernel.org>
      Cc: <linux-ext4@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      a61d90d7
    • Ian Kent's avatar
      autofs4: remove hashed check in validate_wait() · 463aea1a
      Ian Kent authored
      
      
      The recent ->lookup() deadlock correction required the directory inode
      mutex to be dropped while waiting for expire completion.  We were
      concerned about side effects from this change and one has been identified.
      
      I saw several error messages.
      
      They cause autofs to become quite confused and don't really point to the
      actual problem.
      
      Things like:
      
      handle_packet_missing_direct:1376: can't find map entry for (43,1827932)
      
      which is usually totally fatal (although in this case it wouldn't be
      except that I treat is as such because it normally is).
      
      do_mount_direct: direct trigger not valid or already mounted
      /test/nested/g3c/s1/ss1
      
      which is recoverable, however if this problem is at play it can cause
      autofs to become quite confused as to the dependencies in the mount tree
      because mount triggers end up mounted multiple times.  It's hard to
      accurately check for this over mounting case and automount shouldn't need
      to if the kernel module is doing its job.
      
      There was one other message, similar in consequence of this last one but I
      can't locate a log example just now.
      
      When checking if a mount has already completed prior to adding a new mount
      request to the wait queue we check if the dentry is hashed and, if so, if
      it is a mount point.  But, if a mount successfully completed while we
      slept on the wait queue mutex the dentry must exist for the mount to have
      completed so the test is not really needed.
      
      Mounts can also be done on top of a global root dentry, so for the above
      case, where a mount request completes and the wait queue entry has already
      been removed, the hashed test returning false can cause an incorrect
      callback to the daemon.  Also, d_mountpoint() is not sufficient to check
      if a mount has completed for the multi-mount case when we don't have a
      real mount at the base of the tree.
      
      Signed-off-by: default avatarIan Kent <raven@themaw.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      463aea1a
    • Mike Frysinger's avatar
      shm: fix unused warnings on nommu · 586c7e6a
      Mike Frysinger authored
      The massive nommu update (8feae131
      
      ) resulted in these warnings:
      ipc/shm.c: In function `sys_shmdt':
      ipc/shm.c:974: warning: unused variable `size'
      ipc/shm.c:972: warning: unused variable `next'
      
      Signed-off-by: default avatarMike Frysinger <vapier@gentoo.org>
      Cc: David Howells <dhowells@redhat.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      586c7e6a
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus · 13df635f
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux-2.6-for-linus:
        kvm: fix kvm reboot crash when MAXSMP is used
        cpumask: alloc zeroed cpumask for static cpumask_var_ts
        cpumask: introduce zalloc_cpumask_var
      13df635f
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block · 9cdba302
      Linus Torvalds authored
      * 'for-linus' of git://git.kernel.dk/linux-2.6-block:
        bsg: setting rq->bio to NULL
      9cdba302
    • Linus Torvalds's avatar
      Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6 · fd4d3429
      Linus Torvalds authored
      * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
        cls_cgroup: Fix oops when user send improperly 'tc filter add' request
        r8169: fix crash when large packets are received
      fd4d3429
    • Linus Torvalds's avatar
      Merge branch 'for-linus' of git://neil.brown.name/md · 4d11eff6
      Linus Torvalds authored
      * 'for-linus' of git://neil.brown.name/md:
        md/raid5: fix bug in reshape code when chunk_size decreases.
        md/raid5 - avoid deadlocks in get_active_stripe during reshape
        md/raid5: use conf->raid_disks in preference to mddev->raid_disk
      4d11eff6
    • FUJITA Tomonori's avatar
      bsg: setting rq->bio to NULL · c1d4c41f
      FUJITA Tomonori authored
      Due to commit 1cd96c24
      
       ("block: WARN
      in __blk_put_request() for potential bio leak"), BSG SMP requests get
      the false warnings:
      
      WARNING: at block/blk-core.c:1068 __blk_put_request+0x52/0xc0()
      
      This sets rq->bio to NULL to avoid that false warnings.
      
      Signed-off-by: default avatarFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
      Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
      c1d4c41f
    • Avi Kivity's avatar
      kvm: fix kvm reboot crash when MAXSMP is used · 8437a617
      Avi Kivity authored
      
      
      one system was found there is crash during reboot then kvm/MAXSMP
      Sending all processes the KILL signal...                              done
      Please stand by while rebooting the system...
      [ 1721.856538] md: stopping all md devices.
      [ 1722.852139] kvm: exiting hardware virtualization
      [ 1722.854601] BUG: unable to handle kernel NULL pointer dereference at (null)
      [ 1722.872219] IP: [<ffffffff8102c6b6>] hardware_disable+0x4c/0xb4
      [ 1722.877955] PGD 0
      [ 1722.880042] Oops: 0000 [#1] SMP
      [ 1722.892548] last sysfs file: /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/host0/target0:2:0/0:2:0:0/vendor
      [ 1722.900977] CPU 9
      [ 1722.912606] Modules linked in:
      [ 1722.914226] Pid: 0, comm: swapper Not tainted 2.6.30-rc7-tip-01843-g2305324-dirty #299 ...
      [ 1722.932589] RIP: 0010:[<ffffffff8102c6b6>]  [<ffffffff8102c6b6>] hardware_disable+0x4c/0xb4
      [ 1722.942709] RSP: 0018:ffffc900010b6ed8  EFLAGS: 00010046
      [ 1722.956121] RAX: 0000000000000000 RBX: ffffc9000e253140 RCX: 0000000000000009
      [ 1722.972202] RDX: 000000000000b020 RSI: ffffc900010c3220 RDI: ffffffffffffd790
      [ 1722.977399] RBP: ffffc900010b6f08 R08: 0000000000000000 R09: 0000000000000000
      [ 1722.995149] R10: 00000000000004b8 R11: 966912b6c78fddbd R12: 0000000000000009
      [ 1723.011551] R13: 000000000000b020 R14: 0000000000000009 R15: 0000000000000000
      [ 1723.019898] FS:  0000000000000000(0000) GS:ffffc900010b3000(0000) knlGS:0000000000000000
      [ 1723.034389] CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
      [ 1723.041164] CR2: 0000000000000000 CR3: 0000000001001000 CR4: 00000000000006e0
      [ 1723.056192] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [ 1723.072546] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
      [ 1723.080562] Process swapper (pid: 0, threadinfo ffff88107e464000, task ffff88047e5a2550)
      [ 1723.096144] Stack:
      [ 1723.099071]  0000000000000046 ffffc9000e253168 966912b6c78fddbd ffffc9000e253140
      [ 1723.115471]  ffff880c7d4304d0 ffffc9000e253168 ffffc900010b6f28 ffffffff81011022
      [ 1723.132428]  ffffc900010b6f48 966912b6c78fddbd ffffc900010b6f48 ffffffff8100b83b
      [ 1723.141973] Call Trace:
      [ 1723.142981]  <IRQ> <0> [<ffffffff81011022>] kvm_arch_hardware_disable+0x26/0x3c
      [ 1723.158153]  [<ffffffff8100b83b>] hardware_disable+0x3f/0x55
      [ 1723.172168]  [<ffffffff810b95f6>] generic_smp_call_function_interrupt+0x76/0x13c
      [ 1723.178836]  [<ffffffff8104cbea>] smp_call_function_interrupt+0x3a/0x5e
      [ 1723.194689]  [<ffffffff81035bf3>] call_function_interrupt+0x13/0x20
      [ 1723.199750]  <EOI> <0> [<ffffffff814ad3b4>] ? acpi_idle_enter_c1+0xd3/0xf4
      [ 1723.217508]  [<ffffffff814ad3ae>] ? acpi_idle_enter_c1+0xcd/0xf4
      [ 1723.232172]  [<ffffffff814ad4bc>] ? acpi_idle_enter_bm+0xe7/0x2ce
      [ 1723.235141]  [<ffffffff81a8d93f>] ? __atomic_notifier_call_chain+0x0/0xac
      [ 1723.253381]  [<ffffffff818c3dff>] ? menu_select+0x58/0xd2
      [ 1723.258179]  [<ffffffff818c2c9d>] ? cpuidle_idle_call+0xa4/0xf3
      [ 1723.272828]  [<ffffffff81034085>] ? cpu_idle+0xb8/0x101
      [ 1723.277085]  [<ffffffff81a80163>] ? start_secondary+0x1bc/0x1d7
      [ 1723.293708] Code: b0 00 00 65 48 8b 04 25 28 00 00 00 48 89 45 e0 31 c0 48 8b 04 cd 30 ee 27 82 49 89 cc 49 89 d5 48 8b 04 10 48 8d b8 90 d7 ff ff <48> 8b 87 70 28 00 00 48 8d 98 90 d7 ff ff eb 16 e8 e9 fe ff ff
      [ 1723.335524] RIP  [<ffffffff8102c6b6>] hardware_disable+0x4c/0xb4
      [ 1723.342076]  RSP <ffffc900010b6ed8>
      [ 1723.352021] CR2: 0000000000000000
      [ 1723.354348] ---[ end trace e2aec53dae150aa1 ]---
      
      it turns out that we need clear cpus_hardware_enabled in that case.
      
      Reported-and-tested-by: default avatarYinghai Lu <yinghai@kernel.org>
      Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
      Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
      8437a617
    • Yinghai Lu's avatar
      cpumask: alloc zeroed cpumask for static cpumask_var_ts · eaa95840
      Yinghai Lu authored
      
      
      These are defined as static cpumask_var_t so if MAXSMP is not used,
      they are cleared already.  Avoid surprises when MAXSMP is enabled.
      
      Signed-off-by: default avatarYinghai Lu <yinghai.lu@kernel.org>
      Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
      eaa95840
    • Yinghai Lu's avatar
      cpumask: introduce zalloc_cpumask_var · 0281b5dc
      Yinghai Lu authored
      
      
      So can get cpumask_var with cpumask_clear
      
      Signed-off-by: default avatarYinghai Lu <yinghai@kernel.org>
      Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
      0281b5dc
    • Minoru Usui's avatar
      cls_cgroup: Fix oops when user send improperly 'tc filter add' request · 52ea3a56
      Minoru Usui authored
      I found a bug in cls_cgroup_change() in cls_cgroup.c.
      cls_cgroup_change() expected tca[TCA_OPTIONS] was set from user space properly,
      but tc in iproute2-2.6.29-1 (which I used) didn't set it.
      
      In the current source code of tc in git, it set tca[TCA_OPTIONS].
      
        git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git
      
      
      
      If we always use a newest iproute2 in git when we use cls_cgroup, 
      we don't face this oops probably.
      But I think, kernel shouldn't panic regardless of use program's behaviour. 
      
      Signed-off-by: default avatarMinoru Usui <usui@mxm.nes.nec.co.jp>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      52ea3a56
    • Eric Dumazet's avatar
      r8169: fix crash when large packets are received · fdd7b4c3
      Eric Dumazet authored
      Michael Tokarev reported receiving a large packet could crash
      a machine with RTL8169 NIC.
      ( original thread at http://lkml.org/lkml/2009/6/8/192
      
       )
      
      Problem is this driver tells that NIC frames up to 16383 bytes
      can be received but provides skb to rx ring allocated with
      smaller sizes (1536 bytes in case standard 1500 bytes MTU is used)
      
      When a frame larger than what was allocated by driver is received,
      dma transfert can occurs past the end of buffer and corrupt
      kernel memory.
      
      Fix is to tell to NIC what is the maximum size a frame can be.
      
      This bug is very old, (before git introduction, linux-2.6.10), and 
      should be backported to stable versions.
      
      Reported-by: default avatarMichael Tokarev <mjt@tls.msk.ru>
      Signed-off-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
      Tested-by: default avatarMichael Tokarev <mjt@tls.msk.ru>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      fdd7b4c3
    • NeilBrown's avatar
      md/raid5: fix bug in reshape code when chunk_size decreases. · 0e6e0271
      NeilBrown authored
      
      
      Now that we support changing the chunksize, we calculate
      "reshape_sectors" to be the max of number of sectors in old
      and new chunk size.
      However there is one please where we still use 'chunksize'
      rather than 'reshape_sectors'.
      This causes a reshape that reduces the size of chunks to freeze.
      
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      0e6e0271
    • NeilBrown's avatar
      md/raid5 - avoid deadlocks in get_active_stripe during reshape · a8c906ca
      NeilBrown authored
      
      
      md has functionality to 'quiesce' and array so that all pending
      IO completed and no new IO starts.  This is used to achieve a
      stable state before making internal changes.
      
      Currently this quiescing applies equally to normal IO, resync
      IO, and reshape IO.
      However there is a problem with applying it to reshape IO.
      Reshape can have multiple 'stripe_heads' that must be active together.
      If the quiesce come between allocating the first and the last of
      such a collection, then we deadlock, as the last will not be allocated
      until the quiesce is lifted, the quiesce will not be lifted until the
      first (which has been allocated) gets used, and that first cannot be
      used until the last is allocated.
      
      It is not necessary to inhibit reshape IO when a quiesce is
      requested.  Those places in the code that require a full quiesce will
      ensure the reshape thread is not running at all.
      
      So allow reshape requests to get access to new stripe_heads without
      being blocked by a 'quiesce'.
      
      This only affects in-place reshapes (i.e. where the array does not
      grow or shrink) and these are only newly supported.  So this patch is
      not needed in earlier kernels.
      
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      a8c906ca
    • NeilBrown's avatar
      md/raid5: use conf->raid_disks in preference to mddev->raid_disk · f001a70c
      NeilBrown authored
      
      
      mddev->raid_disks can be changed and any time by a request from
      user-space.  It is a suggestion as to what number of raid_disks is
      desired.
      
      conf->raid_disks can only be changed by the raid5 module with suitable
      locks in place.  It is a statement as to the current number of
      raid_disks.
      
      There are two places where the latter should be used, but the former
      is used.  This can lead to a crash when reshaping an array.
      
      This patch changes to mddev-> to conf->
      
      Signed-off-by: default avatarNeilBrown <neilb@suse.de>
      f001a70c
  4. 08 Jun, 2009 7 commits