Commit 1857fcc8 authored by Herbert Xu's avatar Herbert Xu Committed by Andrew Morton
Browse files

lib/raid6: replace custom zero page with ZERO_PAGE

Use the system-wide zero page instead of a custom zero page.

[herbert@gondor.apana.org.au: update lib/raid6/recov_rvv.c, per Klara]
  Link: https://lkml.kernel.org/r/aFkUnXWtxcgOTVkw@gondor.apana.org.au
Link: https://lkml.kernel.org/r/Z9flJNkWQICx0PXk@gondor.apana.org.au


Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Cc: Song Liu <song@kernel.org>
Cc: Yu Kuai <yukuai3@huawei.com>
Cc: Klara Modin <klarasmodin@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 41a7f737
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -119,7 +119,7 @@ do_sync_gen_syndrome(struct page **blocks, unsigned int *offsets, int disks,
	for (i = 0; i < disks; i++) {
		if (blocks[i] == NULL) {
			BUG_ON(i > disks - 3); /* P or Q can't be zero */
			srcs[i] = (void*)raid6_empty_zero_page;
			srcs[i] = raid6_get_zero_page();
		} else {
			srcs[i] = page_address(blocks[i]) + offsets[i];

+2 −2
Original line number Diff line number Diff line
@@ -414,7 +414,7 @@ async_raid6_2data_recov(int disks, size_t bytes, int faila, int failb,
		async_tx_quiesce(&submit->depend_tx);
		for (i = 0; i < disks; i++)
			if (blocks[i] == NULL)
				ptrs[i] = (void *) raid6_empty_zero_page;
				ptrs[i] = raid6_get_zero_page();
			else
				ptrs[i] = page_address(blocks[i]) + offs[i];

@@ -497,7 +497,7 @@ async_raid6_datap_recov(int disks, size_t bytes, int faila,
		async_tx_quiesce(&submit->depend_tx);
		for (i = 0; i < disks; i++)
			if (blocks[i] == NULL)
				ptrs[i] = (void*)raid6_empty_zero_page;
				ptrs[i] = raid6_get_zero_page();
			else
				ptrs[i] = page_address(blocks[i]) + offs[i];

+11 −1
Original line number Diff line number Diff line
@@ -11,8 +11,13 @@
#ifdef __KERNEL__

#include <linux/blkdev.h>
#include <linux/mm.h>

extern const char raid6_empty_zero_page[PAGE_SIZE];
/* This should be const but the raid6 code is too convoluted for that. */
static inline void *raid6_get_zero_page(void)
{
	return page_address(ZERO_PAGE(0));
}

#else /* ! __KERNEL__ */
/* Used for testing in user space */
@@ -191,6 +196,11 @@ static inline uint32_t raid6_jiffies(void)
	return tv.tv_sec*1000 + tv.tv_usec/1000;
}

static inline void *raid6_get_zero_page(void)
{
	return raid6_empty_zero_page;
}

#endif /* ! __KERNEL__ */

#endif /* LINUX_RAID_RAID6_H */
+0 −3
Original line number Diff line number Diff line
@@ -18,9 +18,6 @@
#else
#include <linux/module.h>
#include <linux/gfp.h>
/* In .bss so it's zeroed */
const char raid6_empty_zero_page[PAGE_SIZE] __attribute__((aligned(256)));
EXPORT_SYMBOL(raid6_empty_zero_page);
#endif

struct raid6_calls raid6_call;
+3 −3
Original line number Diff line number Diff line
@@ -31,10 +31,10 @@ static void raid6_2data_recov_intx1(int disks, size_t bytes, int faila,
	   Use the dead data pages as temporary storage for
	   delta p and delta q */
	dp = (u8 *)ptrs[faila];
	ptrs[faila] = (void *)raid6_empty_zero_page;
	ptrs[faila] = raid6_get_zero_page();
	ptrs[disks-2] = dp;
	dq = (u8 *)ptrs[failb];
	ptrs[failb] = (void *)raid6_empty_zero_page;
	ptrs[failb] = raid6_get_zero_page();
	ptrs[disks-1] = dq;

	raid6_call.gen_syndrome(disks, bytes, ptrs);
@@ -72,7 +72,7 @@ static void raid6_datap_recov_intx1(int disks, size_t bytes, int faila,
	/* Compute syndrome with zero for the missing data page
	   Use the dead data page as temporary storage for delta q */
	dq = (u8 *)ptrs[faila];
	ptrs[faila] = (void *)raid6_empty_zero_page;
	ptrs[faila] = raid6_get_zero_page();
	ptrs[disks-1] = dq;

	raid6_call.gen_syndrome(disks, bytes, ptrs);
Loading