]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 24 Nov 2023 16:06:21 +0000 (16:06 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 24 Nov 2023 16:06:21 +0000 (16:06 +0000)
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

queue-4.19/iomap-set-all-uptodate-bits-for-an-uptodate-page.patch [new file with mode: 0644]
queue-4.19/scsi-virtio_scsi-limit-number-of-hw-queues-by-nr_cpu_ids.patch [new file with mode: 0644]
queue-4.19/series

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 (file)
index 0000000..8200696
--- /dev/null
@@ -0,0 +1,51 @@
+From 4595a298d5563cf76c1d852970f162051fd1a7a6 Mon Sep 17 00:00:00 2001
+From: "Matthew Wilcox (Oracle)" <willy@infradead.org>
+Date: Fri, 25 Sep 2020 11:16:53 -0700
+Subject: iomap: Set all uptodate bits for an Uptodate page
+
+From: Matthew Wilcox (Oracle) <willy@infradead.org>
+
+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) <willy@infradead.org>
+Reported-by: Qian Cai <cai@redhat.com>
+Cc: Brian Foster <bfoster@redhat.com>
+Reviewed-by: Gao Xiang <hsiangkao@redhat.com>
+Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
+Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Shida Zhang <zhangshida@kylinos.cn>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..5c0fe38
--- /dev/null
@@ -0,0 +1,41 @@
+From 1978f30a87732d4d9072a20abeded9fe17884f1b Mon Sep 17 00:00:00 2001
+From: Dongli Zhang <dongli.zhang@oracle.com>
+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 <dongli.zhang@oracle.com>
+
+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 <stefanha@redhat.com>
+Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Kunkun Jiang <jiangkunkun@huawei.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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;
index 9c8df15ca5bd1469a09d2aae42d08eb4d0387871..01b1f849d69d0ada98649f93994b380c0a44abe6 100644 (file)
@@ -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