On 04/25/2018 11:58 PM, Alexis Castilla wrote:
It's working perfectly!
Do you need me to run any other test or any further investigation?
Thanks for the test, I think it is ok to send the formal patch to list now.
Guoqing
Thanks!
2018-04-25 9:52 GMT+01:00 Alexis Castilla <pencerval@xxxxxxxxx>:
Will try and report back!
Thanks!
2018-04-25 8:40 GMT+01:00 Guoqing Jiang <gqjiang@xxxxxxxx>:
On 04/25/2018 02:52 PM, Guoqing Jiang wrote:
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
index 3c60774c8430..840360a29de0 100644
--- a/drivers/md/raid10.c
+++ b/drivers/md/raid10.c
@@ -249,10 +249,15 @@ static void r10buf_pool_free(void *__r10_bio, void
*data)
{
struct r10conf *conf = data;
struct r10bio *r10bio = __r10_bio;
- int j;
+ int j, nalloc;
struct resync_pages *rp = NULL;
- for (j = conf->copies; j--; ) {
+ if (test_bit(MD_RECOVERY_SYNC, &conf->mddev->recovery) ||
+ test_bit(MD_RECOVERY_RESHAPE, &conf->mddev->recovery))
+ nalloc = conf->copies; /* resync */
+ else
+ nalloc = 2; /* recovery */
+ for (j = nalloc; j--; ) {
struct bio *bio = r10bio->devs[j].bio;
rp = get_resync_pages(bio);
I guess it was caused by commit f0250618361db1447d66c494c6dd2df815f42c87
("md: raid10: don't use bio's vec table to manage resync pages").
- if (bio) {
- for (i = 0; i < RESYNC_PAGES; i++) {
- safe_put_page(bio->bi_io_vec[i].bv_page);
- bio->bi_io_vec[i].bv_page = NULL;
- }
- bio_put(bio);
- }
+
+ rp = get_resync_pages(bio);
+ resync_free_pages(rp);
+ bio_put(bio);
So another way is just check if bio existed or not as before.
Thanks,
Guoqing
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html