btrfs-progs: update CHANGES for v4.16
[platform/upstream/btrfs-progs.git] / kernel-lib / raid56.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public
4  * License v2 as published by the Free Software Foundation.
5  *
6  * This program is distributed in the hope that it will be useful,
7  * but WITHOUT ANY WARRANTY; without even the implied warranty of
8  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
9  * General Public License for more details.
10  *
11  * You should have received a copy of the GNU General Public
12  * License along with this program; if not, write to the
13  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
14  * Boston, MA 021110-1307, USA.
15  */
16
17 /*
18  * Original headers from kernel library for RAID5/6 calculations, not from
19  * btrfs kernel header.
20  */
21
22 #ifndef __BTRFS_PROGS_RAID56_H__
23 #define __BTRFS_PROGS_RAID56_H__
24
25 void raid6_gen_syndrome(int disks, size_t bytes, void **ptrs);
26 int raid5_gen_result(int nr_devs, size_t stripe_len, int dest, void **data);
27
28 /*
29  * Headers synchronized from kernel include/linux/raid/pq.h
30  * No modification at all.
31  *
32  * Galois field tables.
33  */
34 extern const u8 raid6_gfmul[256][256] __attribute__((aligned(256)));
35 extern const u8 raid6_vgfmul[256][32] __attribute__((aligned(256)));
36 extern const u8 raid6_gfexp[256]      __attribute__((aligned(256)));
37 extern const u8 raid6_gfinv[256]      __attribute__((aligned(256)));
38 extern const u8 raid6_gfexi[256]      __attribute__((aligned(256)));
39
40 /* Recover raid6 with 2 data stripes corrupted */
41 int raid6_recov_data2(int nr_devs, size_t stripe_len, int dest1, int dest2,
42                       void **data);
43
44 /* Recover data and P */
45 int raid6_recov_datap(int nr_devs, size_t stripe_len, int dest1, void **data);
46
47 /*
48  * Recover raid56 data
49  * @dest1/2 can be -1 to indicate correct data
50  *
51  * Return >0 for unrecoverable case.
52  * Return 0 for recoverable case, And recovered data will be stored into @data
53  * Return <0 for fatal error
54  */
55 int raid56_recov(int nr_devs, size_t stripe_len, u64 profile, int dest1,
56                  int dest2, void **data);
57
58 #endif