* [hch-misc:btrfs-bio-split 13/23] fs/btrfs/volumes.c:6546 __btrfs_map_block() error: we previously assumed 'mirror_num_p' could be null (see line 6373)
@ 2022-07-01 15:14 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2022-07-01 15:14 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 23213 bytes --]
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
TO: Christoph Hellwig <hch@lst.de>
tree: git://git.infradead.org/users/hch/misc.git btrfs-bio-split
head: 5b0a740fccc4046cf80cfb6d90a6edd7f86b8f60
commit: 3857d170deeb6db2bc4e1e8eb6d827601a7a4281 [13/23] btrfs: stop allocation a btrfs_io_context for simple I/O
:::::: branch date: 6 hours ago
:::::: commit date: 9 hours ago
config: microblaze-randconfig-m031-20220629 (https://download.01.org/0day-ci/archive/20220701/202207012321.3j8iefoF-lkp(a)intel.com/config)
compiler: microblaze-linux-gcc (GCC) 11.3.0
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
fs/btrfs/volumes.c:6546 __btrfs_map_block() error: we previously assumed 'mirror_num_p' could be null (see line 6373)
Old smatch warnings:
arch/microblaze/include/asm/thread_info.h:85 current_thread_info() error: uninitialized symbol 'sp'.
vim +/mirror_num_p +6546 fs/btrfs/volumes.c
3857d170deeb6d Christoph Hellwig 2022-06-28 6357
cf8cddd38bab31 Christoph Hellwig 2016-10-27 6358 static int __btrfs_map_block(struct btrfs_fs_info *fs_info,
3857d170deeb6d Christoph Hellwig 2022-06-28 6359 enum btrfs_map_op op, u64 logical, u64 *length,
4c664611791239 Qu Wenruo 2021-09-15 6360 struct btrfs_io_context **bioc_ret,
3857d170deeb6d Christoph Hellwig 2022-06-28 6361 struct btrfs_io_stripe *smap,
3857d170deeb6d Christoph Hellwig 2022-06-28 6362 int *mirror_num_p, int need_raid_map)
0b86a832a1f38a Chris Mason 2008-03-24 6363 {
0b86a832a1f38a Chris Mason 2008-03-24 6364 struct extent_map *em;
0b86a832a1f38a Chris Mason 2008-03-24 6365 struct map_lookup *map;
593060d756e0c2 Chris Mason 2008-03-25 6366 u64 stripe_offset;
593060d756e0c2 Chris Mason 2008-03-25 6367 u64 stripe_nr;
53b381b3abeb86 David Woodhouse 2013-01-29 6368 u64 stripe_len;
9d644a623ec48e David Sterba 2015-02-20 6369 u32 stripe_index;
cff8267228c14e David Sterba 2019-05-17 6370 int data_stripes;
cea9e4452ebaf1 Chris Mason 2008-04-09 6371 int i;
de11cc12df1733 Li Zefan 2011-12-01 6372 int ret = 0;
3857d170deeb6d Christoph Hellwig 2022-06-28 @6373 int mirror_num = mirror_num_p ? *mirror_num_p : 0;
f2d8d74d7874f8 Chris Mason 2008-04-21 6374 int num_stripes;
a236aed14ccb06 Chris Mason 2008-04-29 6375 int max_errors = 0;
2c8cdd6ee4e7f6 Miao Xie 2014-11-14 6376 int tgtdev_indexes = 0;
4c664611791239 Qu Wenruo 2021-09-15 6377 struct btrfs_io_context *bioc = NULL;
472262f35a6b34 Stefan Behrens 2012-11-06 6378 struct btrfs_dev_replace *dev_replace = &fs_info->dev_replace;
472262f35a6b34 Stefan Behrens 2012-11-06 6379 int dev_replace_is_ongoing = 0;
472262f35a6b34 Stefan Behrens 2012-11-06 6380 int num_alloc_stripes;
ad6d620e2a5704 Stefan Behrens 2012-11-06 6381 int patch_the_first_stripe_for_dev_replace = 0;
ad6d620e2a5704 Stefan Behrens 2012-11-06 6382 u64 physical_to_patch_in_first_stripe = 0;
53b381b3abeb86 David Woodhouse 2013-01-29 6383 u64 raid56_full_stripe_start = (u64)-1;
89b798ad1b42b1 Nikolay Borisov 2019-06-03 6384 struct btrfs_io_geometry geom;
89b798ad1b42b1 Nikolay Borisov 2019-06-03 6385
4c664611791239 Qu Wenruo 2021-09-15 6386 ASSERT(bioc_ret);
75fb2e9e49c1bf David Sterba 2018-08-03 6387 ASSERT(op != BTRFS_MAP_DISCARD);
0b3d4cd371edb6 Liu Bo 2017-03-14 6388
420343131970fd Michal Rostecki 2021-01-27 6389 em = btrfs_get_chunk_map(fs_info, logical, *length);
420343131970fd Michal Rostecki 2021-01-27 6390 ASSERT(!IS_ERR(em));
420343131970fd Michal Rostecki 2021-01-27 6391
43c0d1a5e11795 Qu Wenruo 2021-04-13 6392 ret = btrfs_get_io_geometry(fs_info, em, op, logical, &geom);
89b798ad1b42b1 Nikolay Borisov 2019-06-03 6393 if (ret < 0)
89b798ad1b42b1 Nikolay Borisov 2019-06-03 6394 return ret;
0b86a832a1f38a Chris Mason 2008-03-24 6395
95617d69326ce3 Jeff Mahoney 2015-06-03 6396 map = em->map_lookup;
593060d756e0c2 Chris Mason 2008-03-25 6397
89b798ad1b42b1 Nikolay Borisov 2019-06-03 6398 *length = geom.len;
89b798ad1b42b1 Nikolay Borisov 2019-06-03 6399 stripe_len = geom.stripe_len;
89b798ad1b42b1 Nikolay Borisov 2019-06-03 6400 stripe_nr = geom.stripe_nr;
89b798ad1b42b1 Nikolay Borisov 2019-06-03 6401 stripe_offset = geom.stripe_offset;
89b798ad1b42b1 Nikolay Borisov 2019-06-03 6402 raid56_full_stripe_start = geom.raid56_stripe_offset;
cff8267228c14e David Sterba 2019-05-17 6403 data_stripes = nr_data_stripes(map);
593060d756e0c2 Chris Mason 2008-03-25 6404
cb5583dd52fab4 David Sterba 2018-09-07 6405 down_read(&dev_replace->rwsem);
472262f35a6b34 Stefan Behrens 2012-11-06 6406 dev_replace_is_ongoing = btrfs_dev_replace_is_ongoing(dev_replace);
53176dde0acd8f David Sterba 2018-04-05 6407 /*
53176dde0acd8f David Sterba 2018-04-05 6408 * Hold the semaphore for read during the whole operation, write is
53176dde0acd8f David Sterba 2018-04-05 6409 * requested at commit time but must wait.
53176dde0acd8f David Sterba 2018-04-05 6410 */
472262f35a6b34 Stefan Behrens 2012-11-06 6411 if (!dev_replace_is_ongoing)
cb5583dd52fab4 David Sterba 2018-09-07 6412 up_read(&dev_replace->rwsem);
472262f35a6b34 Stefan Behrens 2012-11-06 6413
ad6d620e2a5704 Stefan Behrens 2012-11-06 6414 if (dev_replace_is_ongoing && mirror_num == map->num_stripes + 1 &&
2b19a1fef7be74 Liu Bo 2017-03-14 6415 !need_full_stripe(op) && dev_replace->tgtdev != NULL) {
5ab56090b8824c Liu Bo 2017-03-14 6416 ret = get_extra_mirror_from_replace(fs_info, logical, *length,
5ab56090b8824c Liu Bo 2017-03-14 6417 dev_replace->srcdev->devid,
5ab56090b8824c Liu Bo 2017-03-14 6418 &mirror_num,
5ab56090b8824c Liu Bo 2017-03-14 6419 &physical_to_patch_in_first_stripe);
5ab56090b8824c Liu Bo 2017-03-14 6420 if (ret)
ad6d620e2a5704 Stefan Behrens 2012-11-06 6421 goto out;
5ab56090b8824c Liu Bo 2017-03-14 6422 else
94a97dfeb61e32 Zhao Lei 2015-12-09 6423 patch_the_first_stripe_for_dev_replace = 1;
ad6d620e2a5704 Stefan Behrens 2012-11-06 6424 } else if (mirror_num > map->num_stripes) {
ad6d620e2a5704 Stefan Behrens 2012-11-06 6425 mirror_num = 0;
ad6d620e2a5704 Stefan Behrens 2012-11-06 6426 }
ad6d620e2a5704 Stefan Behrens 2012-11-06 6427
f2d8d74d7874f8 Chris Mason 2008-04-21 6428 num_stripes = 1;
cea9e4452ebaf1 Chris Mason 2008-04-09 6429 stripe_index = 0;
fce3bb9a1bd492 Li Dongyang 2011-03-24 6430 if (map->type & BTRFS_BLOCK_GROUP_RAID0) {
47c5713f4737e4 David Sterba 2015-02-20 6431 stripe_nr = div_u64_rem(stripe_nr, map->num_stripes,
47c5713f4737e4 David Sterba 2015-02-20 6432 &stripe_index);
de48373454acea Anand Jain 2017-10-12 6433 if (!need_full_stripe(op))
28e1cc7d1baf80 Miao Xie 2014-09-12 6434 mirror_num = 1;
c7369b3faea230 David Sterba 2019-05-31 6435 } else if (map->type & BTRFS_BLOCK_GROUP_RAID1_MASK) {
de48373454acea Anand Jain 2017-10-12 6436 if (need_full_stripe(op))
f2d8d74d7874f8 Chris Mason 2008-04-21 6437 num_stripes = map->num_stripes;
2fff734fafa742 Chris Mason 2008-04-29 6438 else if (mirror_num)
f188591e987e21 Chris Mason 2008-04-09 6439 stripe_index = mirror_num - 1;
dfe25020689bb2 Chris Mason 2008-05-13 6440 else {
30d9861ff9520e Stefan Behrens 2012-11-06 6441 stripe_index = find_live_mirror(fs_info, map, 0,
30d9861ff9520e Stefan Behrens 2012-11-06 6442 dev_replace_is_ongoing);
a1d3c4786a4b9c Jan Schmidt 2011-08-04 6443 mirror_num = stripe_index + 1;
dfe25020689bb2 Chris Mason 2008-05-13 6444 }
2fff734fafa742 Chris Mason 2008-04-29 6445
611f0e00a27fe0 Chris Mason 2008-04-03 6446 } else if (map->type & BTRFS_BLOCK_GROUP_DUP) {
de48373454acea Anand Jain 2017-10-12 6447 if (need_full_stripe(op)) {
f2d8d74d7874f8 Chris Mason 2008-04-21 6448 num_stripes = map->num_stripes;
a1d3c4786a4b9c Jan Schmidt 2011-08-04 6449 } else if (mirror_num) {
f188591e987e21 Chris Mason 2008-04-09 6450 stripe_index = mirror_num - 1;
a1d3c4786a4b9c Jan Schmidt 2011-08-04 6451 } else {
a1d3c4786a4b9c Jan Schmidt 2011-08-04 6452 mirror_num = 1;
a1d3c4786a4b9c Jan Schmidt 2011-08-04 6453 }
2fff734fafa742 Chris Mason 2008-04-29 6454
321aecc65671ae Chris Mason 2008-04-16 6455 } else if (map->type & BTRFS_BLOCK_GROUP_RAID10) {
9d644a623ec48e David Sterba 2015-02-20 6456 u32 factor = map->num_stripes / map->sub_stripes;
321aecc65671ae Chris Mason 2008-04-16 6457
47c5713f4737e4 David Sterba 2015-02-20 6458 stripe_nr = div_u64_rem(stripe_nr, factor, &stripe_index);
321aecc65671ae Chris Mason 2008-04-16 6459 stripe_index *= map->sub_stripes;
321aecc65671ae Chris Mason 2008-04-16 6460
de48373454acea Anand Jain 2017-10-12 6461 if (need_full_stripe(op))
f2d8d74d7874f8 Chris Mason 2008-04-21 6462 num_stripes = map->sub_stripes;
321aecc65671ae Chris Mason 2008-04-16 6463 else if (mirror_num)
321aecc65671ae Chris Mason 2008-04-16 6464 stripe_index += mirror_num - 1;
dfe25020689bb2 Chris Mason 2008-05-13 6465 else {
3e74317ad773ba Jan Schmidt 2012-04-27 6466 int old_stripe_index = stripe_index;
30d9861ff9520e Stefan Behrens 2012-11-06 6467 stripe_index = find_live_mirror(fs_info, map,
30d9861ff9520e Stefan Behrens 2012-11-06 6468 stripe_index,
30d9861ff9520e Stefan Behrens 2012-11-06 6469 dev_replace_is_ongoing);
3e74317ad773ba Jan Schmidt 2012-04-27 6470 mirror_num = stripe_index - old_stripe_index + 1;
dfe25020689bb2 Chris Mason 2008-05-13 6471 }
53b381b3abeb86 David Woodhouse 2013-01-29 6472
ffe2d2034bbb34 Zhao Lei 2015-01-20 6473 } else if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) {
6a45cb21d29269 Christoph Hellwig 2022-06-17 6474 ASSERT(map->stripe_len == BTRFS_STRIPE_LEN);
de48373454acea Anand Jain 2017-10-12 6475 if (need_raid_map && (need_full_stripe(op) || mirror_num > 1)) {
53b381b3abeb86 David Woodhouse 2013-01-29 6476 /* push stripe_nr back to the start of the full stripe */
42c61ab6760f5f Liu Bo 2017-04-03 6477 stripe_nr = div64_u64(raid56_full_stripe_start,
cff8267228c14e David Sterba 2019-05-17 6478 stripe_len * data_stripes);
53b381b3abeb86 David Woodhouse 2013-01-29 6479
53b381b3abeb86 David Woodhouse 2013-01-29 6480 /* RAID[56] write or recovery. Return all stripes */
53b381b3abeb86 David Woodhouse 2013-01-29 6481 num_stripes = map->num_stripes;
a204b169d8ee1d Qu Wenruo 2022-05-13 6482 max_errors = btrfs_chunk_max_errors(map);
53b381b3abeb86 David Woodhouse 2013-01-29 6483
a8aa67e6507575 Qu Wenruo 2022-06-17 6484 /* Return the length to the full stripe end */
a8aa67e6507575 Qu Wenruo 2022-06-17 6485 *length = min(logical + *length,
a8aa67e6507575 Qu Wenruo 2022-06-17 6486 raid56_full_stripe_start + em->start +
a8aa67e6507575 Qu Wenruo 2022-06-17 6487 data_stripes * stripe_len) - logical;
53b381b3abeb86 David Woodhouse 2013-01-29 6488 stripe_index = 0;
53b381b3abeb86 David Woodhouse 2013-01-29 6489 stripe_offset = 0;
53b381b3abeb86 David Woodhouse 2013-01-29 6490 } else {
53b381b3abeb86 David Woodhouse 2013-01-29 6491 /*
53b381b3abeb86 David Woodhouse 2013-01-29 6492 * Mirror #0 or #1 means the original data block.
53b381b3abeb86 David Woodhouse 2013-01-29 6493 * Mirror #2 is RAID5 parity block.
53b381b3abeb86 David Woodhouse 2013-01-29 6494 * Mirror #3 is RAID6 Q block.
53b381b3abeb86 David Woodhouse 2013-01-29 6495 */
47c5713f4737e4 David Sterba 2015-02-20 6496 stripe_nr = div_u64_rem(stripe_nr,
cff8267228c14e David Sterba 2019-05-17 6497 data_stripes, &stripe_index);
53b381b3abeb86 David Woodhouse 2013-01-29 6498 if (mirror_num > 1)
cff8267228c14e David Sterba 2019-05-17 6499 stripe_index = data_stripes + mirror_num - 2;
53b381b3abeb86 David Woodhouse 2013-01-29 6500
53b381b3abeb86 David Woodhouse 2013-01-29 6501 /* We distribute the parity blocks across stripes */
47c5713f4737e4 David Sterba 2015-02-20 6502 div_u64_rem(stripe_nr + stripe_index, map->num_stripes,
47c5713f4737e4 David Sterba 2015-02-20 6503 &stripe_index);
de48373454acea Anand Jain 2017-10-12 6504 if (!need_full_stripe(op) && mirror_num <= 1)
28e1cc7d1baf80 Miao Xie 2014-09-12 6505 mirror_num = 1;
53b381b3abeb86 David Woodhouse 2013-01-29 6506 }
8790d502e4401a Chris Mason 2008-04-03 6507 } else {
593060d756e0c2 Chris Mason 2008-03-25 6508 /*
47c5713f4737e4 David Sterba 2015-02-20 6509 * after this, stripe_nr is the number of stripes on this
47c5713f4737e4 David Sterba 2015-02-20 6510 * device we have to walk to find the data, and stripe_index is
47c5713f4737e4 David Sterba 2015-02-20 6511 * the number of our device in the stripe array
593060d756e0c2 Chris Mason 2008-03-25 6512 */
47c5713f4737e4 David Sterba 2015-02-20 6513 stripe_nr = div_u64_rem(stripe_nr, map->num_stripes,
47c5713f4737e4 David Sterba 2015-02-20 6514 &stripe_index);
a1d3c4786a4b9c Jan Schmidt 2011-08-04 6515 mirror_num = stripe_index + 1;
8790d502e4401a Chris Mason 2008-04-03 6516 }
e042d1ec441798 Josef Bacik 2016-04-12 6517 if (stripe_index >= map->num_stripes) {
5d163e0e68ce74 Jeff Mahoney 2016-09-20 6518 btrfs_crit(fs_info,
5d163e0e68ce74 Jeff Mahoney 2016-09-20 6519 "stripe index math went horribly wrong, got stripe_index=%u, num_stripes=%u",
e042d1ec441798 Josef Bacik 2016-04-12 6520 stripe_index, map->num_stripes);
e042d1ec441798 Josef Bacik 2016-04-12 6521 ret = -EINVAL;
e042d1ec441798 Josef Bacik 2016-04-12 6522 goto out;
e042d1ec441798 Josef Bacik 2016-04-12 6523 }
593060d756e0c2 Chris Mason 2008-03-25 6524
472262f35a6b34 Stefan Behrens 2012-11-06 6525 num_alloc_stripes = num_stripes;
6fad823f4998cd Liu Bo 2017-03-14 6526 if (dev_replace_is_ongoing && dev_replace->tgtdev != NULL) {
0b3d4cd371edb6 Liu Bo 2017-03-14 6527 if (op == BTRFS_MAP_WRITE)
472262f35a6b34 Stefan Behrens 2012-11-06 6528 num_alloc_stripes <<= 1;
cf8cddd38bab31 Christoph Hellwig 2016-10-27 6529 if (op == BTRFS_MAP_GET_READ_MIRRORS)
ad6d620e2a5704 Stefan Behrens 2012-11-06 6530 num_alloc_stripes++;
2c8cdd6ee4e7f6 Miao Xie 2014-11-14 6531 tgtdev_indexes = num_stripes;
ad6d620e2a5704 Stefan Behrens 2012-11-06 6532 }
2c8cdd6ee4e7f6 Miao Xie 2014-11-14 6533
3857d170deeb6d Christoph Hellwig 2022-06-28 6534 /*
3857d170deeb6d Christoph Hellwig 2022-06-28 6535 * If this I/O maps to a single device, try to return the device and
3857d170deeb6d Christoph Hellwig 2022-06-28 6536 * physical block information on the stack instead of allocating an
3857d170deeb6d Christoph Hellwig 2022-06-28 6537 * I/O context structure.
3857d170deeb6d Christoph Hellwig 2022-06-28 6538 */
3857d170deeb6d Christoph Hellwig 2022-06-28 6539 if (smap && num_alloc_stripes == 1 &&
3857d170deeb6d Christoph Hellwig 2022-06-28 6540 !((map->type & BTRFS_BLOCK_GROUP_RAID56_MASK) && mirror_num > 1) &&
3857d170deeb6d Christoph Hellwig 2022-06-28 6541 (!need_full_stripe(op) || !dev_replace_is_ongoing ||
3857d170deeb6d Christoph Hellwig 2022-06-28 6542 !dev_replace->tgtdev)) {
3857d170deeb6d Christoph Hellwig 2022-06-28 6543 if (unlikely(patch_the_first_stripe_for_dev_replace)) {
3857d170deeb6d Christoph Hellwig 2022-06-28 6544 smap->dev = dev_replace->tgtdev;
3857d170deeb6d Christoph Hellwig 2022-06-28 6545 smap->physical = physical_to_patch_in_first_stripe;
3857d170deeb6d Christoph Hellwig 2022-06-28 @6546 *mirror_num_p = map->num_stripes + 1;
3857d170deeb6d Christoph Hellwig 2022-06-28 6547 } else {
3857d170deeb6d Christoph Hellwig 2022-06-28 6548 set_stripe(smap, map, stripe_index, stripe_offset,
3857d170deeb6d Christoph Hellwig 2022-06-28 6549 stripe_nr);
3857d170deeb6d Christoph Hellwig 2022-06-28 6550 *mirror_num_p = mirror_num;
3857d170deeb6d Christoph Hellwig 2022-06-28 6551 }
3857d170deeb6d Christoph Hellwig 2022-06-28 6552 *bioc_ret = NULL;
3857d170deeb6d Christoph Hellwig 2022-06-28 6553 ret = 0;
3857d170deeb6d Christoph Hellwig 2022-06-28 6554 goto out;
3857d170deeb6d Christoph Hellwig 2022-06-28 6555 }
3857d170deeb6d Christoph Hellwig 2022-06-28 6556
731ccf15c952d5 Qu Wenruo 2021-09-23 6557 bioc = alloc_btrfs_io_context(fs_info, num_alloc_stripes, tgtdev_indexes);
4c664611791239 Qu Wenruo 2021-09-15 6558 if (!bioc) {
de11cc12df1733 Li Zefan 2011-12-01 6559 ret = -ENOMEM;
de11cc12df1733 Li Zefan 2011-12-01 6560 goto out;
de11cc12df1733 Li Zefan 2011-12-01 6561 }
608769a4e41cce Nikolay Borisov 2020-07-02 6562
608769a4e41cce Nikolay Borisov 2020-07-02 6563 for (i = 0; i < num_stripes; i++) {
3857d170deeb6d Christoph Hellwig 2022-06-28 6564 set_stripe(&bioc->stripes[i], map, stripe_index, stripe_offset,
3857d170deeb6d Christoph Hellwig 2022-06-28 6565 stripe_nr);
608769a4e41cce Nikolay Borisov 2020-07-02 6566 stripe_index++;
608769a4e41cce Nikolay Borisov 2020-07-02 6567 }
de11cc12df1733 Li Zefan 2011-12-01 6568
4c664611791239 Qu Wenruo 2021-09-15 6569 /* Build raid_map */
2b19a1fef7be74 Liu Bo 2017-03-14 6570 if (map->type & BTRFS_BLOCK_GROUP_RAID56_MASK && need_raid_map &&
2b19a1fef7be74 Liu Bo 2017-03-14 6571 (need_full_stripe(op) || mirror_num > 1)) {
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6572 u64 tmp;
9d644a623ec48e David Sterba 2015-02-20 6573 unsigned rot;
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6574
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6575 /* Work out the disk rotation on this stripe-set */
47c5713f4737e4 David Sterba 2015-02-20 6576 div_u64_rem(stripe_nr, num_stripes, &rot);
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6577
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6578 /* Fill in the logical address of each stripe */
cff8267228c14e David Sterba 2019-05-17 6579 tmp = stripe_nr * data_stripes;
cff8267228c14e David Sterba 2019-05-17 6580 for (i = 0; i < data_stripes; i++)
4c664611791239 Qu Wenruo 2021-09-15 6581 bioc->raid_map[(i + rot) % num_stripes] =
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6582 em->start + (tmp + i) * map->stripe_len;
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6583
4c664611791239 Qu Wenruo 2021-09-15 6584 bioc->raid_map[(i + rot) % map->num_stripes] = RAID5_P_STRIPE;
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6585 if (map->type & BTRFS_BLOCK_GROUP_RAID6)
4c664611791239 Qu Wenruo 2021-09-15 6586 bioc->raid_map[(i + rot + 1) % num_stripes] =
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6587 RAID6_Q_STRIPE;
8e5cfb55d3f7dc Zhao Lei 2015-01-20 6588
4c664611791239 Qu Wenruo 2021-09-15 6589 sort_parity_stripes(bioc, num_stripes);
593060d756e0c2 Chris Mason 2008-03-25 6590 }
de11cc12df1733 Li Zefan 2011-12-01 6591
2b19a1fef7be74 Liu Bo 2017-03-14 6592 if (need_full_stripe(op))
d20983b40e828f Miao Xie 2014-07-03 6593 max_errors = btrfs_chunk_max_errors(map);
de11cc12df1733 Li Zefan 2011-12-01 6594
73c0f228250ff7 Liu Bo 2017-03-14 6595 if (dev_replace_is_ongoing && dev_replace->tgtdev != NULL &&
2b19a1fef7be74 Liu Bo 2017-03-14 6596 need_full_stripe(op)) {
4c664611791239 Qu Wenruo 2021-09-15 6597 handle_ops_on_dev_replace(op, &bioc, dev_replace, logical,
6143c23ccced76 Naohiro Aota 2021-02-04 6598 &num_stripes, &max_errors);
ad6d620e2a5704 Stefan Behrens 2012-11-06 6599 }
472262f35a6b34 Stefan Behrens 2012-11-06 6600
4c664611791239 Qu Wenruo 2021-09-15 6601 *bioc_ret = bioc;
4c664611791239 Qu Wenruo 2021-09-15 6602 bioc->map_type = map->type;
4c664611791239 Qu Wenruo 2021-09-15 6603 bioc->num_stripes = num_stripes;
4c664611791239 Qu Wenruo 2021-09-15 6604 bioc->max_errors = max_errors;
4c664611791239 Qu Wenruo 2021-09-15 6605 bioc->mirror_num = mirror_num;
ad6d620e2a5704 Stefan Behrens 2012-11-06 6606
ad6d620e2a5704 Stefan Behrens 2012-11-06 6607 /*
ad6d620e2a5704 Stefan Behrens 2012-11-06 6608 * this is the case that REQ_READ && dev_replace_is_ongoing &&
ad6d620e2a5704 Stefan Behrens 2012-11-06 6609 * mirror_num == num_stripes + 1 && dev_replace target drive is
ad6d620e2a5704 Stefan Behrens 2012-11-06 6610 * available as a mirror
ad6d620e2a5704 Stefan Behrens 2012-11-06 6611 */
ad6d620e2a5704 Stefan Behrens 2012-11-06 6612 if (patch_the_first_stripe_for_dev_replace && num_stripes > 0) {
ad6d620e2a5704 Stefan Behrens 2012-11-06 6613 WARN_ON(num_stripes > 1);
4c664611791239 Qu Wenruo 2021-09-15 6614 bioc->stripes[0].dev = dev_replace->tgtdev;
4c664611791239 Qu Wenruo 2021-09-15 6615 bioc->stripes[0].physical = physical_to_patch_in_first_stripe;
4c664611791239 Qu Wenruo 2021-09-15 6616 bioc->mirror_num = map->num_stripes + 1;
ad6d620e2a5704 Stefan Behrens 2012-11-06 6617 }
cea9e4452ebaf1 Chris Mason 2008-04-09 6618 out:
73beece9ca07c0 Liu Bo 2015-07-17 6619 if (dev_replace_is_ongoing) {
53176dde0acd8f David Sterba 2018-04-05 6620 lockdep_assert_held(&dev_replace->rwsem);
53176dde0acd8f David Sterba 2018-04-05 6621 /* Unlock and let waiting writers proceed */
cb5583dd52fab4 David Sterba 2018-09-07 6622 up_read(&dev_replace->rwsem);
73beece9ca07c0 Liu Bo 2015-07-17 6623 }
0b86a832a1f38a Chris Mason 2008-03-24 6624 free_extent_map(em);
de11cc12df1733 Li Zefan 2011-12-01 6625 return ret;
0b86a832a1f38a Chris Mason 2008-03-24 6626 }
0b86a832a1f38a Chris Mason 2008-03-24 6627
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-07-01 15:14 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-01 15:14 [hch-misc:btrfs-bio-split 13/23] fs/btrfs/volumes.c:6546 __btrfs_map_block() error: we previously assumed 'mirror_num_p' could be null (see line 6373) kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.