09 Feb, 2008

9 commits


08 Feb, 2008

31 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-2.6-dm: (44 commits)
    dm raid1: report fault status
    dm raid1: handle read failures
    dm raid1: fix EIO after log failure
    dm raid1: handle recovery failures
    dm raid1: handle write failures
    dm snapshot: combine consecutive exceptions in memory
    dm: stripe enhanced status return
    dm: stripe trigger event on failure
    dm log: auto load modules
    dm: move deferred bio flushing to workqueue
    dm crypt: use async crypto
    dm crypt: prepare async callback fn
    dm crypt: add completion for async
    dm crypt: add async request mempool
    dm crypt: extract scatterlist processing
    dm crypt: tidy io ref counting
    dm crypt: introduce crypt_write_io_loop
    dm crypt: abstract crypt_write_done
    dm crypt: store sector mapping in dm_crypt_io
    dm crypt: move queue functions
    ...

    Linus Torvalds
     
  • * 'release' of git://lm-sensors.org/kernel/mhoffman/hwmon-2.6: (59 commits)
    hwmon: (lm80) Add individual alarm files
    hwmon: (lm80) De-macro the sysfs callbacks
    hwmon: (lm80) Various cleanups
    hwmon: (w83627hf) Refactor beep enable handling
    hwmon: (w83627hf) Add individual alarm and beep files
    hwmon: (w83627hf) Enable VBAT monitoring
    hwmon: (w83627ehf) The W83627DHG has 8 VID pins
    hwmon: (asb100) Add individual alarm files
    hwmon: (asb100) De-macro the sysfs callbacks
    hwmon: (asb100) Various cleanups
    hwmon: VRM is not written to registers
    hwmon: (dme1737) fix Super-IO device ID override
    hwmon: (dme1737) fix divide-by-0
    hwmon: (abituguru3) Add AUX4 fan input for Abit IP35 Pro
    hwmon: Add support for Texas Instruments/Burr-Brown ADS7828
    hwmon: (adm9240) Add individual alarm files
    hwmon: (lm77) Add individual alarm files
    hwmon: Discard useless I2C driver IDs
    hwmon: (lm85) Make the pwmN_enable files writable
    hwmon: (lm85) Return standard values in pwmN_enable
    ...

    Linus Torvalds
     
  • * 'for-linus' of git://oss.sgi.com:8090/xfs/xfs-2.6: (62 commits)
    [XFS] add __init/__exit mark to specific init/cleanup functions
    [XFS] Fix oops in xfs_file_readdir()
    [XFS] kill xfs_root
    [XFS] keep i_nlink updated and use proper accessors
    [XFS] stop updating inode->i_blocks
    [XFS] Make xfs_ail_check check less by default
    [XFS] Move AIL pushing into it's own thread
    [XFS] use generic_permission
    [XFS] stop re-checking permissions in xfs_swapext
    [XFS] clean up xfs_swapext
    [XFS] remove permission check from xfs_change_file_space
    [XFS] prevent panic during log recovery due to bogus op_hdr length
    [XFS] Cleanup various fid related bits:
    [XFS] Fix xfs_lowbit64
    [XFS] Remove CFORK macros and use code directly in IFORK and DFORK macros.
    [XFS] kill superflous buffer locking (2nd attempt)
    [XFS] Use kernel-supplied "roundup_pow_of_two" for simplicity
    [XFS] Remove the BPCSHIFT and NB* based macros from XFS.
    [XFS] Remove bogus assert
    [XFS] optimize XFS_IS_REALTIME_INODE w/o realtime config
    ...

    Linus Torvalds
     
  • Signed-off-by: Nick Piggin
    Cc: Douglas Gilbert
    Cc: James Bottomley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     
  • * 'slub-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/christoph/vm:
    SLUB: fix checkpatch warnings
    Use non atomic unlock
    SLUB: Support for performance statistics
    SLUB: Alternate fast paths using cmpxchg_local
    SLUB: Use unique end pointer for each slab page.
    SLUB: Deal with annoying gcc warning on kfree()

    Linus Torvalds
     
  • This patch adds extra information to the mirror status output, so that
    it can be determined which device(s) have failed. For each mirror device,
    a character is printed indicating the most severe error encountered. The
    characters are:
    * A => Alive - No failures
    * D => Dead - A write failure occurred leaving mirror out-of-sync
    * S => Sync - A sychronization failure occurred, mirror out-of-sync
    * R => Read - A read failure occurred, mirror data unaffected
    This allows userspace to properly reconfigure the mirror set.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     
  • This patch gives the ability to respond-to/record device failures
    that happen during read operations. It also adds the ability to
    read from mirror devices that are not the primary if they are
    in-sync.

    There are essentially two read paths in mirroring; the direct path
    and the queued path. When a read request is mapped, if the region
    is 'in-sync' the direct path is taken; otherwise the queued path
    is taken.

    If the direct path is taken, we must record bio information so that
    if the read fails we can retry it. We then discover the status of
    a direct read through mirror_end_io. If the read has failed, we will
    mark the device from which the read was attempted as failed (so we
    don't try to read from it again), restore the bio and try again.

    If the queued path is taken, we discover the results of the read
    from 'read_callback'. If the device failed, we will mark the device
    as failed and attempt the read again if there is another device
    where this region is known to be 'in-sync'.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     
  • This patch adds the ability to requeue write I/O to
    core device-mapper when there is a log device failure.

    If a write to the log produces and error, the pending writes are
    put on the "failures" list. Since the log is marked as failed,
    they will stay on the failures list until a suspend happens.

    Suspends come in two phases, presuspend and postsuspend. We must
    make sure that all the writes on the failures list are requeued
    in the presuspend phase (a requirement of dm core). This means
    that recovery must be complete (because writes may be delayed
    behind it) and the failures list must be requeued before we
    return from presuspend.

    The mechanisms to ensure recovery is complete (or stopped) was
    already in place, but needed to be moved from postsuspend to
    presuspend. We rely on 'flush_workqueue' to ensure that the
    mirror thread is complete and therefore, has requeued all writes
    in the failures list.

    Because we are using flush_workqueue, we must ensure that no
    additional 'queue_work' calls will produce additional I/O
    that we need to requeue (because once we return from
    presuspend, we are unable to do anything about it). 'queue_work'
    is called in response to the following functions:
    - complete_resync_work = NA, recovery is stopped
    - rh_dec (mirror_end_io) = NA, only calls 'queue_work' if it
    is ready to recover the region
    (recovery is stopped) or it needs
    to clear the region in the log*
    **this doesn't get called while
    suspending**
    - rh_recovery_end = NA, recovery is stopped
    - rh_recovery_start = NA, recovery is stopped
    - write_callback = 1) Writes w/o failures simply call
    bio_endio -> mirror_end_io -> rh_dec
    (see rh_dec above)
    2) Writes with failures are put on
    the failures list and queue_work is
    called**
    ** write_callbacks don't happen
    during suspend **
    - do_failures = NA, 'queue_work' not called if suspending
    - add_mirror (initialization) = NA, only done on mirror creation
    - queue_bio = NA, 1) delayed I/O scheduled before flush_workqueue
    is called. 2) No more I/Os are being issued.
    3) Re-attempted READs can still be handled.
    (Write completions are handled through rh_dec/
    write_callback - mention above - and do not
    use queue_bio.)

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     
  • This patch adds the calls to 'fail_mirror' if an error occurs during
    mirror recovery (aka resynchronization). 'fail_mirror' is responsible
    for recording the type of error by mirror device and ensuring an event
    gets raised for the purpose of notifying userspace.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     
  • This patch gives mirror the ability to handle device failures
    during normal write operations.

    The 'write_callback' function is called when a write completes.
    If all the writes failed or succeeded, we report failure or
    success respectively. If some of the writes failed, we call
    fail_mirror; which increments the error count for the device, notes
    the type of error encountered (DM_RAID1_WRITE_ERROR), and
    selects a new primary (if necessary). Note that the primary
    device can never change while the mirror is not in-sync (IOW,
    while recovery is happening.) This means that the scenario
    where a failed write changes the primary and gives
    recovery_complete a chance to misread the primary never happens.
    The fact that the primary can change has necessitated the change
    to the default_mirror field. We need to protect against reading
    garbage while the primary changes. We then add the bio to a new
    list in the mirror set, 'failures'. For every bio in the 'failures'
    list, we call a new function, '__bio_mark_nosync', where we mark
    the region 'not-in-sync' in the log and properly set the region
    state as, RH_NOSYNC. Userspace must also be notified of the
    failure. This is done by 'raising an event' (dm_table_event()).
    If fail_mirror is called in process context the event can be raised
    right away. If in interrupt context, the event is deferred to the
    kmirrord thread - which raises the event if 'event_waiting' is set.

    Backwards compatibility is maintained by ignoring errors if
    the DM_FEATURES_HANDLE_ERRORS flag is not present.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     
  • Provided sector_t is 64 bits, reduce the in-memory footprint of the
    snapshot exception table by the simple method of using unused bits of
    the chunk number to combine consecutive entries.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • This patch adds additional information to the status line. It is added at the
    end of the returned text so it will not interfere with existing
    implementations using this data. The addition of this information will allow
    for a common return interface to match that returned with the dm-raid1.c
    status line (with Jonathan Brassow's patches).

    Here is a sample of what is returned with a mirror "status" call:
    isw_eeaaabgfg_mirror: 0 488390920 mirror 2 8:16 8:32 3727/3727 1 AA 1 core

    Here's what's returned with this patch for a stripe "status" call:
    isw_dheeijjdej_stripe: 0 976783872 striped 2 8:16 8:32 1 AA

    Signed-off-by: Brian Wood
    Signed-off-by: Alasdair G Kergon

    Brian Wood
     
  • This patch adds the stripe_end_io function to process errors that might
    occur after an IO operation. As part of this there are a number of
    enhancements made to record and trigger events:

    - New atomic variable in struct stripe to record the number of
    errors each stripe volume device has experienced (could be used
    later with uevents to report back directly to userspace)

    - New workqueue/work struct setup to process the trigger_event function

    - New end_io function. It is here that testing for BIO error conditions
    take place. It determines the exact stripe that cause the error,
    records this in the new atomic variable, and calls the queue_work() function

    - New trigger_event function to process failure events. This
    calls dm_table_event()

    Signed-off-by: Brian Wood
    Signed-off-by: Alasdair G Kergon

    Brian Wood
     
  • If the log type is not recognised, attempt to load the module
    'dm-log-.ko'.

    Signed-off-by: Jonathan Brassow
    Signed-off-by: Alasdair G Kergon

    Jonathan Brassow
     
  • Add a single-thread workqueue for each mapped device
    and move flushing of the lists of pushback and deferred bios
    to this new workqueue.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • dm-crypt: Use crypto ablkcipher interface

    Move encrypt/decrypt core to async crypto call.

    Signed-off-by: Herbert Xu
    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • dm-crypt: Use crypto ablkcipher interface

    Prepare callback function for async crypto operation.

    Signed-off-by: Herbert Xu
    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • dm-crypt: Use crypto ablkcipher interface
    Prepare completion for async crypto request.

    Signed-off-by: Herbert Xu
    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • dm-crypt: Use crypto ablkcipher interface

    Introduce mempool for async crypto requests.

    cc->req is used mainly during synchronous operations
    (to prevent allocation and deallocation of the same object).

    Signed-off-by: Herbert Xu
    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • dm-crypt: Use crypto ablkcipher interface

    Move scatterlists to separate dm_crypt_struct and
    pick out block processing from crypt_convert.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • Make io reference counting more obvious.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • Introduce crypt_write_io_loop().

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • Process write request in separate function and queue
    final bio through io workqueue.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • Add sector into dm_crypt_io instead of using local variable.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • Reorder kcryptd functions for clarity.

    Signed-off-by: Alasdair G Kergon

    Alasdair G Kergon
     
  • Rename functions to follow calling convention.
    Prepare write io error processing function skeleton.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • Simplify crypt_endio function.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • Move error code setting outside of crypt_dec_pending function.
    Use -EIO if crypt_convert_scatterlist() fails.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • Remove write attribute from convert_context and use bio flag instead.

    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • Move convert_context inside dm_crypt_io.

    Signed-off-by: Herbert Xu
    Signed-off-by: Milan Broz
    Signed-off-by: Alasdair G Kergon

    Milan Broz
     
  • A static declaration missing.

    Signed-off-by: Alasdair G Kergon

    Alasdair G Kergon