@@ -2055,6 +2055,7 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
2055
2055
int i , first ;
2056
2056
struct bio * tbio , * fbio ;
2057
2057
int vcnt ;
2058
+ struct page * * tpages , * * fpages ;
2058
2059
2059
2060
atomic_set (& r10_bio -> remaining , 1 );
2060
2061
@@ -2070,6 +2071,7 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
2070
2071
fbio = r10_bio -> devs [i ].bio ;
2071
2072
fbio -> bi_iter .bi_size = r10_bio -> sectors << 9 ;
2072
2073
fbio -> bi_iter .bi_idx = 0 ;
2074
+ fpages = get_resync_pages (fbio )-> pages ;
2073
2075
2074
2076
vcnt = (r10_bio -> sectors + (PAGE_SIZE >> 9 ) - 1 ) >> (PAGE_SHIFT - 9 );
2075
2077
/* now find blocks with errors */
@@ -2084,6 +2086,8 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
2084
2086
continue ;
2085
2087
if (i == first )
2086
2088
continue ;
2089
+
2090
+ tpages = get_resync_pages (tbio )-> pages ;
2087
2091
d = r10_bio -> devs [i ].devnum ;
2088
2092
rdev = conf -> mirrors [d ].rdev ;
2089
2093
if (!r10_bio -> devs [i ].bio -> bi_error ) {
@@ -2096,8 +2100,8 @@ static void sync_request_write(struct mddev *mddev, struct r10bio *r10_bio)
2096
2100
int len = PAGE_SIZE ;
2097
2101
if (sectors < (len / 512 ))
2098
2102
len = sectors * 512 ;
2099
- if (memcmp (page_address (fbio -> bi_io_vec [j ]. bv_page ),
2100
- page_address (tbio -> bi_io_vec [j ]. bv_page ),
2103
+ if (memcmp (page_address (fpages [j ]),
2104
+ page_address (tpages [j ]),
2101
2105
len ))
2102
2106
break ;
2103
2107
sectors -= len /512 ;
@@ -2195,6 +2199,7 @@ static void fix_recovery_read_error(struct r10bio *r10_bio)
2195
2199
int idx = 0 ;
2196
2200
int dr = r10_bio -> devs [0 ].devnum ;
2197
2201
int dw = r10_bio -> devs [1 ].devnum ;
2202
+ struct page * * pages = get_resync_pages (bio )-> pages ;
2198
2203
2199
2204
while (sectors ) {
2200
2205
int s = sectors ;
@@ -2210,15 +2215,15 @@ static void fix_recovery_read_error(struct r10bio *r10_bio)
2210
2215
ok = sync_page_io (rdev ,
2211
2216
addr ,
2212
2217
s << 9 ,
2213
- bio -> bi_io_vec [idx ]. bv_page ,
2218
+ pages [idx ],
2214
2219
REQ_OP_READ , 0 , false);
2215
2220
if (ok ) {
2216
2221
rdev = conf -> mirrors [dw ].rdev ;
2217
2222
addr = r10_bio -> devs [1 ].addr + sect ;
2218
2223
ok = sync_page_io (rdev ,
2219
2224
addr ,
2220
2225
s << 9 ,
2221
- bio -> bi_io_vec [idx ]. bv_page ,
2226
+ pages [idx ],
2222
2227
REQ_OP_WRITE , 0 , false);
2223
2228
if (!ok ) {
2224
2229
set_bit (WriteErrorSeen , & rdev -> flags );
0 commit comments