mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 22:21:42 +00:00
s390/dcssblk: fix deadlock when adding a DCSS
After the rework from commit1ebe2e5f9d
("block: remove GENHD_FL_EXT_DEVT"), when calling device_add_disk(), dcssblk will end up in disk_scan_partitions(), and not break out early w/o GENHD_FL_NO_PART. This will trigger implicit open/release via blkdev_get/put_whole() later. dcssblk_release() will then deadlock on dcssblk_devices_sem semaphore, which is already held from dcssblk_add_store() when calling device_add_disk(). dcssblk does not support partitions (DCSSBLK_MINORS_PER_DISK == 1), and never scanned partitions before. Therefore restore the previous behavior, and explicitly disallow partition scanning by setting the GENHD_FL_NO_PART flag. This will also prevent this deadlock scenario. Fixes:1ebe2e5f9d
("block: remove GENHD_FL_EXT_DEVT") Cc: <stable@vger.kernel.org> # 5.17+ Signed-off-by: Gerald Schaefer <gerald.schaefer@linux.ibm.com> Acked-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
This commit is contained in:
parent
30d17fac6a
commit
a41a11b400
@ -636,6 +636,7 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char
|
||||
dev_info->gd->minors = DCSSBLK_MINORS_PER_DISK;
|
||||
dev_info->gd->fops = &dcssblk_devops;
|
||||
dev_info->gd->private_data = dev_info;
|
||||
dev_info->gd->flags |= GENHD_FL_NO_PART;
|
||||
blk_queue_logical_block_size(dev_info->gd->queue, 4096);
|
||||
blk_queue_flag_set(QUEUE_FLAG_DAX, dev_info->gd->queue);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user