summaryrefslogtreecommitdiff
path: root/restripe.c
diff options
context:
space:
mode:
authorRobert Buchholz <rbu@goodpoint.de>2012-07-09 17:22:38 +1000
committerNeilBrown <neilb@suse.de>2012-07-09 17:22:38 +1000
commit59679536c5b74d3cf6d10e5bedf462606f18d33b (patch)
treebc6f2de31b3d5db9c686dba6e33daba6d9f4f4c0 /restripe.c
parent1d9976430cfadcc13052f603915621659f09e936 (diff)
Extract function to generate zeroes and expose xor function
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'restripe.c')
-rw-r--r--restripe.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/restripe.c b/restripe.c
index 9aaf707a..1d2da1ad 100644
--- a/restripe.c
+++ b/restripe.c
@@ -211,7 +211,7 @@ static int is_ddf(int layout)
}
-static void xor_blocks(char *target, char **sources, int disks, int size)
+void xor_blocks(char *target, char **sources, int disks, int size)
{
int i, j;
/* Amazingly inefficient... */
@@ -335,6 +335,17 @@ void make_tables(void)
uint8_t *zero;
int zero_size;
+
+void ensure_zero_has_size(int chunk_size)
+{
+ if (zero == NULL || chunk_size > zero_size) {
+ if (zero)
+ free(zero);
+ zero = xcalloc(1, chunk_size);
+ zero_size = chunk_size;
+ }
+}
+
/* Following was taken from linux/drivers/md/raid6recov.c */
/* Recover two failed data blocks. */
@@ -510,13 +521,7 @@ int save_stripes(int *source, unsigned long long *offsets,
if (!tables_ready)
make_tables();
-
- if (zero == NULL || chunk_size > zero_size) {
- if (zero)
- free(zero);
- zero = xcalloc(1, chunk_size);
- zero_size = chunk_size;
- }
+ ensure_zero_has_size(chunk_size);
len = data_disks * chunk_size;
length_test = length / len;