Hi tada, kernel test robot noticed the following build warnings: url: https://github.com/intel-lab-lkp/linux/commits/tada-keisuke/md-add-infra-for-active_aligned_reads-changes/20240326-201827 base: fcf3f7e2fc8a53a6140beee46ec782a4c88e4744 patch link: https://lore.kernel.org/r/ffb112e756514a0eaab891379df0d834%40kioxia.com patch subject: [PATCH 06/11] md: avoid conflicts in active_aligned_reads operations config: i386-randconfig-141-20240328 (https://download.01.org/0day-ci/archive/20240331/202403312116.Sh5vFCWf-lkp@xxxxxxxxx/config) compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> | Closes: https://lore.kernel.org/r/202403312116.Sh5vFCWf-lkp@xxxxxxxxx/ New smatch warnings: drivers/md/raid5.c:7680 setup_conf() warn: passing zero to 'ERR_PTR' vim +/ERR_PTR +7680 drivers/md/raid5.c 39eda94c2b8f91 tada keisuke 2024-03-26 7414 static struct r5conf *setup_conf(struct mddev *mddev, bool quiesce) ^1da177e4c3f41 Linus Torvalds 2005-04-16 7415 { d1688a6d5515f1 NeilBrown 2011-10-11 7416 struct r5conf *conf; 5e5e3e78ed9038 NeilBrown 2009-10-16 7417 int raid_disk, memory, max_disks; 3cb03002000f13 NeilBrown 2011-10-11 7418 struct md_rdev *rdev; ^1da177e4c3f41 Linus Torvalds 2005-04-16 7419 struct disk_info *disk; 0232605d987d82 NeilBrown 2012-07-03 7420 char pers_name[6]; 566c09c53455d7 Shaohua Li 2013-11-14 7421 int i; d2c9ad41249ac8 Guoqing Jiang 2019-12-20 7422 int group_cnt; 60aaf933854511 majianpeng 2013-11-14 7423 struct r5worker_group *new_group; 8fbcba6b999beb Logan Gunthorpe 2022-04-07 7424 int ret = -ENOMEM; 39eda94c2b8f91 tada keisuke 2024-03-26 7425 unsigned int percpu_ref_init_flags; ^1da177e4c3f41 Linus Torvalds 2005-04-16 7426 91adb56473febe NeilBrown 2009-03-31 7427 if (mddev->new_level != 5 91adb56473febe NeilBrown 2009-03-31 7428 && mddev->new_level != 4 91adb56473febe NeilBrown 2009-03-31 7429 && mddev->new_level != 6) { cc6167b4f3b3ca NeilBrown 2016-11-02 7430 pr_warn("md/raid:%s: raid level not set to 4/5/6 (%d)\n", 91adb56473febe NeilBrown 2009-03-31 7431 mdname(mddev), mddev->new_level); 91adb56473febe NeilBrown 2009-03-31 7432 return ERR_PTR(-EIO); ^1da177e4c3f41 Linus Torvalds 2005-04-16 7433 } 91adb56473febe NeilBrown 2009-03-31 7434 if ((mddev->new_level == 5 91adb56473febe NeilBrown 2009-03-31 7435 && !algorithm_valid_raid5(mddev->new_layout)) || 91adb56473febe NeilBrown 2009-03-31 7436 (mddev->new_level == 6 91adb56473febe NeilBrown 2009-03-31 7437 && !algorithm_valid_raid6(mddev->new_layout))) { cc6167b4f3b3ca NeilBrown 2016-11-02 7438 pr_warn("md/raid:%s: layout %d not supported\n", 91adb56473febe NeilBrown 2009-03-31 7439 mdname(mddev), mddev->new_layout); 91adb56473febe NeilBrown 2009-03-31 7440 return ERR_PTR(-EIO); 99c0fb5f92828a NeilBrown 2009-03-31 7441 } 91adb56473febe NeilBrown 2009-03-31 7442 if (mddev->new_level == 6 && mddev->raid_disks < 4) { cc6167b4f3b3ca NeilBrown 2016-11-02 7443 pr_warn("md/raid:%s: not enough configured devices (%d, minimum 4)\n", 91adb56473febe NeilBrown 2009-03-31 7444 mdname(mddev), mddev->raid_disks); 91adb56473febe NeilBrown 2009-03-31 7445 return ERR_PTR(-EINVAL); 4bbf3771ca40d0 NeilBrown 2008-10-13 7446 } 4bbf3771ca40d0 NeilBrown 2008-10-13 7447 664e7c413f1e90 Andre Noll 2009-06-18 7448 if (!mddev->new_chunk_sectors || 664e7c413f1e90 Andre Noll 2009-06-18 7449 (mddev->new_chunk_sectors << 9) % PAGE_SIZE || 664e7c413f1e90 Andre Noll 2009-06-18 7450 !is_power_of_2(mddev->new_chunk_sectors)) { cc6167b4f3b3ca NeilBrown 2016-11-02 7451 pr_warn("md/raid:%s: invalid chunk size %d\n", 0c55e02259115c NeilBrown 2010-05-03 7452 mdname(mddev), mddev->new_chunk_sectors << 9); 91adb56473febe NeilBrown 2009-03-31 7453 return ERR_PTR(-EINVAL); f67055780caac6 NeilBrown 2006-03-27 7454 } f67055780caac6 NeilBrown 2006-03-27 7455 d1688a6d5515f1 NeilBrown 2011-10-11 7456 conf = kzalloc(sizeof(struct r5conf), GFP_KERNEL); 91adb56473febe NeilBrown 2009-03-31 7457 if (conf == NULL) ^1da177e4c3f41 Linus Torvalds 2005-04-16 7458 goto abort; c911c46c017c74 Yufen Yu 2020-07-18 7459 e236858243d7a8 Yufen Yu 2020-07-18 7460 #if PAGE_SIZE != DEFAULT_STRIPE_SIZE e236858243d7a8 Yufen Yu 2020-07-18 7461 conf->stripe_size = DEFAULT_STRIPE_SIZE; e236858243d7a8 Yufen Yu 2020-07-18 7462 conf->stripe_shift = ilog2(DEFAULT_STRIPE_SIZE) - 9; e236858243d7a8 Yufen Yu 2020-07-18 7463 conf->stripe_sectors = DEFAULT_STRIPE_SIZE >> 9; e236858243d7a8 Yufen Yu 2020-07-18 7464 #endif aaf9f12ebfafd1 Shaohua Li 2017-03-03 7465 INIT_LIST_HEAD(&conf->free_list); aaf9f12ebfafd1 Shaohua Li 2017-03-03 7466 INIT_LIST_HEAD(&conf->pending_list); 6396bb221514d2 Kees Cook 2018-06-12 7467 conf->pending_data = kcalloc(PENDING_IO_MAX, 6396bb221514d2 Kees Cook 2018-06-12 7468 sizeof(struct r5pending_data), 6396bb221514d2 Kees Cook 2018-06-12 7469 GFP_KERNEL); aaf9f12ebfafd1 Shaohua Li 2017-03-03 7470 if (!conf->pending_data) aaf9f12ebfafd1 Shaohua Li 2017-03-03 7471 goto abort; aaf9f12ebfafd1 Shaohua Li 2017-03-03 7472 for (i = 0; i < PENDING_IO_MAX; i++) aaf9f12ebfafd1 Shaohua Li 2017-03-03 7473 list_add(&conf->pending_data[i].sibling, &conf->free_list); 851c30c9badfc6 Shaohua Li 2013-08-28 7474 /* Don't enable multi-threading by default*/ d2c9ad41249ac8 Guoqing Jiang 2019-12-20 7475 if (!alloc_thread_groups(conf, 0, &group_cnt, &new_group)) { 60aaf933854511 majianpeng 2013-11-14 7476 conf->group_cnt = group_cnt; d2c9ad41249ac8 Guoqing Jiang 2019-12-20 7477 conf->worker_cnt_per_group = 0; 60aaf933854511 majianpeng 2013-11-14 7478 conf->worker_groups = new_group; 60aaf933854511 majianpeng 2013-11-14 7479 } else 851c30c9badfc6 Shaohua Li 2013-08-28 7480 goto abort; f5efd45ae597c9 Dan Williams 2009-10-16 7481 spin_lock_init(&conf->device_lock); 0a87b25ff2eb61 Ahmed S. Darwish 2020-07-20 7482 seqcount_spinlock_init(&conf->gen_lock, &conf->device_lock); 2d5b569b665ea6 NeilBrown 2015-07-06 7483 mutex_init(&conf->cache_size_mutex); 8fbcba6b999beb Logan Gunthorpe 2022-04-07 7484 b1b4648648e187 Yuanhan Liu 2015-05-08 7485 init_waitqueue_head(&conf->wait_for_quiescent); 6ab2a4b806ae21 Shaohua Li 2016-02-25 7486 init_waitqueue_head(&conf->wait_for_stripe); f5efd45ae597c9 Dan Williams 2009-10-16 7487 init_waitqueue_head(&conf->wait_for_overlap); f5efd45ae597c9 Dan Williams 2009-10-16 7488 INIT_LIST_HEAD(&conf->handle_list); 535ae4eb1225f1 Shaohua Li 2017-02-15 7489 INIT_LIST_HEAD(&conf->loprio_list); f5efd45ae597c9 Dan Williams 2009-10-16 7490 INIT_LIST_HEAD(&conf->hold_list); f5efd45ae597c9 Dan Williams 2009-10-16 7491 INIT_LIST_HEAD(&conf->delayed_list); f5efd45ae597c9 Dan Williams 2009-10-16 7492 INIT_LIST_HEAD(&conf->bitmap_list); 773ca82fa1ee58 Shaohua Li 2013-08-27 7493 init_llist_head(&conf->released_stripes); f5efd45ae597c9 Dan Williams 2009-10-16 7494 atomic_set(&conf->active_stripes, 0); f5efd45ae597c9 Dan Williams 2009-10-16 7495 atomic_set(&conf->preread_active_stripes, 0); 39eda94c2b8f91 tada keisuke 2024-03-26 7496 if (quiesce) 39eda94c2b8f91 tada keisuke 2024-03-26 7497 percpu_ref_init_flags = PERCPU_REF_ALLOW_REINIT | PERCPU_REF_INIT_DEAD; 39eda94c2b8f91 tada keisuke 2024-03-26 7498 else 39eda94c2b8f91 tada keisuke 2024-03-26 7499 percpu_ref_init_flags = PERCPU_REF_ALLOW_REINIT; d5f345aef75231 tada keisuke 2024-03-26 7500 ret = percpu_ref_init(&conf->active_aligned_reads, percpu_wakeup_handle_req_active, d5f345aef75231 tada keisuke 2024-03-26 7501 percpu_ref_init_flags, GFP_KERNEL); d5f345aef75231 tada keisuke 2024-03-26 7502 if (ret) ^^^^^^^^ "ret" set here now. d5f345aef75231 tada keisuke 2024-03-26 7503 goto abort; 765d704db1f583 Shaohua Li 2017-01-04 7504 spin_lock_init(&conf->pending_bios_lock); 765d704db1f583 Shaohua Li 2017-01-04 7505 conf->batch_bio_dispatch = true; 765d704db1f583 Shaohua Li 2017-01-04 7506 rdev_for_each(rdev, mddev) { 765d704db1f583 Shaohua Li 2017-01-04 7507 if (test_bit(Journal, &rdev->flags)) 765d704db1f583 Shaohua Li 2017-01-04 7508 continue; 10f0d2a517796b Christoph Hellwig 2022-04-15 7509 if (bdev_nonrot(rdev->bdev)) { 765d704db1f583 Shaohua Li 2017-01-04 7510 conf->batch_bio_dispatch = false; 765d704db1f583 Shaohua Li 2017-01-04 7511 break; 765d704db1f583 Shaohua Li 2017-01-04 7512 } 765d704db1f583 Shaohua Li 2017-01-04 7513 } 765d704db1f583 Shaohua Li 2017-01-04 7514 f5efd45ae597c9 Dan Williams 2009-10-16 7515 conf->bypass_threshold = BYPASS_THRESHOLD; d890fa2b0586b6 NeilBrown 2011-10-26 7516 conf->recovery_disabled = mddev->recovery_disabled - 1; 91adb56473febe NeilBrown 2009-03-31 7517 f67055780caac6 NeilBrown 2006-03-27 7518 conf->raid_disks = mddev->raid_disks; 91adb56473febe NeilBrown 2009-03-31 7519 if (mddev->reshape_position == MaxSector) 91adb56473febe NeilBrown 2009-03-31 7520 conf->previous_raid_disks = mddev->raid_disks; 91adb56473febe NeilBrown 2009-03-31 7521 else f67055780caac6 NeilBrown 2006-03-27 7522 conf->previous_raid_disks = mddev->raid_disks - mddev->delta_disks; 5e5e3e78ed9038 NeilBrown 2009-10-16 7523 max_disks = max(conf->raid_disks, conf->previous_raid_disks); f67055780caac6 NeilBrown 2006-03-27 7524 6396bb221514d2 Kees Cook 2018-06-12 7525 conf->disks = kcalloc(max_disks, sizeof(struct disk_info), b55e6bfcd23cb2 NeilBrown 2006-03-27 7526 GFP_KERNEL); d7bd398e97f236 Song Liu 2016-11-23 7527 b55e6bfcd23cb2 NeilBrown 2006-03-27 7528 if (!conf->disks) b55e6bfcd23cb2 NeilBrown 2006-03-27 7529 goto abort; Missing error code. 9ffae0cf3ea02f NeilBrown 2006-01-06 7530 d7bd398e97f236 Song Liu 2016-11-23 7531 for (i = 0; i < max_disks; i++) { d7bd398e97f236 Song Liu 2016-11-23 7532 conf->disks[i].extra_page = alloc_page(GFP_KERNEL); d7bd398e97f236 Song Liu 2016-11-23 7533 if (!conf->disks[i].extra_page) d7bd398e97f236 Song Liu 2016-11-23 7534 goto abort; d7bd398e97f236 Song Liu 2016-11-23 7535 } d7bd398e97f236 Song Liu 2016-11-23 7536 afeee514ce7f4c Kent Overstreet 2018-05-20 7537 ret = bioset_init(&conf->bio_split, BIO_POOL_SIZE, 0, 0); afeee514ce7f4c Kent Overstreet 2018-05-20 7538 if (ret) dd7a8f5dee81ff NeilBrown 2017-04-05 7539 goto abort; ^1da177e4c3f41 Linus Torvalds 2005-04-16 7540 conf->mddev = mddev; ^1da177e4c3f41 Linus Torvalds 2005-04-16 7541 5f7ef4875f9953 Dan Carpenter 2022-07-19 7542 ret = -ENOMEM; 5f7ef4875f9953 Dan Carpenter 2022-07-19 7543 conf->stripe_hashtbl = kzalloc(PAGE_SIZE, GFP_KERNEL); 5f7ef4875f9953 Dan Carpenter 2022-07-19 7544 if (!conf->stripe_hashtbl) ^1da177e4c3f41 Linus Torvalds 2005-04-16 7545 goto abort; ^1da177e4c3f41 Linus Torvalds 2005-04-16 7546 566c09c53455d7 Shaohua Li 2013-11-14 7547 /* We init hash_locks[0] separately to that it can be used 566c09c53455d7 Shaohua Li 2013-11-14 7548 * as the reference lock in the spin_lock_nest_lock() call 566c09c53455d7 Shaohua Li 2013-11-14 7549 * in lock_all_device_hash_locks_irq in order to convince 566c09c53455d7 Shaohua Li 2013-11-14 7550 * lockdep that we know what we are doing. 566c09c53455d7 Shaohua Li 2013-11-14 7551 */ 566c09c53455d7 Shaohua Li 2013-11-14 7552 spin_lock_init(conf->hash_locks); 566c09c53455d7 Shaohua Li 2013-11-14 7553 for (i = 1; i < NR_STRIPE_HASH_LOCKS; i++) 566c09c53455d7 Shaohua Li 2013-11-14 7554 spin_lock_init(conf->hash_locks + i); 566c09c53455d7 Shaohua Li 2013-11-14 7555 566c09c53455d7 Shaohua Li 2013-11-14 7556 for (i = 0; i < NR_STRIPE_HASH_LOCKS; i++) 566c09c53455d7 Shaohua Li 2013-11-14 7557 INIT_LIST_HEAD(conf->inactive_list + i); 566c09c53455d7 Shaohua Li 2013-11-14 7558 566c09c53455d7 Shaohua Li 2013-11-14 7559 for (i = 0; i < NR_STRIPE_HASH_LOCKS; i++) 566c09c53455d7 Shaohua Li 2013-11-14 7560 INIT_LIST_HEAD(conf->temp_inactive_list + i); 566c09c53455d7 Shaohua Li 2013-11-14 7561 1e6d690b9334b7 Song Liu 2016-11-17 7562 atomic_set(&conf->r5c_cached_full_stripes, 0); 1e6d690b9334b7 Song Liu 2016-11-17 7563 INIT_LIST_HEAD(&conf->r5c_full_stripe_list); 1e6d690b9334b7 Song Liu 2016-11-17 7564 atomic_set(&conf->r5c_cached_partial_stripes, 0); 1e6d690b9334b7 Song Liu 2016-11-17 7565 INIT_LIST_HEAD(&conf->r5c_partial_stripe_list); e33fbb9cc73d65 Shaohua Li 2017-02-10 7566 atomic_set(&conf->r5c_flushing_full_stripes, 0); e33fbb9cc73d65 Shaohua Li 2017-02-10 7567 atomic_set(&conf->r5c_flushing_partial_stripes, 0); 1e6d690b9334b7 Song Liu 2016-11-17 7568 36d1c6476be511 Dan Williams 2009-07-14 7569 conf->level = mddev->new_level; 46d5b785621ad1 shli@xxxxxxxxxx 2014-12-15 7570 conf->chunk_sectors = mddev->new_chunk_sectors; 8fbcba6b999beb Logan Gunthorpe 2022-04-07 7571 ret = raid5_alloc_percpu(conf); 8fbcba6b999beb Logan Gunthorpe 2022-04-07 7572 if (ret) 16a53ecc35f2a8 NeilBrown 2006-06-26 7573 goto abort; 36d1c6476be511 Dan Williams 2009-07-14 7574 0c55e02259115c NeilBrown 2010-05-03 7575 pr_debug("raid456: run(%s) called.\n", mdname(mddev)); ^1da177e4c3f41 Linus Torvalds 2005-04-16 7576 8fbcba6b999beb Logan Gunthorpe 2022-04-07 7577 ret = -EIO; dafb20fa34320a NeilBrown 2012-03-19 7578 rdev_for_each(rdev, mddev) { ^1da177e4c3f41 Linus Torvalds 2005-04-16 7579 raid_disk = rdev->raid_disk; 5e5e3e78ed9038 NeilBrown 2009-10-16 7580 if (raid_disk >= max_disks f2076e7d0643d1 Shaohua Li 2015-10-08 7581 || raid_disk < 0 || test_bit(Journal, &rdev->flags)) ^1da177e4c3f41 Linus Torvalds 2005-04-16 7582 continue; ^1da177e4c3f41 Linus Torvalds 2005-04-16 7583 disk = conf->disks + raid_disk; ^1da177e4c3f41 Linus Torvalds 2005-04-16 7584 17045f52ac76d9 NeilBrown 2011-12-23 7585 if (test_bit(Replacement, &rdev->flags)) { 17045f52ac76d9 NeilBrown 2011-12-23 7586 if (disk->replacement) 17045f52ac76d9 NeilBrown 2011-12-23 7587 goto abort; b0920ede081b3f Logan Gunthorpe 2022-04-07 7588 RCU_INIT_POINTER(disk->replacement, rdev); 17045f52ac76d9 NeilBrown 2011-12-23 7589 } else { 17045f52ac76d9 NeilBrown 2011-12-23 7590 if (disk->rdev) 17045f52ac76d9 NeilBrown 2011-12-23 7591 goto abort; b0920ede081b3f Logan Gunthorpe 2022-04-07 7592 RCU_INIT_POINTER(disk->rdev, rdev); 17045f52ac76d9 NeilBrown 2011-12-23 7593 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 7594 b2d444d7ad975d NeilBrown 2005-11-08 7595 if (test_bit(In_sync, &rdev->flags)) { 913cce5a1e588e Christoph Hellwig 2022-05-12 7596 pr_info("md/raid:%s: device %pg operational as raid disk %d\n", 913cce5a1e588e Christoph Hellwig 2022-05-12 7597 mdname(mddev), rdev->bdev, raid_disk); d6b212f4b19da5 Jonathan Brassow 2011-06-08 7598 } else if (rdev->saved_raid_disk != raid_disk) 8c2e870a625bd3 Neil Brown 2008-06-28 7599 /* Cannot rely on bitmap to complete recovery */ 8c2e870a625bd3 Neil Brown 2008-06-28 7600 conf->fullsync = 1; ^1da177e4c3f41 Linus Torvalds 2005-04-16 7601 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 7602 91adb56473febe NeilBrown 2009-03-31 7603 conf->level = mddev->new_level; 584acdd49cd247 Markus Stockhausen 2014-12-15 7604 if (conf->level == 6) { 16a53ecc35f2a8 NeilBrown 2006-06-26 7605 conf->max_degraded = 2; 584acdd49cd247 Markus Stockhausen 2014-12-15 7606 if (raid6_call.xor_syndrome) 584acdd49cd247 Markus Stockhausen 2014-12-15 7607 conf->rmw_level = PARITY_ENABLE_RMW; 16a53ecc35f2a8 NeilBrown 2006-06-26 7608 else 584acdd49cd247 Markus Stockhausen 2014-12-15 7609 conf->rmw_level = PARITY_DISABLE_RMW; 584acdd49cd247 Markus Stockhausen 2014-12-15 7610 } else { 16a53ecc35f2a8 NeilBrown 2006-06-26 7611 conf->max_degraded = 1; 584acdd49cd247 Markus Stockhausen 2014-12-15 7612 conf->rmw_level = PARITY_ENABLE_RMW; 584acdd49cd247 Markus Stockhausen 2014-12-15 7613 } 91adb56473febe NeilBrown 2009-03-31 7614 conf->algorithm = mddev->new_layout; fef9c61fdfabf9 NeilBrown 2009-03-31 7615 conf->reshape_progress = mddev->reshape_position; e183eaedd53807 NeilBrown 2009-03-31 7616 if (conf->reshape_progress != MaxSector) { 09c9e5fa1b93ad Andre Noll 2009-06-18 7617 conf->prev_chunk_sectors = mddev->chunk_sectors; e183eaedd53807 NeilBrown 2009-03-31 7618 conf->prev_algo = mddev->layout; 5cac6bcb9312a1 NeilBrown 2015-07-17 7619 } else { 5cac6bcb9312a1 NeilBrown 2015-07-17 7620 conf->prev_chunk_sectors = conf->chunk_sectors; 5cac6bcb9312a1 NeilBrown 2015-07-17 7621 conf->prev_algo = conf->algorithm; e183eaedd53807 NeilBrown 2009-03-31 7622 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 7623 edbe83ab4c27ea NeilBrown 2015-02-26 7624 conf->min_nr_stripes = NR_STRIPES; ad5b0f7685dbfc Shaohua Li 2016-08-30 7625 if (mddev->reshape_position != MaxSector) { ad5b0f7685dbfc Shaohua Li 2016-08-30 7626 int stripes = max_t(int, c911c46c017c74 Yufen Yu 2020-07-18 7627 ((mddev->chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4, c911c46c017c74 Yufen Yu 2020-07-18 7628 ((mddev->new_chunk_sectors << 9) / RAID5_STRIPE_SIZE(conf)) * 4); ad5b0f7685dbfc Shaohua Li 2016-08-30 7629 conf->min_nr_stripes = max(NR_STRIPES, stripes); ad5b0f7685dbfc Shaohua Li 2016-08-30 7630 if (conf->min_nr_stripes != NR_STRIPES) cc6167b4f3b3ca NeilBrown 2016-11-02 7631 pr_info("md/raid:%s: force stripe size %d for reshape\n", ad5b0f7685dbfc Shaohua Li 2016-08-30 7632 mdname(mddev), conf->min_nr_stripes); ad5b0f7685dbfc Shaohua Li 2016-08-30 7633 } edbe83ab4c27ea NeilBrown 2015-02-26 7634 memory = conf->min_nr_stripes * (sizeof(struct stripe_head) + 5e5e3e78ed9038 NeilBrown 2009-10-16 7635 max_disks * ((sizeof(struct bio) + PAGE_SIZE))) / 1024; 4bda556aea1d29 Shaohua Li 2013-11-14 7636 atomic_set(&conf->empty_inactive_list_nr, NR_STRIPE_HASH_LOCKS); edbe83ab4c27ea NeilBrown 2015-02-26 7637 if (grow_stripes(conf, conf->min_nr_stripes)) { cc6167b4f3b3ca NeilBrown 2016-11-02 7638 pr_warn("md/raid:%s: couldn't allocate %dkB for buffers\n", 0c55e02259115c NeilBrown 2010-05-03 7639 mdname(mddev), memory); 8fbcba6b999beb Logan Gunthorpe 2022-04-07 7640 ret = -ENOMEM; 91adb56473febe NeilBrown 2009-03-31 7641 goto abort; 91adb56473febe NeilBrown 2009-03-31 7642 } else cc6167b4f3b3ca NeilBrown 2016-11-02 7643 pr_debug("md/raid:%s: allocated %dkB\n", mdname(mddev), memory); edbe83ab4c27ea NeilBrown 2015-02-26 7644 /* edbe83ab4c27ea NeilBrown 2015-02-26 7645 * Losing a stripe head costs more than the time to refill it, edbe83ab4c27ea NeilBrown 2015-02-26 7646 * it reduces the queue depth and so can hurt throughput. edbe83ab4c27ea NeilBrown 2015-02-26 7647 * So set it rather large, scaled by number of devices. edbe83ab4c27ea NeilBrown 2015-02-26 7648 */ 86298d8b8ceacc Qi Zheng 2023-09-11 7649 conf->shrinker = shrinker_alloc(0, "md-raid5:%s", mdname(mddev)); 86298d8b8ceacc Qi Zheng 2023-09-11 7650 if (!conf->shrinker) { 86298d8b8ceacc Qi Zheng 2023-09-11 7651 ret = -ENOMEM; 86298d8b8ceacc Qi Zheng 2023-09-11 7652 pr_warn("md/raid:%s: couldn't allocate shrinker.\n", 6a0f53ff351dfd Chao Yu 2016-09-20 7653 mdname(mddev)); 6a0f53ff351dfd Chao Yu 2016-09-20 7654 goto abort; 6a0f53ff351dfd Chao Yu 2016-09-20 7655 } ^1da177e4c3f41 Linus Torvalds 2005-04-16 7656 86298d8b8ceacc Qi Zheng 2023-09-11 7657 conf->shrinker->seeks = DEFAULT_SEEKS * conf->raid_disks * 4; 86298d8b8ceacc Qi Zheng 2023-09-11 7658 conf->shrinker->scan_objects = raid5_cache_scan; 86298d8b8ceacc Qi Zheng 2023-09-11 7659 conf->shrinker->count_objects = raid5_cache_count; 86298d8b8ceacc Qi Zheng 2023-09-11 7660 conf->shrinker->batch = 128; 86298d8b8ceacc Qi Zheng 2023-09-11 7661 conf->shrinker->private_data = conf; 86298d8b8ceacc Qi Zheng 2023-09-11 7662 86298d8b8ceacc Qi Zheng 2023-09-11 7663 shrinker_register(conf->shrinker); 86298d8b8ceacc Qi Zheng 2023-09-11 7664 0232605d987d82 NeilBrown 2012-07-03 7665 sprintf(pers_name, "raid%d", mddev->new_level); 44693154398272 Yu Kuai 2023-05-23 7666 rcu_assign_pointer(conf->thread, 44693154398272 Yu Kuai 2023-05-23 7667 md_register_thread(raid5d, mddev, pers_name)); 91adb56473febe NeilBrown 2009-03-31 7668 if (!conf->thread) { cc6167b4f3b3ca NeilBrown 2016-11-02 7669 pr_warn("md/raid:%s: couldn't allocate thread.\n", 91adb56473febe NeilBrown 2009-03-31 7670 mdname(mddev)); 8fbcba6b999beb Logan Gunthorpe 2022-04-07 7671 ret = -ENOMEM; 16a53ecc35f2a8 NeilBrown 2006-06-26 7672 goto abort; 16a53ecc35f2a8 NeilBrown 2006-06-26 7673 } 91adb56473febe NeilBrown 2009-03-31 7674 91adb56473febe NeilBrown 2009-03-31 7675 return conf; 91adb56473febe NeilBrown 2009-03-31 7676 91adb56473febe NeilBrown 2009-03-31 7677 abort: 8fbcba6b999beb Logan Gunthorpe 2022-04-07 7678 if (conf) 95fc17aac45300 Dan Williams 2009-07-31 7679 free_conf(conf); 8fbcba6b999beb Logan Gunthorpe 2022-04-07 @7680 return ERR_PTR(ret); ^^^^^^^^^^^^ This will return NULL instead of an error pointer. ^1da177e4c3f41 Linus Torvalds 2005-04-16 7681 } -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki