diff --git a/HISTORY b/HISTORY index 8b376526..a03a8ee8 100644 --- a/HISTORY +++ b/HISTORY @@ -6,10 +6,10 @@ SnapRAID HISTORY * Adds support for RAIDTP (Triple Parity) and RAIDQP (Quad Parity). For quad parity there is a limitation of using no more than 21 data disks. This is a conseguence of the high performant parity generator - matrix used. An extension to 27 data disk is possible, but not yet - implemented. - Note that a more general approach without any limitation is possible, - but it would affect badly the performance. + matrix used. An extension supporting up to 89 disks with Hexa (6) parity + is possible, but not yet implemented. + Note that more general approaches without these limitations are also + possible, but they would affect badly the performance. 4.1 2013/9 (BETA) ================= diff --git a/TODO b/TODO index 92f6124e..1cb9cb21 100644 --- a/TODO +++ b/TODO @@ -5,6 +5,11 @@ This is the list of TODO items for SnapRAID. - 4.1 +* Allow to extract UUID info from the content file. + +* In the log file and gui mode, output kind of final report. Like: +status:ok / status:fail + * In sync if a data error is found, we can mark the block as bad, like in scrub and allow sync to continue. @@ -88,10 +93,10 @@ Or maybe we should allow parity never than content, but not viceversa. * Use Async IO for Linux (libaio). See thread: https://sourceforge.net/p/snapraid/discussion/1677233/thread/a300a10b/ -* Triple parity also called RAID-TP. We can implement it in a compatible way -with the existing RAID-5 and RAID-6 definining a new r-parity file. -See http://blogs.oracle.com/ahl/entry/triple_parity_raid_z and -http://thread.gmane.org/gmane.linux.raid/34195/focus=34236 +* Split the parity in multiple files and allow it to coexist with data +in the same disk. +This is possible if the data in the same disk uses parity addresses not +contained in the parity file present in the same disk. * The data could be compressed before processing, resulting in parity block of fixed size, but matching different data block sizes. diff --git a/raid.c b/raid.c index e584d61e..4673c403 100644 --- a/raid.c +++ b/raid.c @@ -1221,35 +1221,70 @@ void raid_gen(unsigned level, unsigned char** buffer, unsigned diskmax, unsigned /* recovering */ /** - * The data recovering is based on paper "The mathematics of RAID-6" [1], - * that covers the RAID5 and RAID6 computation in the Galois Field GF(2^8) + * The data recovering is based on the paper "The mathematics of RAID-6" [1], + * that covers the RAID5 and RAID6 computations in the Galois Field GF(2^8) * with the primitive polynomial x^8 + x^4 + x^3 + x^2 + 1 (285 decimal), - * using parity generators "1" and "2". + * using the following equations to compute syndrome P and Q from a set + * of n disk Di with 0<=i