From b9dbb2b305f271f669d8eb5d211ec0a60528cbde Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 20 May 2021 10:50:16 +0200 Subject: [PATCH] drop queue-4.19/crypto-omap-aes-fix-pm-reference-leak-on-omap-aes.c.patch caused build errors --- ...-fix-pm-reference-leak-on-omap-aes.c.patch | 55 --------- ...urns-ebusy-when-entering-racing-area.patch | 109 +----------------- queue-4.19/series | 1 - 3 files changed, 2 insertions(+), 163 deletions(-) delete mode 100644 queue-4.19/crypto-omap-aes-fix-pm-reference-leak-on-omap-aes.c.patch diff --git a/queue-4.19/crypto-omap-aes-fix-pm-reference-leak-on-omap-aes.c.patch b/queue-4.19/crypto-omap-aes-fix-pm-reference-leak-on-omap-aes.c.patch deleted file mode 100644 index 7e94cd462f4..00000000000 --- a/queue-4.19/crypto-omap-aes-fix-pm-reference-leak-on-omap-aes.c.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 936529dd0dc33682c44260c24b139ae51a0653cf Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 8 Apr 2021 15:18:39 +0800 -Subject: crypto: omap-aes - Fix PM reference leak on omap-aes.c - -From: Shixin Liu - -[ Upstream commit 1f34cc4a8da34fbb250efb928f9b8c6fe7ee0642 ] - -pm_runtime_get_sync will increment pm usage counter even it failed. -Forgetting to putting operation will result in reference leak here. -Fix it by replacing it with pm_runtime_resume_and_get to keep usage -counter balanced. - -Signed-off-by: Shixin Liu -Signed-off-by: Herbert Xu -Signed-off-by: Sasha Levin ---- - drivers/crypto/omap-aes.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c -index a5d6e1a0192b..2288fa6a939e 100644 ---- a/drivers/crypto/omap-aes.c -+++ b/drivers/crypto/omap-aes.c -@@ -107,7 +107,7 @@ static int omap_aes_hw_init(struct omap_aes_dev *dd) - dd->err = 0; - } - -- err = pm_runtime_get_sync(dd->dev); -+ err = pm_runtime_resume_and_get(dd->dev); - if (err < 0) { - dev_err(dd->dev, "failed to get sync: %d\n", err); - return err; -@@ -1159,7 +1159,7 @@ static int omap_aes_probe(struct platform_device *pdev) - pm_runtime_set_autosuspend_delay(dev, DEFAULT_AUTOSUSPEND_DELAY); - - pm_runtime_enable(dev); -- err = pm_runtime_get_sync(dev); -+ err = pm_runtime_resume_and_get(dev); - if (err < 0) { - dev_err(dev, "%s: failed to get_sync(%d)\n", - __func__, err); -@@ -1327,7 +1327,7 @@ static int omap_aes_suspend(struct device *dev) - - static int omap_aes_resume(struct device *dev) - { -- pm_runtime_get_sync(dev); -+ pm_runtime_resume_and_get(dev); - return 0; - } - #endif --- -2.30.2 - diff --git a/queue-4.19/md-md_open-returns-ebusy-when-entering-racing-area.patch b/queue-4.19/md-md_open-returns-ebusy-when-entering-racing-area.patch index 3dbe4fcde4f..7019f26b65b 100644 --- a/queue-4.19/md-md_open-returns-ebusy-when-entering-racing-area.patch +++ b/queue-4.19/md-md_open-returns-ebusy-when-entering-racing-area.patch @@ -23,115 +23,13 @@ md_open should call new mddev_find (it only does searching job). For more detail, please refer with Christoph's "split mddev_find" patch in later commits. -*** env *** -kvm-qemu VM 2C1G with 2 iscsi luns -kernel should be non-preempt - -*** script *** - -about trigger every time with below script - -``` -1 node1="mdcluster1" -2 node2="mdcluster2" -3 -4 mdadm -Ss -5 ssh ${node2} "mdadm -Ss" -6 wipefs -a /dev/sda /dev/sdb -7 mdadm -CR /dev/md0 -b clustered -e 1.2 -n 2 -l mirror /dev/sda \ - /dev/sdb --assume-clean -8 -9 for i in {1..10}; do -10 echo ==== $i ====; -11 -12 echo "test ...." -13 ssh ${node2} "mdadm -A /dev/md0 /dev/sda /dev/sdb" -14 sleep 1 -15 -16 echo "clean ....." -17 ssh ${node2} "mdadm -Ss" -18 done -``` - -I use mdcluster env to trigger soft lockup, but it isn't mdcluster -speical bug. To stop md array in mdcluster env will do more jobs than -non-cluster array, which will leave enough time/gap to allow kernel to -run md_open. - -*** stack *** - -``` -[ 884.226509] mddev_put+0x1c/0xe0 [md_mod] -[ 884.226515] md_open+0x3c/0xe0 [md_mod] -[ 884.226518] __blkdev_get+0x30d/0x710 -[ 884.226520] ? bd_acquire+0xd0/0xd0 -[ 884.226522] blkdev_get+0x14/0x30 -[ 884.226524] do_dentry_open+0x204/0x3a0 -[ 884.226531] path_openat+0x2fc/0x1520 -[ 884.226534] ? seq_printf+0x4e/0x70 -[ 884.226536] do_filp_open+0x9b/0x110 -[ 884.226542] ? md_release+0x20/0x20 [md_mod] -[ 884.226543] ? seq_read+0x1d8/0x3e0 -[ 884.226545] ? kmem_cache_alloc+0x18a/0x270 -[ 884.226547] ? do_sys_open+0x1bd/0x260 -[ 884.226548] do_sys_open+0x1bd/0x260 -[ 884.226551] do_syscall_64+0x5b/0x1e0 -[ 884.226554] entry_SYSCALL_64_after_hwframe+0x44/0xa9 -``` - -*** rootcause *** - -"mdadm -A" (or other array assemble commands) will start a daemon "mdadm ---monitor" by default. When "mdadm -Ss" is running, the stop action will -wakeup "mdadm --monitor". The "--monitor" daemon will immediately get -info from /proc/mdstat. This time mddev in kernel still exist, so -/proc/mdstat still show md device, which makes "mdadm --monitor" to open -/dev/md0. - -The previously "mdadm -Ss" is removing action, the "mdadm --monitor" -open action will trigger md_open which is creating action. Racing is -happening. - -``` -: "mdadm -Ss" -md_release - mddev_put deletes mddev from all_mddevs - queue_work for mddev_delayed_delete - at this time, "/dev/md0" is still available for opening - -: "mdadm --monitor ..." -md_open - + mddev_find can't find mddev of /dev/md0, and create a new mddev and - | return. - + trigger "if (mddev->gendisk != bdev->bd_disk)" and return - -ERESTARTSYS. -``` - -In non-preempt kernel, is occupying on current CPU. and -mddev_delayed_delete which was created in also can't be -schedule. - -In preempt kernel, it can also trigger above racing. But kernel doesn't -allow one thread running on a CPU all the time. after running -some time, the later "mdadm -A" (refer above script line 13) will call -md_alloc to alloc a new gendisk for mddev. it will break md_open -statement "if (mddev->gendisk != bdev->bd_disk)" and return 0 to caller, -the soft lockup is broken. - -Cc: stable@vger.kernel.org -Reviewed-by: Christoph Hellwig -Signed-off-by: Zhao Heming -Signed-off-by: Song Liu -Signed-off-by: Greg Kroah-Hartman --- - drivers/md/md.c | 3 +-- + drivers/md/md.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) -diff --git a/drivers/md/md.c b/drivers/md/md.c -index 368cad6cd53a..464cca5d5952 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c -@@ -7821,8 +7821,7 @@ static int md_open(struct block_device *bdev, fmode_t mode) +@@ -7481,8 +7481,7 @@ static int md_open(struct block_device * /* Wait until bdev->bd_disk is definitely gone */ if (work_pending(&mddev->del_work)) flush_workqueue(md_misc_wq); @@ -141,6 +39,3 @@ index 368cad6cd53a..464cca5d5952 100644 } BUG_ON(mddev != bdev->bd_disk->private_data); --- -2.31.1 - diff --git a/queue-4.19/series b/queue-4.19/series index 3e86be5c241..3289651bcd2 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -38,7 +38,6 @@ spi-dln2-fix-reference-leak-to-master.patch spi-omap-100k-fix-reference-leak-to-master.patch intel_th-consistency-and-off-by-one-fix.patch phy-phy-twl4030-usb-fix-possible-use-after-free-in-t.patch -crypto-omap-aes-fix-pm-reference-leak-on-omap-aes.c.patch btrfs-convert-logic-bug_on-s-in-replace_path-to-asse.patch scsi-lpfc-fix-incorrect-dbde-assignment-when-buildin.patch scsi-lpfc-fix-pt2pt-connection-does-not-recover-afte.patch -- 2.47.3