From c18b7f613ce7e42b49ced206c70b4fd9a44cf013 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 24 Nov 2023 16:06:21 +0000 Subject: [PATCH] 4.19-stable patches added patches: iomap-set-all-uptodate-bits-for-an-uptodate-page.patch scsi-virtio_scsi-limit-number-of-hw-queues-by-nr_cpu_ids.patch --- ...l-uptodate-bits-for-an-uptodate-page.patch | 51 +++++++++++++++++++ ...it-number-of-hw-queues-by-nr_cpu_ids.patch | 41 +++++++++++++++ queue-4.19/series | 2 + 3 files changed, 94 insertions(+) create mode 100644 queue-4.19/iomap-set-all-uptodate-bits-for-an-uptodate-page.patch create mode 100644 queue-4.19/scsi-virtio_scsi-limit-number-of-hw-queues-by-nr_cpu_ids.patch diff --git a/queue-4.19/iomap-set-all-uptodate-bits-for-an-uptodate-page.patch b/queue-4.19/iomap-set-all-uptodate-bits-for-an-uptodate-page.patch new file mode 100644 index 00000000000..82006964895 --- /dev/null +++ b/queue-4.19/iomap-set-all-uptodate-bits-for-an-uptodate-page.patch @@ -0,0 +1,51 @@ +From 4595a298d5563cf76c1d852970f162051fd1a7a6 Mon Sep 17 00:00:00 2001 +From: "Matthew Wilcox (Oracle)" +Date: Fri, 25 Sep 2020 11:16:53 -0700 +Subject: iomap: Set all uptodate bits for an Uptodate page + +From: Matthew Wilcox (Oracle) + +commit 4595a298d5563cf76c1d852970f162051fd1a7a6 upstream. + +For filesystems with block size < page size, we need to set all the +per-block uptodate bits if the page was already uptodate at the time +we create the per-block metadata. This can happen if the page is +invalidated (eg by a write to drop_caches) but ultimately not removed +from the page cache. + +This is a data corruption issue as page writeback skips blocks which +are marked !uptodate. + +Fixes: 9dc55f1389f9 ("iomap: add support for sub-pagesize buffered I/O without buffer heads") +Signed-off-by: Matthew Wilcox (Oracle) +Reported-by: Qian Cai +Cc: Brian Foster +Reviewed-by: Gao Xiang +Reviewed-by: Darrick J. Wong +Signed-off-by: Darrick J. Wong +Reviewed-by: Christoph Hellwig +Signed-off-by: Shida Zhang +Signed-off-by: Greg Kroah-Hartman +--- + fs/iomap.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/fs/iomap.c ++++ b/fs/iomap.c +@@ -109,6 +109,7 @@ static struct iomap_page * + iomap_page_create(struct inode *inode, struct page *page) + { + struct iomap_page *iop = to_iomap_page(page); ++ unsigned int nr_blocks = PAGE_SIZE / i_blocksize(inode); + + if (iop || i_blocksize(inode) == PAGE_SIZE) + return iop; +@@ -118,6 +119,8 @@ iomap_page_create(struct inode *inode, s + atomic_set(&iop->write_count, 0); + spin_lock_init(&iop->uptodate_lock); + bitmap_zero(iop->uptodate, PAGE_SIZE / SECTOR_SIZE); ++ if (PageUptodate(page)) ++ bitmap_fill(iop->uptodate, nr_blocks); + + /* + * migrate_page_move_mapping() assumes that pages with private data have diff --git a/queue-4.19/scsi-virtio_scsi-limit-number-of-hw-queues-by-nr_cpu_ids.patch b/queue-4.19/scsi-virtio_scsi-limit-number-of-hw-queues-by-nr_cpu_ids.patch new file mode 100644 index 00000000000..5c0fe38a30b --- /dev/null +++ b/queue-4.19/scsi-virtio_scsi-limit-number-of-hw-queues-by-nr_cpu_ids.patch @@ -0,0 +1,41 @@ +From 1978f30a87732d4d9072a20abeded9fe17884f1b Mon Sep 17 00:00:00 2001 +From: Dongli Zhang +Date: Wed, 27 Mar 2019 18:36:35 +0800 +Subject: scsi: virtio_scsi: limit number of hw queues by nr_cpu_ids + +From: Dongli Zhang + +commit 1978f30a87732d4d9072a20abeded9fe17884f1b upstream. + +When tag_set->nr_maps is 1, the block layer limits the number of hw queues +by nr_cpu_ids. No matter how many hw queues are used by virtio-scsi, as it +has (tag_set->nr_maps == 1), it can use at most nr_cpu_ids hw queues. + +In addition, specifically for pci scenario, when the 'num_queues' specified +by qemu is more than maxcpus, virtio-scsi would not be able to allocate +more than maxcpus vectors in order to have a vector for each queue. As a +result, it falls back into MSI-X with one vector for config and one shared +for queues. + +Considering above reasons, this patch limits the number of hw queues used +by virtio-scsi by nr_cpu_ids. + +Reviewed-by: Stefan Hajnoczi +Signed-off-by: Dongli Zhang +Signed-off-by: Jens Axboe +Signed-off-by: Kunkun Jiang +Signed-off-by: Greg Kroah-Hartman +--- + drivers/scsi/virtio_scsi.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/scsi/virtio_scsi.c ++++ b/drivers/scsi/virtio_scsi.c +@@ -853,6 +853,7 @@ static int virtscsi_probe(struct virtio_ + + /* We need to know how many queues before we allocate. */ + num_queues = virtscsi_config_get(vdev, num_queues) ? : 1; ++ num_queues = min_t(unsigned int, nr_cpu_ids, num_queues); + + num_targets = virtscsi_config_get(vdev, max_target) + 1; + diff --git a/queue-4.19/series b/queue-4.19/series index 9c8df15ca5b..01b1f849d69 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -92,3 +92,5 @@ ext4-correct-offset-of-gdb-backup-in-non-meta_bg-group-to-update_backups.patch ext4-correct-return-value-of-ext4_convert_meta_bg.patch ext4-remove-gdb-backup-copy-for-meta-bg-in-setup_new_flex_group_blocks.patch drm-amdgpu-fix-error-handling-in-amdgpu_bo_list_get.patch +scsi-virtio_scsi-limit-number-of-hw-queues-by-nr_cpu_ids.patch +iomap-set-all-uptodate-bits-for-an-uptodate-page.patch -- 2.47.3