From: Chaitanya Kulkarni <kch@nvidia.com> mainline inclusion from mainline-v7.2-rc1 commit 7882834048f110931275357db60dccff906dc96a category: feature bugzilla: https://atomgit.com/openeuler/kernel/issues/10302 Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?i... -------------------------------- BLK_FEAT_NOWAIT and BLK_FEAT_POLL are cleared in blk_stack_limits() when an underlying device does not support them. Apply the same treatment to BLK_FEAT_PCI_P2PDMA: stacking drivers set it unconditionally and rely on the core to clear it whenever a non-supporting member device is stacked. Tested-by: Pranjal Shrivastava <praan@google.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Reviewed-by: Nitesh Shetty <nj.shetty@samsung.com> Signed-off-by: Chaitanya Kulkarni <kch@nvidia.com> Tested=by: Pranjal Shrivastava <praan@google.com> Link: https://patch.msgid.link/20260513185153.95552-2-kch@nvidia.com Signed-off-by: Jens Axboe <axboe@kernel.dk> Conflicts: block/blk-settings.c [OLK-6.6 has no queue_limits.features. PCI P2PDMA support is tracked as QUEUE_FLAG_PCI_P2PDMA in struct request_queue, which blk_stack_limits() cannot access because it only receives struct queue_limits. Clear the queue flag in disk_stack_limits() instead, which has both the stacking queue and the member queue.] Signed-off-by: Zizhi Wo <wozizhi@huawei.com> --- block/blk-settings.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/block/blk-settings.c b/block/blk-settings.c index 66c4d8a6399c..23e3b6b0c266 100644 --- a/block/blk-settings.c +++ b/block/blk-settings.c @@ -799,10 +799,13 @@ void disk_stack_limits(struct gendisk *disk, struct block_device *bdev, if (blk_stack_limits(&t->limits, &bdev_get_queue(bdev)->limits, get_start_sect(bdev) + (offset >> 9)) < 0) pr_notice("%s: Warning: Device %pg is misaligned\n", disk->disk_name, bdev); + if (!blk_queue_pci_p2pdma(bdev_get_queue(bdev))) + blk_queue_flag_clear(QUEUE_FLAG_PCI_P2PDMA, t); + disk_update_readahead(disk); } EXPORT_SYMBOL(disk_stack_limits); /** -- 2.52.0