01 Nov, 2011

1 commit


05 May, 2010

1 commit

  • The raid6 recovery code should immediately drop back to the optimized
    synchronous path when a p+q dma resource is not available. Otherwise we
    run the non-optimized/multi-pass async code in sync mode.

    Verified with raid6test (NDISKS=255)

    Applies to kernels >= 2.6.32.

    Cc:
    Acked-by: NeilBrown
    Reported-by: H. Peter Anvin
    Signed-off-by: Dan Williams
    Signed-off-by: Linus Torvalds

    Dan Williams
     

20 Oct, 2009

1 commit

  • The raid6 recovery code currently requires special handling of the
    4-disk and 5-disk recovery scenarios for the native layout. Quoting
    from commit 0a82a623:

    In these situations the default N-disk algorithm will present
    0-source or 1-source operations to dma devices. To cover for
    dma devices where the minimum source count is 2 we implement
    4-disk and 5-disk handling in the recovery code.

    The ddf layout presents disks=6 and disks=7 to the recovery code in
    these situations. Instead of looking at the number of disks count the
    number of non-zero sources in the list and call the special case code
    when the number of non-failed sources is 0 or 1.

    [neilb@suse.de: replace 'ddf' flag with counting good sources]
    Signed-off-by: Dan Williams

    Dan Williams
     

16 Oct, 2009

1 commit

  • md/raid6 passes a list of 'struct page *' to the async_tx routines,
    which then either DMA map them for offload, or take the page_address
    for CPU based calculations.

    For RAID6 we sometime leave 'blanks' in the list of pages.
    For CPU based calcs, we want to treat theses as a page of zeros.
    For offloaded calculations, we simply don't pass a page to the
    hardware.

    Currently the 'blanks' are encoded as a pointer to
    raid6_empty_zero_page. This is a 4096 byte memory region, not a
    'struct page'. This is mostly handled correctly but is rather ugly.

    So change the code to pass and expect a NULL pointer for the blanks.
    When taking page_address of a page, we need to check for a NULL and
    in that case use raid6_empty_zero_page.

    Signed-off-by: NeilBrown

    NeilBrown
     

22 Sep, 2009

1 commit


09 Sep, 2009

1 commit

  • Some engines optimize operation by reading ahead in the descriptor chain
    such that descriptor2 may start execution before descriptor1 completes.
    If descriptor2 depends on the result from descriptor1 then a fence is
    required (on descriptor2) to disable this optimization. The async_tx
    api could implicitly identify dependencies via the 'depend_tx'
    parameter, but that would constrain cases where the dependency chain
    only specifies a completion order rather than a data dependency. So,
    provide an ASYNC_TX_FENCE to explicitly identify data dependencies.

    Signed-off-by: Dan Williams

    Dan Williams
     

30 Aug, 2009

1 commit

  • async_raid6_2data_recov() recovers two data disk failures

    async_raid6_datap_recov() recovers a data disk and the P disk

    These routines are a port of the synchronous versions found in
    drivers/md/raid6recov.c. The primary difference is breaking out the xor
    operations into separate calls to async_xor. Two helper routines are
    introduced to perform scalar multiplication where needed.
    async_sum_product() multiplies two sources by scalar coefficients and
    then sums (xor) the result. async_mult() simply multiplies a single
    source by a scalar.

    This implemention also includes, in contrast to the original
    synchronous-only code, special case handling for the 4-disk and 5-disk
    array cases. In these situations the default N-disk algorithm will
    present 0-source or 1-source operations to dma devices. To cover for
    dma devices where the minimum source count is 2 we implement 4-disk and
    5-disk handling in the recovery code.

    [ Impact: asynchronous raid6 recovery routines for 2data and datap cases ]

    Cc: Yuri Tikhonov
    Cc: Ilya Yanok
    Cc: H. Peter Anvin
    Cc: David Woodhouse
    Reviewed-by: Andre Noll
    Acked-by: Maciej Sosnowski
    Signed-off-by: Dan Williams

    Dan Williams