I reverted this patch.

Mikulas



On Mon, 5 Jan 2026, kernel test robot wrote:

> tree:   
> https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git 
> for-next
> head:   89db2b980bb27a5ec625382f8fe7798f6ab10d01
> commit: 5cf739d81755e49c39a3bd3c8bf5ec57441710b5 [6/15] dm init: ensure block 
> device is ready before creating mapped device
> config: sparc-randconfig-002-20260104 
> (https://download.01.org/0day-ci/archive/20260105/[email protected]/config)
> compiler: sparc-linux-gcc (GCC) 12.5.0
> reproduce (this is a W=1 build): 
> (https://download.01.org/0day-ci/archive/20260105/[email protected]/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 <[email protected]>
> | Closes: 
> https://lore.kernel.org/oe-kbuild-all/[email protected]/
> 
> All errors (new ones prefixed by >>):
> 
>    drivers/md/dm-init.c: In function 'dm_init_init':
> >> drivers/md/dm-init.c:314:41: error: implicit declaration of function 
> >> 'blkdev_get_no_open'; did you mean 'blkdev_get_zone_info'? 
> >> [-Werror=implicit-function-declaration]
>      314 |                         while (!(bdev = blkdev_get_no_open(dev, 
> false)))
>          |                                         ^~~~~~~~~~~~~~~~~~
>          |                                         blkdev_get_zone_info
>    drivers/md/dm-init.c:314:39: warning: assignment to 'struct block_device 
> *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>      314 |                         while (!(bdev = blkdev_get_no_open(dev, 
> false)))
>          |                                       ^
> >> drivers/md/dm-init.c:316:25: error: implicit declaration of function 
> >> 'blkdev_put_no_open' [-Werror=implicit-function-declaration]
>      316 |                         blkdev_put_no_open(bdev);
>          |                         ^~~~~~~~~~~~~~~~~~
>    cc1: some warnings being treated as errors
> 
> 
> vim +314 drivers/md/dm-init.c
> 
>    267        
>    268        /**
>    269         * dm_init_init - parse "dm-mod.create=" argument and configure 
> drivers
>    270         */
>    271        static int __init dm_init_init(void)
>    272        {
>    273                struct dm_device *dev;
>    274                LIST_HEAD(devices);
>    275                char *str;
>    276                int i, r;
>    277        
>    278                if (!create)
>    279                        return 0;
>    280        
>    281                if (strlen(create) >= DM_MAX_STR_SIZE) {
>    282                        DMERR("Argument is too big. Limit is %d", 
> DM_MAX_STR_SIZE);
>    283                        return -EINVAL;
>    284                }
>    285                str = kstrndup(create, DM_MAX_STR_SIZE, GFP_KERNEL);
>    286                if (!str)
>    287                        return -ENOMEM;
>    288        
>    289                r = dm_parse_devices(&devices, str);
>    290                if (r)
>    291                        goto out;
>    292        
>    293                DMINFO("waiting for all devices to be available before 
> creating mapped devices");
>    294                wait_for_device_probe();
>    295        
>    296                for (i = 0; i < ARRAY_SIZE(waitfor); i++) {
>    297                        if (waitfor[i]) {
>    298                                dev_t dev;
>    299                                struct block_device *bdev;
>    300        
>    301                                DMINFO("waiting for device %s ...", 
> waitfor[i]);
>    302                                while (early_lookup_bdev(waitfor[i], 
> &dev))
>    303                                        fsleep(5000);
>    304        
>    305                                /*
>    306                                 * early_lookup_bdev() only checks if 
> the device node exists and
>    307                                 * returns the dev_t. It does not 
> guarantee that the underlying
>    308                                 * block device is fully initialized 
> and ready to be opened. On
>    309                                 * some platforms, this can lead to a 
> race condition where
>    310                                 * dm_early_create() fails because the 
> device is not yet ready.
>    311                                 * Ensure the block device is truly 
> available by attempting to
>    312                                 * get it.
>    313                                 */
>  > 314                                while (!(bdev = blkdev_get_no_open(dev, 
> false)))
>    315                                        fsleep(5000);
>  > 316                                blkdev_put_no_open(bdev);
>    317                        }
>    318                }
>    319        
>    320                if (waitfor[0])
>    321                        DMINFO("all devices available");
>    322        
>    323                list_for_each_entry(dev, &devices, list) {
>    324                        if (dm_early_create(&dev->dmi, dev->table,
>    325                                            dev->target_args_array))
>    326                                break;
>    327                }
>    328        out:
>    329                kfree(str);
>    330                dm_setup_cleanup(&devices);
>    331                return r;
>    332        }
>    333        
> 
> -- 
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
> 


Reply via email to