mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-08-22 00:42:01 +02:00
block: retry call probe after request_module in blk_request_module
Set kernel config: CONFIG_BLK_DEV_LOOP=m CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 Do latter: mknod loop0 b 7 0 exec 4<> loop0 Before commite418de3abc
("block: switch gendisk lookup to a simple xarray"), lookup_gendisk will first use base_probe to load module loop, and then the retry will call loop_probe to prepare the loop disk. Finally open for this disk will success. However, after this commit, we lose the retry logic, and open will fail with ENXIO. Block device autoloading is deprecated and will be removed soon, but maybe we should keep open success until we really remove it. So, give a retry to fix it. Fixes:e418de3abc
("block: switch gendisk lookup to a simple xarray") Suggested-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Yang Erkun <yangerkun@huawei.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Link: https://lore.kernel.org/r/20241209110435.3670985-1-yangerkun@huaweicloud.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
00aab2f236
commit
457ef47c08
|
@ -797,7 +797,7 @@ static ssize_t disk_badblocks_store(struct device *dev,
|
|||
}
|
||||
|
||||
#ifdef CONFIG_BLOCK_LEGACY_AUTOLOAD
|
||||
void blk_request_module(dev_t devt)
|
||||
static bool blk_probe_dev(dev_t devt)
|
||||
{
|
||||
unsigned int major = MAJOR(devt);
|
||||
struct blk_major_name **n;
|
||||
|
@ -807,14 +807,26 @@ void blk_request_module(dev_t devt)
|
|||
if ((*n)->major == major && (*n)->probe) {
|
||||
(*n)->probe(devt);
|
||||
mutex_unlock(&major_names_lock);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&major_names_lock);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (request_module("block-major-%d-%d", MAJOR(devt), MINOR(devt)) > 0)
|
||||
/* Make old-style 2.4 aliases work */
|
||||
request_module("block-major-%d", MAJOR(devt));
|
||||
void blk_request_module(dev_t devt)
|
||||
{
|
||||
int error;
|
||||
|
||||
if (blk_probe_dev(devt))
|
||||
return;
|
||||
|
||||
error = request_module("block-major-%d-%d", MAJOR(devt), MINOR(devt));
|
||||
/* Make old-style 2.4 aliases work */
|
||||
if (error > 0)
|
||||
error = request_module("block-major-%d", MAJOR(devt));
|
||||
if (!error)
|
||||
blk_probe_dev(devt);
|
||||
}
|
||||
#endif /* CONFIG_BLOCK_LEGACY_AUTOLOAD */
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user