From: Greg Kroah-Hartman Date: Mon, 28 Dec 2020 09:35:52 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v4.4.249~20 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d4e9250db2fe202f7c91db2d7f3faae1cde67f2e;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch ext4-fix-a-memory-leak-of-ext4_free_data.patch jffs2-fix-gc-exit-abnormally.patch kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch powerpc-xmon-change-printk-to-pr_cont.patch --- diff --git a/queue-4.9/btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch b/queue-4.9/btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch new file mode 100644 index 00000000000..1541375e08c --- /dev/null +++ b/queue-4.9/btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch @@ -0,0 +1,36 @@ +From foo@baz Mon Dec 28 10:12:24 AM CET 2020 +From: Pavel Machek +Date: Mon, 3 Aug 2020 11:35:06 +0200 +Subject: btrfs: fix return value mixup in btrfs_get_extent + +From: Pavel Machek + +commit 881a3a11c2b858fe9b69ef79ac5ee9978a266dc9 upstream + +btrfs_get_extent() sets variable ret, but out: error path expect error +to be in variable err so the error code is lost. + +Fixes: 6bf9e4bd6a27 ("btrfs: inode: Verify inode mode to avoid NULL pointer dereference") +CC: stable@vger.kernel.org # 5.4+ +Reviewed-by: Nikolay Borisov +Signed-off-by: Pavel Machek (CIP) +Reviewed-by: David Sterba +Signed-off-by: David Sterba +[sudip: adjust context] +Signed-off-by: Sudip Mukherjee +Signed-off-by: Greg Kroah-Hartman +--- + fs/btrfs/inode.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/fs/btrfs/inode.c ++++ b/fs/btrfs/inode.c +@@ -7000,7 +7000,7 @@ again: + found_type == BTRFS_FILE_EXTENT_PREALLOC) { + /* Only regular file could have regular/prealloc extent */ + if (!S_ISREG(inode->i_mode)) { +- ret = -EUCLEAN; ++ err = -EUCLEAN; + btrfs_crit(root->fs_info, + "regular/prealloc extent found for non-regular inode %llu", + btrfs_ino(inode)); diff --git a/queue-4.9/btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch b/queue-4.9/btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch new file mode 100644 index 00000000000..89eec9d7ba3 --- /dev/null +++ b/queue-4.9/btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch @@ -0,0 +1,83 @@ +From foo@baz Mon Dec 28 10:12:24 AM CET 2020 +From: Filipe Manana +Date: Wed, 18 Sep 2019 13:08:52 +0100 +Subject: Btrfs: fix selftests failure due to uninitialized i_mode in test inodes + +From: Filipe Manana + +commit 9f7fec0ba89108b9385f1b9fb167861224912a4a upstream + +Some of the self tests create a test inode, setup some extents and then do +calls to btrfs_get_extent() to test that the corresponding extent maps +exist and are correct. However btrfs_get_extent(), since the 5.2 merge +window, now errors out when it finds a regular or prealloc extent for an +inode that does not correspond to a regular file (its ->i_mode is not +S_IFREG). This causes the self tests to fail sometimes, specially when +KASAN, slub_debug and page poisoning are enabled: + + $ modprobe btrfs + modprobe: ERROR: could not insert 'btrfs': Invalid argument + + $ dmesg + [ 9414.691648] Btrfs loaded, crc32c=crc32c-intel, debug=on, assert=on, integrity-checker=on, ref-verify=on + [ 9414.692655] BTRFS: selftest: sectorsize: 4096 nodesize: 4096 + [ 9414.692658] BTRFS: selftest: running btrfs free space cache tests + [ 9414.692918] BTRFS: selftest: running extent only tests + [ 9414.693061] BTRFS: selftest: running bitmap only tests + [ 9414.693366] BTRFS: selftest: running bitmap and extent tests + [ 9414.696455] BTRFS: selftest: running space stealing from bitmap to extent tests + [ 9414.697131] BTRFS: selftest: running extent buffer operation tests + [ 9414.697133] BTRFS: selftest: running btrfs_split_item tests + [ 9414.697564] BTRFS: selftest: running extent I/O tests + [ 9414.697583] BTRFS: selftest: running find delalloc tests + [ 9415.081125] BTRFS: selftest: running find_first_clear_extent_bit test + [ 9415.081278] BTRFS: selftest: running extent buffer bitmap tests + [ 9415.124192] BTRFS: selftest: running inode tests + [ 9415.124195] BTRFS: selftest: running btrfs_get_extent tests + [ 9415.127909] BTRFS: selftest: running hole first btrfs_get_extent test + [ 9415.128343] BTRFS critical (device (efault)): regular/prealloc extent found for non-regular inode 256 + [ 9415.131428] BTRFS: selftest: fs/btrfs/tests/inode-tests.c:904 expected a real extent, got 0 + +This happens because the test inodes are created without ever initializing +the i_mode field of the inode, and neither VFS's new_inode() nor the btrfs +callback btrfs_alloc_inode() initialize the i_mode. Initialization of the +i_mode is done through the various callbacks used by the VFS to create +new inodes (regular files, directories, symlinks, tmpfiles, etc), which +all call btrfs_new_inode() which in turn calls inode_init_owner(), which +sets the inode's i_mode. Since the tests only uses new_inode() to create +the test inodes, the i_mode was never initialized. + +This always happens on a VM I used with kasan, slub_debug and many other +debug facilities enabled. It also happened to someone who reported this +on bugzilla (on a 5.3-rc). + +Fix this by setting i_mode to S_IFREG at btrfs_new_test_inode(). + +Fixes: 6bf9e4bd6a2778 ("btrfs: inode: Verify inode mode to avoid NULL pointer dereference") +Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=204397 +Signed-off-by: Filipe Manana +Reviewed-by: Qu Wenruo +Signed-off-by: David Sterba +Signed-off-by: Sudip Mukherjee +Signed-off-by: Greg Kroah-Hartman +--- + fs/btrfs/tests/btrfs-tests.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- a/fs/btrfs/tests/btrfs-tests.c ++++ b/fs/btrfs/tests/btrfs-tests.c +@@ -51,7 +51,13 @@ static struct file_system_type test_type + + struct inode *btrfs_new_test_inode(void) + { +- return new_inode(test_mnt->mnt_sb); ++ struct inode *inode; ++ ++ inode = new_inode(test_mnt->mnt_sb); ++ if (inode) ++ inode_init_owner(inode, NULL, S_IFREG); ++ ++ return inode; + } + + static int btrfs_init_test_fs(void) diff --git a/queue-4.9/btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch b/queue-4.9/btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch new file mode 100644 index 00000000000..111118fc558 --- /dev/null +++ b/queue-4.9/btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch @@ -0,0 +1,47 @@ +From foo@baz Mon Dec 28 10:12:24 AM CET 2020 +From: Qu Wenruo +Date: Wed, 27 Jun 2018 18:19:55 +0800 +Subject: btrfs: quota: Set rescan progress to (u64)-1 if we hit last leaf + +From: Qu Wenruo + +commoit 6f7de19ed3d4d3526ca5eca428009f97cf969c2f upstream + +Commit ff3d27a048d9 ("btrfs: qgroup: Finish rescan when hit the last leaf +of extent tree") added a new exit for rescan finish. + +However after finishing quota rescan, we set +fs_info->qgroup_rescan_progress to (u64)-1 before we exit through the +original exit path. +While we missed that assignment of (u64)-1 in the new exit path. + +The end result is, the quota status item doesn't have the same value. +(-1 vs the last bytenr + 1) +Although it doesn't affect quota accounting, it's still better to keep +the original behavior. + +Reported-by: Misono Tomohiro +Fixes: ff3d27a048d9 ("btrfs: qgroup: Finish rescan when hit the last leaf of extent tree") +Signed-off-by: Qu Wenruo +Reviewed-by: Misono Tomohiro +Signed-off-by: David Sterba +Signed-off-by: Sudip Mukherjee +Signed-off-by: Greg Kroah-Hartman +--- + fs/btrfs/qgroup.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/fs/btrfs/qgroup.c ++++ b/fs/btrfs/qgroup.c +@@ -2340,8 +2340,10 @@ out: + } + btrfs_put_tree_mod_seq(fs_info, &tree_mod_seq_elem); + +- if (done && !ret) ++ if (done && !ret) { + ret = 1; ++ fs_info->qgroup_rescan_progress.objectid = (u64)-1; ++ } + return ret; + } + diff --git a/queue-4.9/btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch b/queue-4.9/btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch new file mode 100644 index 00000000000..8e5e10bd587 --- /dev/null +++ b/queue-4.9/btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch @@ -0,0 +1,89 @@ +From foo@baz Mon Dec 28 10:12:24 AM CET 2020 +From: Qu Wenruo +Date: Wed, 11 Jul 2018 13:41:21 +0800 +Subject: btrfs: scrub: Don't use inode page cache in scrub_handle_errored_block() + +From: Qu Wenruo + +commit 665d4953cde6d9e75c62a07ec8f4f8fd7d396ade upstream + +In commit ac0b4145d662 ("btrfs: scrub: Don't use inode pages for device +replace") we removed the branch of copy_nocow_pages() to avoid +corruption for compressed nodatasum extents. + +However above commit only solves the problem in scrub_extent(), if +during scrub_pages() we failed to read some pages, +sctx->no_io_error_seen will be non-zero and we go to fixup function +scrub_handle_errored_block(). + +In scrub_handle_errored_block(), for sctx without csum (no matter if +we're doing replace or scrub) we go to scrub_fixup_nodatasum() routine, +which does the similar thing with copy_nocow_pages(), but does it +without the extra check in copy_nocow_pages() routine. + +So for test cases like btrfs/100, where we emulate read errors during +replace/scrub, we could corrupt compressed extent data again. + +This patch will fix it just by avoiding any "optimization" for +nodatasum, just falls back to the normal fixup routine by try read from +any good copy. + +This also solves WARN_ON() or dead lock caused by lame backref iteration +in scrub_fixup_nodatasum() routine. + +The deadlock or WARN_ON() won't be triggered before commit ac0b4145d662 +("btrfs: scrub: Don't use inode pages for device replace") since +copy_nocow_pages() have better locking and extra check for data extent, +and it's already doing the fixup work by try to read data from any good +copy, so it won't go scrub_fixup_nodatasum() anyway. + +This patch disables the faulty code and will be removed completely in a +followup patch. + +Fixes: ac0b4145d662 ("btrfs: scrub: Don't use inode pages for device replace") +Signed-off-by: Qu Wenruo +Signed-off-by: David Sterba +[sudip: adjust context] +Signed-off-by: Sudip Mukherjee +Signed-off-by: Greg Kroah-Hartman +--- + fs/btrfs/scrub.c | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +--- a/fs/btrfs/scrub.c ++++ b/fs/btrfs/scrub.c +@@ -919,11 +919,6 @@ static int scrub_handle_errored_block(st + have_csum = sblock_to_check->pagev[0]->have_csum; + dev = sblock_to_check->pagev[0]->dev; + +- if (sctx->is_dev_replace && !is_metadata && !have_csum) { +- sblocks_for_recheck = NULL; +- goto nodatasum_case; +- } +- + /* + * read all mirrors one after the other. This includes to + * re-read the extent or metadata block that failed (that was +@@ -1036,13 +1031,19 @@ static int scrub_handle_errored_block(st + goto out; + } + +- if (!is_metadata && !have_csum) { ++ /* ++ * NOTE: Even for nodatasum case, it's still possible that it's a ++ * compressed data extent, thus scrub_fixup_nodatasum(), which write ++ * inode page cache onto disk, could cause serious data corruption. ++ * ++ * So here we could only read from disk, and hope our recovery could ++ * reach disk before the newer write. ++ */ ++ if (0 && !is_metadata && !have_csum) { + struct scrub_fixup_nodatasum *fixup_nodatasum; + + WARN_ON(sctx->is_dev_replace); + +-nodatasum_case: +- + /* + * !is_metadata and !have_csum, this means that the data + * might not be COWed, that it might be modified diff --git a/queue-4.9/ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch b/queue-4.9/ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch new file mode 100644 index 00000000000..1cffa06afc4 --- /dev/null +++ b/queue-4.9/ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch @@ -0,0 +1,53 @@ +From e5cafce3ad0f8652d6849314d951459c2bff7233 Mon Sep 17 00:00:00 2001 +From: Luis Henriques +Date: Thu, 12 Nov 2020 10:45:12 +0000 +Subject: ceph: fix race in concurrent __ceph_remove_cap invocations + +From: Luis Henriques + +commit e5cafce3ad0f8652d6849314d951459c2bff7233 upstream. + +A NULL pointer dereference may occur in __ceph_remove_cap with some of the +callbacks used in ceph_iterate_session_caps, namely trim_caps_cb and +remove_session_caps_cb. Those callers hold the session->s_mutex, so they +are prevented from concurrent execution, but ceph_evict_inode does not. + +Since the callers of this function hold the i_ceph_lock, the fix is simply +a matter of returning immediately if caps->ci is NULL. + +Cc: stable@vger.kernel.org +URL: https://tracker.ceph.com/issues/43272 +Suggested-by: Jeff Layton +Signed-off-by: Luis Henriques +Reviewed-by: Jeff Layton +Signed-off-by: Ilya Dryomov +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ceph/caps.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +--- a/fs/ceph/caps.c ++++ b/fs/ceph/caps.c +@@ -927,12 +927,19 @@ void __ceph_remove_cap(struct ceph_cap * + { + struct ceph_mds_session *session = cap->session; + struct ceph_inode_info *ci = cap->ci; +- struct ceph_mds_client *mdsc = +- ceph_sb_to_client(ci->vfs_inode.i_sb)->mdsc; ++ struct ceph_mds_client *mdsc; + int removed = 0; + ++ /* 'ci' being NULL means the remove have already occurred */ ++ if (!ci) { ++ dout("%s: cap inode is NULL\n", __func__); ++ return; ++ } ++ + dout("__ceph_remove_cap %p from %p\n", cap, &ci->vfs_inode); + ++ mdsc = ceph_inode_to_client(&ci->vfs_inode)->mdsc; ++ + /* remove from inode's cap rbtree, and clear auth cap */ + rb_erase(&cap->ci_node, &ci->i_caps); + if (ci->i_auth_cap == cap) diff --git a/queue-4.9/ext4-fix-a-memory-leak-of-ext4_free_data.patch b/queue-4.9/ext4-fix-a-memory-leak-of-ext4_free_data.patch new file mode 100644 index 00000000000..e9314818a4f --- /dev/null +++ b/queue-4.9/ext4-fix-a-memory-leak-of-ext4_free_data.patch @@ -0,0 +1,40 @@ +From cca415537244f6102cbb09b5b90db6ae2c953bdd Mon Sep 17 00:00:00 2001 +From: Chunguang Xu +Date: Sat, 7 Nov 2020 23:58:18 +0800 +Subject: ext4: fix a memory leak of ext4_free_data + +From: Chunguang Xu + +commit cca415537244f6102cbb09b5b90db6ae2c953bdd upstream. + +When freeing metadata, we will create an ext4_free_data and +insert it into the pending free list. After the current +transaction is committed, the object will be freed. + +ext4_mb_free_metadata() will check whether the area to be freed +overlaps with the pending free list. If true, return directly. At this +time, ext4_free_data is leaked. Fortunately, the probability of this +problem is small, since it only occurs if the file system is corrupted +such that a block is claimed by more one inode and those inodes are +deleted within a single jbd2 transaction. + +Signed-off-by: Chunguang Xu +Link: https://lore.kernel.org/r/1604764698-4269-8-git-send-email-brookxu@tencent.com +Signed-off-by: Theodore Ts'o +Cc: stable@kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ext4/mballoc.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/fs/ext4/mballoc.c ++++ b/fs/ext4/mballoc.c +@@ -4650,6 +4650,7 @@ ext4_mb_free_metadata(handle_t *handle, + ext4_group_first_block_no(sb, group) + + EXT4_C2B(sbi, cluster), + "Block already on to-be-freed list"); ++ kmem_cache_free(ext4_free_data_cachep, new_entry); + return 0; + } + } diff --git a/queue-4.9/jffs2-fix-gc-exit-abnormally.patch b/queue-4.9/jffs2-fix-gc-exit-abnormally.patch new file mode 100644 index 00000000000..db239da47ad --- /dev/null +++ b/queue-4.9/jffs2-fix-gc-exit-abnormally.patch @@ -0,0 +1,76 @@ +From 9afc9a8a4909fece0e911e72b1060614ba2f7969 Mon Sep 17 00:00:00 2001 +From: Zhe Li +Date: Fri, 29 May 2020 11:37:11 +0800 +Subject: jffs2: Fix GC exit abnormally + +From: Zhe Li + +commit 9afc9a8a4909fece0e911e72b1060614ba2f7969 upstream. + +The log of this problem is: +jffs2: Error garbage collecting node at 0x***! +jffs2: No space for garbage collection. Aborting GC thread + +This is because GC believe that it do nothing, so it abort. + +After going over the image of jffs2, I find a scene that +can trigger this problem stably. +The scene is: there is a normal dirent node at summary-area, +but abnormal at corresponding not-summary-area with error +name_crc. + +The reason that GC exit abnormally is because it find that +abnormal dirent node to GC, but when it goes to function +jffs2_add_fd_to_list, it cannot meet the condition listed +below: + +if ((*prev)->nhash == new->nhash && !strcmp((*prev)->name, new->name)) + +So no node is marked obsolete, statistical information of +erase_block do not change, which cause GC exit abnormally. + +The root cause of this problem is: we do not check the +name_crc of the abnormal dirent node with summary is enabled. + +Noticed that in function jffs2_scan_dirent_node, we use +function jffs2_scan_dirty_space to deal with the dirent +node with error name_crc. So this patch add a checking +code in function read_direntry to ensure the correctness +of dirent node. If checked failed, the dirent node will +be marked obsolete so GC will pass this node and this +problem will be fixed. + +Cc: +Signed-off-by: Zhe Li +Signed-off-by: Richard Weinberger +Signed-off-by: Greg Kroah-Hartman + +--- + fs/jffs2/readinode.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +--- a/fs/jffs2/readinode.c ++++ b/fs/jffs2/readinode.c +@@ -672,6 +672,22 @@ static inline int read_direntry(struct j + jffs2_free_full_dirent(fd); + return -EIO; + } ++ ++#ifdef CONFIG_JFFS2_SUMMARY ++ /* ++ * we use CONFIG_JFFS2_SUMMARY because without it, we ++ * have checked it while mounting ++ */ ++ crc = crc32(0, fd->name, rd->nsize); ++ if (unlikely(crc != je32_to_cpu(rd->name_crc))) { ++ JFFS2_NOTICE("name CRC failed on dirent node at" ++ "%#08x: read %#08x,calculated %#08x\n", ++ ref_offset(ref), je32_to_cpu(rd->node_crc), crc); ++ jffs2_mark_node_obsolete(c, ref); ++ jffs2_free_full_dirent(fd); ++ return 0; ++ } ++#endif + } + + fd->nhash = full_name_hash(NULL, fd->name, rd->nsize); diff --git a/queue-4.9/kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch b/queue-4.9/kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch new file mode 100644 index 00000000000..d0d74bf608d --- /dev/null +++ b/queue-4.9/kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch @@ -0,0 +1,42 @@ +From ca4e514774930f30b66375a974b5edcbebaf0e7e Mon Sep 17 00:00:00 2001 +From: Marc Zyngier +Date: Tue, 10 Nov 2020 11:10:15 +0000 +Subject: KVM: arm64: Introduce handling of AArch32 TTBCR2 traps + +From: Marc Zyngier + +commit ca4e514774930f30b66375a974b5edcbebaf0e7e upstream. + +ARMv8.2 introduced TTBCR2, which shares TCR_EL1 with TTBCR. +Gracefully handle traps to this register when HCR_EL2.TVM is set. + +Cc: stable@vger.kernel.org +Reported-by: James Morse +Signed-off-by: Marc Zyngier +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm64/include/asm/kvm_host.h | 1 + + arch/arm64/kvm/sys_regs.c | 1 + + 2 files changed, 2 insertions(+) + +--- a/arch/arm64/include/asm/kvm_host.h ++++ b/arch/arm64/include/asm/kvm_host.h +@@ -161,6 +161,7 @@ enum vcpu_sysreg { + #define c2_TTBR1 (TTBR1_EL1 * 2) /* Translation Table Base Register 1 */ + #define c2_TTBR1_high (c2_TTBR1 + 1) /* TTBR1 top 32 bits */ + #define c2_TTBCR (TCR_EL1 * 2) /* Translation Table Base Control R. */ ++#define c2_TTBCR2 (c2_TTBCR + 1) /* Translation Table Base Control R. 2 */ + #define c3_DACR (DACR32_EL2 * 2)/* Domain Access Control Register */ + #define c5_DFSR (ESR_EL1 * 2) /* Data Fault Status Register */ + #define c5_IFSR (IFSR32_EL2 * 2)/* Instruction Fault Status Register */ +--- a/arch/arm64/kvm/sys_regs.c ++++ b/arch/arm64/kvm/sys_regs.c +@@ -1315,6 +1315,7 @@ static const struct sys_reg_desc cp15_re + { Op1( 0), CRn( 2), CRm( 0), Op2( 0), access_vm_reg, NULL, c2_TTBR0 }, + { Op1( 0), CRn( 2), CRm( 0), Op2( 1), access_vm_reg, NULL, c2_TTBR1 }, + { Op1( 0), CRn( 2), CRm( 0), Op2( 2), access_vm_reg, NULL, c2_TTBCR }, ++ { Op1( 0), CRn( 2), CRm( 0), Op2( 3), access_vm_reg, NULL, c2_TTBCR2 }, + { Op1( 0), CRn( 3), CRm( 0), Op2( 0), access_vm_reg, NULL, c3_DACR }, + { Op1( 0), CRn( 5), CRm( 0), Op2( 0), access_vm_reg, NULL, c5_DFSR }, + { Op1( 0), CRn( 5), CRm( 0), Op2( 1), access_vm_reg, NULL, c5_IFSR }, diff --git a/queue-4.9/powerpc-xmon-change-printk-to-pr_cont.patch b/queue-4.9/powerpc-xmon-change-printk-to-pr_cont.patch new file mode 100644 index 00000000000..7ef7c6586dc --- /dev/null +++ b/queue-4.9/powerpc-xmon-change-printk-to-pr_cont.patch @@ -0,0 +1,66 @@ +From 7c6c86b36a36dd4a13d30bba07718e767aa2e7a1 Mon Sep 17 00:00:00 2001 +From: Christophe Leroy +Date: Fri, 4 Dec 2020 10:35:38 +0000 +Subject: powerpc/xmon: Change printk() to pr_cont() + +From: Christophe Leroy + +commit 7c6c86b36a36dd4a13d30bba07718e767aa2e7a1 upstream. + +Since some time now, printk() adds carriage return, leading to +unusable xmon output if there is no udbg backend available: + + [ 54.288722] sysrq: Entering xmon + [ 54.292209] Vector: 0 at [cace3d2c] + [ 54.292274] pc: + [ 54.292331] c0023650 + [ 54.292468] : xmon+0x28/0x58 + [ 54.292519] + [ 54.292574] lr: + [ 54.292630] c0023724 + [ 54.292749] : sysrq_handle_xmon+0xa4/0xfc + [ 54.292801] + [ 54.292867] sp: cace3de8 + [ 54.292931] msr: 9032 + [ 54.292999] current = 0xc28d0000 + [ 54.293072] pid = 377, comm = sh + [ 54.293157] Linux version 5.10.0-rc6-s3k-dev-01364-gedf13f0ccd76-dirty (root@po17688vm.idsi0.si.c-s.fr) (powerpc64-linux-gcc (GCC) 10.1.0, GNU ld (GNU Binutils) 2.34) #4211 PREEMPT Fri Dec 4 09:32:11 UTC 2020 + [ 54.293287] enter ? for help + [ 54.293470] [cace3de8] + [ 54.293532] c0023724 + [ 54.293654] sysrq_handle_xmon+0xa4/0xfc + [ 54.293711] (unreliable) + ... + [ 54.296002] + [ 54.296159] --- Exception: c01 (System Call) at + [ 54.296217] 0fd4e784 + [ 54.296303] + [ 54.296375] SP (7fca6ff0) is in userspace + [ 54.296431] mon> + [ 54.296484] + +Use pr_cont() instead. + +Fixes: 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing continuation lines") +Cc: stable@vger.kernel.org # v4.9+ +Signed-off-by: Christophe Leroy +[mpe: Mention that it only happens when udbg is not available] +Signed-off-by: Michael Ellerman +Link: https://lore.kernel.org/r/c8a6ec704416ecd5ff2bd26213c9bc026bdd19de.1607077340.git.christophe.leroy@csgroup.eu +Signed-off-by: Greg Kroah-Hartman + +--- + arch/powerpc/xmon/nonstdio.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/powerpc/xmon/nonstdio.c ++++ b/arch/powerpc/xmon/nonstdio.c +@@ -182,7 +182,7 @@ void xmon_printf(const char *format, ... + + if (n && rc == 0) { + /* No udbg hooks, fallback to printk() - dangerous */ +- printk("%s", xmon_outbuf); ++ pr_cont("%s", xmon_outbuf); + } + } + diff --git a/queue-4.9/series b/queue-4.9/series index c7ca12d490c..f5043824825 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -149,3 +149,12 @@ usb-serial-keyspan_pda-fix-stalled-writes.patch usb-serial-keyspan_pda-fix-write-wakeup-use-after-free.patch usb-serial-keyspan_pda-fix-tx-unthrottle-use-after-free.patch usb-serial-keyspan_pda-fix-write-unthrottling.patch +btrfs-quota-set-rescan-progress-to-u64-1-if-we-hit-last-leaf.patch +btrfs-scrub-don-t-use-inode-page-cache-in-scrub_handle_errored_block.patch +btrfs-fix-selftests-failure-due-to-uninitialized-i_mode-in-test-inodes.patch +btrfs-fix-return-value-mixup-in-btrfs_get_extent.patch +ext4-fix-a-memory-leak-of-ext4_free_data.patch +kvm-arm64-introduce-handling-of-aarch32-ttbcr2-traps.patch +powerpc-xmon-change-printk-to-pr_cont.patch +ceph-fix-race-in-concurrent-__ceph_remove_cap-invocations.patch +jffs2-fix-gc-exit-abnormally.patch