Hi Jan, kernel test robot noticed the following build errors: [auto build test ERROR on axboe-block/for-6.5/block] [also build test ERROR on next-20230621] [cannot apply to linus/master v6.4-rc7] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Jan-Kara/bcache-Alloc-holder-object-before-async-registration/20230622-002543 base: https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git for-6.5/block patch link: https://lore.kernel.org/r/20230621162333.30027-2-jack%40suse.cz patch subject: [PATCH 2/2] bcache: Fix bcache device claiming config: s390-defconfig (https://download.01.org/0day-ci/archive/20230622/202306220927.dRUNZbek-lkp@xxxxxxxxx/config) compiler: s390-linux-gcc (GCC) 12.3.0 reproduce: (https://download.01.org/0day-ci/archive/20230622/202306220927.dRUNZbek-lkp@xxxxxxxxx/reproduce) 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> | Closes: https://lore.kernel.org/oe-kbuild-all/202306220927.dRUNZbek-lkp@xxxxxxxxx/ All error/warnings (new ones prefixed by >>): drivers/md/bcache/super.c: In function 'register_bcache': >> drivers/md/bcache/super.c:2574:9: warning: this 'if' clause does not guard... [-Wmisleading-indentation] 2574 | if (IS_ERR(bdev)) | ^~ drivers/md/bcache/super.c:2576:17: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if' 2576 | if (bdev == ERR_PTR(-EBUSY)) { | ^~ >> drivers/md/bcache/super.c:2591:17: error: label 'out_free_holder' used but not defined 2591 | goto out_free_holder; | ^~~~ >> drivers/md/bcache/super.c:2566:17: error: label 'out_put_sb_page' used but not defined 2566 | goto out_put_sb_page; | ^~~~ >> drivers/md/bcache/super.c:2560:17: error: label 'out_blkdev_put' used but not defined 2560 | goto out_blkdev_put; | ^~~~ >> drivers/md/bcache/super.c:2552:17: error: label 'out_free_sb' used but not defined 2552 | goto out_free_sb; | ^~~~ >> drivers/md/bcache/super.c:2546:17: error: label 'out_free_path' used but not defined 2546 | goto out_free_path; | ^~~~ >> drivers/md/bcache/super.c:2542:17: error: label 'out_module_put' used but not defined 2542 | goto out_module_put; | ^~~~ >> drivers/md/bcache/super.c:2530:17: error: label 'out' used but not defined 2530 | goto out; | ^~~~ >> drivers/md/bcache/super.c:2521:14: warning: variable 'quiet' set but not used [-Wunused-but-set-variable] 2521 | bool quiet = false; | ^~~~~ drivers/md/bcache/super.c:2520:14: warning: unused variable 'async_registration' [-Wunused-variable] 2520 | bool async_registration = false; | ^~~~~~~~~~~~~~~~~~ >> drivers/md/bcache/super.c:2519:17: warning: variable 'ret' set but not used [-Wunused-but-set-variable] 2519 | ssize_t ret; | ^~~ drivers/md/bcache/super.c:2592:9: error: no return statement in function returning non-void [-Werror=return-type] 2592 | } | ^ drivers/md/bcache/super.c: At top level: >> drivers/md/bcache/super.c:2594:9: warning: data definition has no type or storage class 2594 | err = "failed to register device"; | ^~~ >> drivers/md/bcache/super.c:2594:9: error: type defaults to 'int' in declaration of 'err' [-Werror=implicit-int] >> drivers/md/bcache/super.c:2594:15: warning: initialization of 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion] 2594 | err = "failed to register device"; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ >> drivers/md/bcache/super.c:2594:15: error: initializer element is not computable at load time >> drivers/md/bcache/super.c:2596:9: error: expected identifier or '(' before 'if' 2596 | if (async_registration) { | ^~ drivers/md/bcache/super.c:2617:9: error: expected identifier or '(' before 'if' 2617 | if (SB_IS_BDEV(sb)) { | ^~ >> drivers/md/bcache/super.c:2624:11: error: expected identifier or '(' before 'else' 2624 | } else { | ^~~~ drivers/md/bcache/super.c:2631:9: warning: data definition has no type or storage class 2631 | kfree(sb); | ^~~~~ >> drivers/md/bcache/super.c:2631:9: error: type defaults to 'int' in declaration of 'kfree' [-Werror=implicit-int] >> drivers/md/bcache/super.c:2631:9: warning: parameter names (without types) in function declaration >> drivers/md/bcache/super.c:2631:9: error: conflicting types for 'kfree'; have 'int()' In file included from include/linux/fs.h:45, from include/linux/highmem.h:5, from include/linux/bvec.h:10, from include/linux/blk_types.h:10, from include/linux/bio.h:10, from drivers/md/bcache/bcache.h:181, from drivers/md/bcache/super.c:10: include/linux/slab.h:210:6: note: previous declaration of 'kfree' with type 'void(const void *)' 210 | void kfree(const void *objp); | ^~~~~ drivers/md/bcache/super.c:2632:9: warning: data definition has no type or storage class 2632 | kfree(path); | ^~~~~ drivers/md/bcache/super.c:2632:9: error: type defaults to 'int' in declaration of 'kfree' [-Werror=implicit-int] drivers/md/bcache/super.c:2632:9: warning: parameter names (without types) in function declaration drivers/md/bcache/super.c:2632:9: error: conflicting types for 'kfree'; have 'int()' include/linux/slab.h:210:6: note: previous declaration of 'kfree' with type 'void(const void *)' 210 | void kfree(const void *objp); | ^~~~~ In file included from include/linux/linkage.h:7, from include/linux/preempt.h:10, from include/linux/spinlock.h:56, from include/linux/wait.h:9, from include/linux/mempool.h:8, from include/linux/bio.h:8: >> include/linux/export.h:27:21: error: expected declaration specifiers or '...' before '(' token 27 | #define THIS_MODULE (&__this_module) | ^ drivers/md/bcache/super.c:2633:20: note: in expansion of macro 'THIS_MODULE' 2633 | module_put(THIS_MODULE); | ^~~~~~~~~~~ drivers/md/bcache/super.c:2634:11: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token 2634 | async_done: | ^ drivers/md/bcache/super.c:2637:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token 2637 | out_free_holder: | ^ drivers/md/bcache/super.c:2639:16: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token 2639 | out_put_sb_page: | ^ drivers/md/bcache/super.c:2641:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token 2641 | out_blkdev_put: | ^ drivers/md/bcache/super.c:2643:12: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token 2643 | out_free_sb: | ^ drivers/md/bcache/super.c:2645:14: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token 2645 | out_free_path: | ^ drivers/md/bcache/super.c:2647:9: warning: data definition has no type or storage class 2647 | path = NULL; | ^~~~ drivers/md/bcache/super.c:2647:9: error: type defaults to 'int' in declaration of 'path' [-Werror=implicit-int] In file included from include/uapi/linux/posix_types.h:5, from include/uapi/linux/types.h:14, from include/linux/types.h:6, from include/linux/kasan-checks.h:5, from include/asm-generic/rwonce.h:26, from arch/s390/include/asm/rwonce.h:29, from include/linux/compiler.h:247, from include/linux/build_bug.h:5, from include/linux/container_of.h:5, from include/linux/list.h:5, from include/linux/wait.h:7: include/linux/stddef.h:8:14: warning: initialization of 'int' from 'void *' makes integer from pointer without a cast [-Wint-conversion] 8 | #define NULL ((void *)0) | ^ drivers/md/bcache/super.c:2647:16: note: in expansion of macro 'NULL' 2647 | path = NULL; | ^~~~ drivers/md/bcache/super.c:2648:15: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token 2648 | out_module_put: | ^ drivers/md/bcache/super.c:2650:4: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token 2650 | out: | ^ In file included from include/asm-generic/bug.h:22, from arch/s390/include/asm/bug.h:69, from include/linux/bug.h:5, from include/linux/thread_info.h:13, from arch/s390/include/asm/preempt.h:6, from include/linux/preempt.h:78: include/linux/printk.h:428:10: error: expected identifier or '(' before ')' token 428 | }) | ^ include/linux/printk.h:455:26: note: in expansion of macro 'printk_index_wrap' 455 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__) | ^~~~~~~~~~~~~~~~~ include/linux/printk.h:528:9: note: in expansion of macro 'printk' 528 | printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) | ^~~~~~ drivers/md/bcache/super.c:2652:17: note: in expansion of macro 'pr_info' 2652 | pr_info("error %s: %s\n", path?path:"", err); | ^~~~~~~ drivers/md/bcache/super.c:2653:9: error: expected identifier or '(' before 'return' 2653 | return ret; | ^~~~~~ drivers/md/bcache/super.c:2654:1: error: expected identifier or '(' before '}' token 2654 | } | ^ drivers/md/bcache/super.c:2492:13: warning: 'register_device_async' defined but not used [-Wunused-function] 2492 | static void register_device_async(struct async_reg_args *args) | ^~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/out_free_holder +2591 drivers/md/bcache/super.c 2509 2510 static ssize_t register_bcache(struct kobject *k, struct kobj_attribute *attr, 2511 const char *buffer, size_t size) 2512 { 2513 const char *err; 2514 char *path = NULL; 2515 struct cache_sb *sb; 2516 struct cache_sb_disk *sb_disk; 2517 struct block_device *bdev, *bdev2; 2518 void *holder = NULL; > 2519 ssize_t ret; 2520 bool async_registration = false; > 2521 bool quiet = false; 2522 2523 #ifdef CONFIG_BCACHE_ASYNC_REGISTRATION 2524 async_registration = true; 2525 #endif 2526 2527 ret = -EBUSY; 2528 err = "failed to reference bcache module"; 2529 if (!try_module_get(THIS_MODULE)) > 2530 goto out; 2531 2532 /* For latest state of bcache_is_reboot */ 2533 smp_mb(); 2534 err = "bcache is in reboot"; 2535 if (bcache_is_reboot) 2536 goto out_module_put; 2537 2538 ret = -ENOMEM; 2539 err = "cannot allocate memory"; 2540 path = kstrndup(buffer, size, GFP_KERNEL); 2541 if (!path) > 2542 goto out_module_put; 2543 2544 sb = kmalloc(sizeof(struct cache_sb), GFP_KERNEL); 2545 if (!sb) > 2546 goto out_free_path; 2547 2548 ret = -EINVAL; 2549 err = "failed to open device"; 2550 bdev = blkdev_get_by_path(strim(path), BLK_OPEN_READ, NULL, NULL); 2551 if (IS_ERR(bdev)) > 2552 goto out_free_sb; 2553 2554 err = "failed to set blocksize"; 2555 if (set_blocksize(bdev, 4096)) 2556 goto out_blkdev_put; 2557 2558 err = read_super(sb, bdev, &sb_disk); 2559 if (err) > 2560 goto out_blkdev_put; 2561 2562 holder = alloc_holder_object(sb); 2563 if (!holder) { 2564 ret = -ENOMEM; 2565 err = "cannot allocate memory"; > 2566 goto out_put_sb_page; 2567 } 2568 2569 /* Now reopen in exclusive mode with proper holder */ 2570 bdev2 = blkdev_get_by_dev(bdev->bd_dev, BLK_OPEN_READ | BLK_OPEN_WRITE, 2571 holder, NULL); 2572 blkdev_put(bdev, NULL); 2573 bdev = bdev2; > 2574 if (IS_ERR(bdev)) 2575 ret = PTR_ERR(bdev); > 2576 if (bdev == ERR_PTR(-EBUSY)) { 2577 dev_t dev; 2578 2579 mutex_lock(&bch_register_lock); 2580 if (lookup_bdev(strim(path), &dev) == 0 && 2581 bch_is_open(dev)) 2582 err = "device already registered"; 2583 else 2584 err = "device busy"; 2585 mutex_unlock(&bch_register_lock); 2586 if (attr == &ksysfs_register_quiet) { 2587 quiet = true; 2588 ret = size; 2589 } 2590 } > 2591 goto out_free_holder; > 2592 } 2593 > 2594 err = "failed to register device"; 2595 > 2596 if (async_registration) { 2597 /* register in asynchronous way */ 2598 struct async_reg_args *args = 2599 kzalloc(sizeof(struct async_reg_args), GFP_KERNEL); 2600 2601 if (!args) { 2602 ret = -ENOMEM; 2603 err = "cannot allocate memory"; 2604 goto out_free_holder; 2605 } 2606 2607 args->path = path; 2608 args->sb = sb; 2609 args->sb_disk = sb_disk; 2610 args->bdev = bdev; 2611 args->holder = holder; 2612 register_device_async(args); 2613 /* No wait and returns to user space */ 2614 goto async_done; 2615 } 2616 > 2617 if (SB_IS_BDEV(sb)) { 2618 mutex_lock(&bch_register_lock); 2619 ret = register_bdev(sb, sb_disk, bdev, holder); 2620 mutex_unlock(&bch_register_lock); 2621 /* blkdev_put() will be called in cached_dev_free() */ 2622 if (ret < 0) 2623 goto out_free_sb; > 2624 } else { 2625 /* blkdev_put() will be called in bch_cache_release() */ 2626 ret = register_cache(sb, sb_disk, bdev, holder); 2627 if (ret) 2628 goto out_free_sb; 2629 } 2630 > 2631 kfree(sb); 2632 kfree(path); > 2633 module_put(THIS_MODULE); > 2634 async_done: 2635 return size; 2636 2637 out_free_holder: 2638 kfree(holder); 2639 out_put_sb_page: 2640 put_page(virt_to_page(sb_disk)); 2641 out_blkdev_put: 2642 blkdev_put(bdev, holder); > 2643 out_free_sb: 2644 kfree(sb); 2645 out_free_path: 2646 kfree(path); > 2647 path = NULL; 2648 out_module_put: 2649 module_put(THIS_MODULE); 2650 out: 2651 if (!quiet) > 2652 pr_info("error %s: %s\n", path?path:"", err); > 2653 return ret; > 2654 } 2655 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki