Christoph Hellwig
cfbdbecb29
raid6: improve the runtime selection benchmark
...
Use plain ktime_get_ns for the timing, use 8 + 2 disks for a realistic
load, and report the throughput on the data disks as that is what storage
systems are measured on.
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Cc: Eric Biggers <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-08-03 21:10:16 -07:00
Christoph Hellwig
d999af2192
raid6: defer implementation selection when built-in
...
Don't hold up early boot and defer the selection just like we've been
doing for the RAID5 XOR code since commit 524ccdbdfb ("crypto: xor -
defer load time benchmark to a later time").
This will also allow full use of the timing subsystem for benchmarking.
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Cc: Eric Biggers <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-08-03 21:10:16 -07:00
Mike Rapoport (Microsoft)
19c000ba93
raid6: use kmalloc() in raid6_select_algo()
...
raid6_select_algo() allocates 8 pages for buffer that is used
as a scratch area for selection of the best algorithm.
This buffer can be allocated with kmalloc() as there's nothing special
about it to go directly to the page allocator.
kmalloc() provides a better API than ancient __get_free_pages().
kmalloc() does not require ugly casts and kfree() does not need to know the
size of the freed object.
There is no performance difference because kmalloc() redirects allocations
of such size to the page allocator.
Replace __get_free_pages() call with kmalloc().
Link: https://lore.kernel.org/all/[email protected]
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Mike Rapoport (Microsoft) <[email protected] >
Reviewed-by: Christoph Hellwig <[email protected] >
Cc: Christoph Hellwig <[email protected] >
Cc: Hannes Reinecke <[email protected] >
Cc: Li Nan <[email protected] >
Cc: Song Liu <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-06-04 14:49:28 -07:00
Christoph Hellwig
30bf04bd13
raid6: update top of file comments
...
Drop the pointless mention of the file name, and use standard formatting
for the top of file comments.
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Acked-by: Ard Biesheuvel <[email protected] >
Tested-by: Ard Biesheuvel <[email protected] > # kunit only on arm64
Cc: Albert Ou <[email protected] >
Cc: Alexander Gordeev <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: "Borislav Petkov (AMD)" <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Chris Mason <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dan Williams <[email protected] >
Cc: David Sterba <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: Herbert Xu <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Huacai Chen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Li Nan <[email protected] >
Cc: Madhavan Srinivasan <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Nicholas Piggin <[email protected] >
Cc: Palmer Dabbelt <[email protected] >
Cc: Song Liu <[email protected] >
Cc: Sven Schnelle <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: WANG Xuerui <[email protected] >
Cc: Will Deacon <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-05-28 21:24:55 -07:00
Christoph Hellwig
dd83de0341
raid6: use static_call for raid6_recov_2data and raid6_recov_datap
...
Avoid expensive indirect calls for the recovery routines as well.
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Acked-by: Ard Biesheuvel <[email protected] >
Tested-by: Ard Biesheuvel <[email protected] > # kunit only on arm64
Cc: Albert Ou <[email protected] >
Cc: Alexander Gordeev <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: "Borislav Petkov (AMD)" <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Chris Mason <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dan Williams <[email protected] >
Cc: David Sterba <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: Herbert Xu <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Huacai Chen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Li Nan <[email protected] >
Cc: Madhavan Srinivasan <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Nicholas Piggin <[email protected] >
Cc: Palmer Dabbelt <[email protected] >
Cc: Song Liu <[email protected] >
Cc: Sven Schnelle <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: WANG Xuerui <[email protected] >
Cc: Will Deacon <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-05-28 21:24:55 -07:00
Christoph Hellwig
10f4b8e2a1
raid6: use static_call for gen_syndrom and xor_syndrom
...
Avoid indirect calls for P/Q parity generation.
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Acked-by: Ard Biesheuvel <[email protected] >
Tested-by: Ard Biesheuvel <[email protected] > # kunit only on arm64
Cc: Albert Ou <[email protected] >
Cc: Alexander Gordeev <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: "Borislav Petkov (AMD)" <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Chris Mason <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dan Williams <[email protected] >
Cc: David Sterba <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: Herbert Xu <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Huacai Chen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Li Nan <[email protected] >
Cc: Madhavan Srinivasan <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Nicholas Piggin <[email protected] >
Cc: Palmer Dabbelt <[email protected] >
Cc: Song Liu <[email protected] >
Cc: Sven Schnelle <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: WANG Xuerui <[email protected] >
Cc: Will Deacon <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-05-28 21:24:55 -07:00
Christoph Hellwig
adfcf6e89b
raid6: rework registration of optimized algorithms
...
Replace the static array of algorithms with a call to an architecture
helper to register algorithms. This serves two purposes: it avoid having
to register all algorithms in a single central place, and it removes the
need for the priority field by just registering the algorithms that the
architecture considers suitable for the currently running CPUs.
[[email protected] : register avx512 after avx2]
Link: https://lore.kernel.org/[email protected]
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Acked-by: Ard Biesheuvel <[email protected] >
Tested-by: Ard Biesheuvel <[email protected] > # kunit only on arm64
Cc: Albert Ou <[email protected] >
Cc: Alexander Gordeev <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: "Borislav Petkov (AMD)" <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Chris Mason <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dan Williams <[email protected] >
Cc: David Sterba <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: Herbert Xu <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Huacai Chen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Li Nan <[email protected] >
Cc: Madhavan Srinivasan <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Nicholas Piggin <[email protected] >
Cc: Palmer Dabbelt <[email protected] >
Cc: Song Liu <[email protected] >
Cc: Sven Schnelle <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: WANG Xuerui <[email protected] >
Cc: Will Deacon <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-05-28 21:24:54 -07:00
Christoph Hellwig
769d603fc4
raid6: hide internals
...
Split out two new headers from the public pq.h:
- lib/raid/raid6/algos.h contains the algorithm lists private to
lib/raid/raid6
- include/linux/raid/pq_tables.h contains the tables also used by
async_tx providers.
The public include/linux/pq.h is now limited to the public interface for
the consumers of the RAID6 PQ API.
[[email protected] : remove duplicate ccflags-y line]
Link: https://lore.kernel.org/[email protected]
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Acked-by: Ard Biesheuvel <[email protected] >
Tested-by: Ard Biesheuvel <[email protected] > # kunit only on arm64
Cc: Albert Ou <[email protected] >
Cc: Alexander Gordeev <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: "Borislav Petkov (AMD)" <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Chris Mason <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dan Williams <[email protected] >
Cc: David Sterba <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: Herbert Xu <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Huacai Chen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Li Nan <[email protected] >
Cc: Madhavan Srinivasan <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Nicholas Piggin <[email protected] >
Cc: Palmer Dabbelt <[email protected] >
Cc: Song Liu <[email protected] >
Cc: Sven Schnelle <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: WANG Xuerui <[email protected] >
Cc: Will Deacon <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-05-28 21:24:54 -07:00
Christoph Hellwig
2790045a62
raid6: warn when using less than four devices
...
Quoting H. Peter Anvin who came up with the RAID6 P/Q algorithm, and who
wrote the initial implementation, then still part of the md driver:
The RAID-6 code has *never* supported only 3 units, and if it ever
worked for *any* of the implementations it was purely by accident.
Speaking as the original author I should know; this was deliberate as
in some cases the degenerate case (3) would have required extra trays
in the code to no user benefit.
While md never allowed less than 4 devices, btrfs does. This new warning
will trigger for such file systems, but given how it already causes havoc
that is a good thing. If btrfs wants to fix third, it should switch to
transparently use three-way mirroring underneath, which will work as P and
Q are copies of the single data device by the definition of the Linux RAID
6 P/Q algorithm.
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Acked-by: Ard Biesheuvel <[email protected] >
Tested-by: Ard Biesheuvel <[email protected] > # kunit only on arm64
Cc: Albert Ou <[email protected] >
Cc: Alexander Gordeev <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: "Borislav Petkov (AMD)" <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Chris Mason <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dan Williams <[email protected] >
Cc: David Sterba <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: Herbert Xu <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Huacai Chen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Li Nan <[email protected] >
Cc: Madhavan Srinivasan <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Nicholas Piggin <[email protected] >
Cc: Palmer Dabbelt <[email protected] >
Cc: Song Liu <[email protected] >
Cc: Sven Schnelle <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: WANG Xuerui <[email protected] >
Cc: Will Deacon <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-05-28 21:24:54 -07:00
Christoph Hellwig
35472bc6f3
raid6: improve the public interface
...
Stop directly calling into function pointers from users of the RAID6 PQ
API, and provide exported functions with proper documentation and API
guarantees asserts where applicable instead.
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Acked-by: Ard Biesheuvel <[email protected] >
Tested-by: Ard Biesheuvel <[email protected] > # kunit only on arm64
Cc: Albert Ou <[email protected] >
Cc: Alexander Gordeev <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: "Borislav Petkov (AMD)" <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Chris Mason <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dan Williams <[email protected] >
Cc: David Sterba <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: Herbert Xu <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Huacai Chen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Li Nan <[email protected] >
Cc: Madhavan Srinivasan <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Nicholas Piggin <[email protected] >
Cc: Palmer Dabbelt <[email protected] >
Cc: Song Liu <[email protected] >
Cc: Sven Schnelle <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: WANG Xuerui <[email protected] >
Cc: Will Deacon <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-05-28 21:24:54 -07:00
Christoph Hellwig
3626738bc7
raid6: move to lib/raid/
...
Move the raid6 code to live in lib/raid/ with the XOR code, and change the
internal organization so that each architecture has a subdirectory similar
to the CRC, crypto and XOR libraries, and fix up the Makefile to only
build files actually needed.
Also move the kunit test case from the history test/ subdirectory to
tests/ and use the normal naming scheme for it.
Link: https://lore.kernel.org/[email protected]
Signed-off-by: Christoph Hellwig <[email protected] >
Acked-by: Ard Biesheuvel <[email protected] >
Tested-by: Ard Biesheuvel <[email protected] > # kunit only on arm64
Cc: Albert Ou <[email protected] >
Cc: Alexander Gordeev <[email protected] >
Cc: Alexandre Ghiti <[email protected] >
Cc: Arnd Bergmann <[email protected] >
Cc: "Borislav Petkov (AMD)" <[email protected] >
Cc: Catalin Marinas <[email protected] >
Cc: Chris Mason <[email protected] >
Cc: Christian Borntraeger <[email protected] >
Cc: Dan Williams <[email protected] >
Cc: David Sterba <[email protected] >
Cc: Heiko Carstens <[email protected] >
Cc: Herbert Xu <[email protected] >
Cc: "H. Peter Anvin" <[email protected] >
Cc: Huacai Chen <[email protected] >
Cc: Ingo Molnar <[email protected] >
Cc: Li Nan <[email protected] >
Cc: Madhavan Srinivasan <[email protected] >
Cc: Michael Ellerman <[email protected] >
Cc: Nicholas Piggin <[email protected] >
Cc: Palmer Dabbelt <[email protected] >
Cc: Song Liu <[email protected] >
Cc: Sven Schnelle <[email protected] >
Cc: Vasily Gorbik <[email protected] >
Cc: WANG Xuerui <[email protected] >
Cc: Will Deacon <[email protected] >
Signed-off-by: Andrew Morton <[email protected] >
2026-05-28 21:24:53 -07:00