From: Sasha Levin Date: Thu, 16 Jan 2020 23:05:16 +0000 (-0500) Subject: fixes for 4.4 X-Git-Tag: v4.14.166~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c0b31c26b15d6250d20817525d6896dedbfe1181;p=thirdparty%2Fkernel%2Fstable-queue.git fixes for 4.4 Signed-off-by: Sasha Levin --- diff --git a/queue-4.4/hexagon-work-around-compiler-crash.patch b/queue-4.4/hexagon-work-around-compiler-crash.patch new file mode 100644 index 00000000000..3169661750a --- /dev/null +++ b/queue-4.4/hexagon-work-around-compiler-crash.patch @@ -0,0 +1,52 @@ +From c37a53671abc80e0f9bae7d3468ec9fb92fc0718 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 4 Jan 2020 13:00:02 -0800 +Subject: hexagon: work around compiler crash + +From: Nick Desaulniers + +[ Upstream commit 63e80314ab7cf4783526d2e44ee57a90514911c9 ] + +Clang cannot translate the string "r30" into a valid register yet. + +Link: https://github.com/ClangBuiltLinux/linux/issues/755 +Link: http://lkml.kernel.org/r/20191028155722.23419-1-ndesaulniers@google.com +Signed-off-by: Nick Desaulniers +Suggested-by: Sid Manning +Reviewed-by: Brian Cain +Cc: Allison Randal +Cc: Greg Kroah-Hartman +Cc: Richard Fontana +Cc: Thomas Gleixner +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + arch/hexagon/kernel/stacktrace.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/arch/hexagon/kernel/stacktrace.c b/arch/hexagon/kernel/stacktrace.c +index f94918b449a8..03a0e10ecdcc 100644 +--- a/arch/hexagon/kernel/stacktrace.c ++++ b/arch/hexagon/kernel/stacktrace.c +@@ -23,8 +23,6 @@ + #include + #include + +-register unsigned long current_frame_pointer asm("r30"); +- + struct stackframe { + unsigned long fp; + unsigned long rets; +@@ -42,7 +40,7 @@ void save_stack_trace(struct stack_trace *trace) + + low = (unsigned long)task_stack_page(current); + high = low + THREAD_SIZE; +- fp = current_frame_pointer; ++ fp = (unsigned long)__builtin_frame_address(0); + + while (fp >= low && fp <= (high - sizeof(*frame))) { + frame = (struct stackframe *)fp; +-- +2.20.1 + diff --git a/queue-4.4/ocfs2-call-journal-flush-to-mark-journal-as-empty-af.patch b/queue-4.4/ocfs2-call-journal-flush-to-mark-journal-as-empty-af.patch new file mode 100644 index 00000000000..ae004db51e2 --- /dev/null +++ b/queue-4.4/ocfs2-call-journal-flush-to-mark-journal-as-empty-af.patch @@ -0,0 +1,138 @@ +From a33423558ca9f68f3a5d498368b7f4773228644b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 4 Jan 2020 13:00:18 -0800 +Subject: ocfs2: call journal flush to mark journal as empty after journal + recovery when mount + +From: Kai Li + +[ Upstream commit 397eac17f86f404f5ba31d8c3e39ec3124b39fd3 ] + +If journal is dirty when mount, it will be replayed but jbd2 sb log tail +cannot be updated to mark a new start because journal->j_flag has +already been set with JBD2_ABORT first in journal_init_common. + +When a new transaction is committed, it will be recored in block 1 +first(journal->j_tail is set to 1 in journal_reset). If emergency +restart happens again before journal super block is updated +unfortunately, the new recorded trans will not be replayed in the next +mount. + +The following steps describe this procedure in detail. +1. mount and touch some files +2. these transactions are committed to journal area but not checkpointed +3. emergency restart +4. mount again and its journals are replayed +5. journal super block's first s_start is 1, but its s_seq is not updated +6. touch a new file and its trans is committed but not checkpointed +7. emergency restart again +8. mount and journal is dirty, but trans committed in 6 will not be +replayed. + +This exception happens easily when this lun is used by only one node. +If it is used by multi-nodes, other node will replay its journal and its +journal super block will be updated after recovery like what this patch +does. + +ocfs2_recover_node->ocfs2_replay_journal. + +The following jbd2 journal can be generated by touching a new file after +journal is replayed, and seq 15 is the first valid commit, but first seq +is 13 in journal super block. + +logdump: + Block 0: Journal Superblock + Seq: 0 Type: 4 (JBD2_SUPERBLOCK_V2) + Blocksize: 4096 Total Blocks: 32768 First Block: 1 + First Commit ID: 13 Start Log Blknum: 1 + Error: 0 + Feature Compat: 0 + Feature Incompat: 2 block64 + Feature RO compat: 0 + Journal UUID: 4ED3822C54294467A4F8E87D2BA4BC36 + FS Share Cnt: 1 Dynamic Superblk Blknum: 0 + Per Txn Block Limit Journal: 0 Data: 0 + + Block 1: Journal Commit Block + Seq: 14 Type: 2 (JBD2_COMMIT_BLOCK) + + Block 2: Journal Descriptor + Seq: 15 Type: 1 (JBD2_DESCRIPTOR_BLOCK) + No. Blocknum Flags + 0. 587 none + UUID: 00000000000000000000000000000000 + 1. 8257792 JBD2_FLAG_SAME_UUID + 2. 619 JBD2_FLAG_SAME_UUID + 3. 24772864 JBD2_FLAG_SAME_UUID + 4. 8257802 JBD2_FLAG_SAME_UUID + 5. 513 JBD2_FLAG_SAME_UUID JBD2_FLAG_LAST_TAG + ... + Block 7: Inode + Inode: 8257802 Mode: 0640 Generation: 57157641 (0x3682809) + FS Generation: 2839773110 (0xa9437fb6) + CRC32: 00000000 ECC: 0000 + Type: Regular Attr: 0x0 Flags: Valid + Dynamic Features: (0x1) InlineData + User: 0 (root) Group: 0 (root) Size: 7 + Links: 1 Clusters: 0 + ctime: 0x5de5d870 0x11104c61 -- Tue Dec 3 11:37:20.286280801 2019 + atime: 0x5de5d870 0x113181a1 -- Tue Dec 3 11:37:20.288457121 2019 + mtime: 0x5de5d870 0x11104c61 -- Tue Dec 3 11:37:20.286280801 2019 + dtime: 0x0 -- Thu Jan 1 08:00:00 1970 + ... + Block 9: Journal Commit Block + Seq: 15 Type: 2 (JBD2_COMMIT_BLOCK) + +The following is journal recovery log when recovering the upper jbd2 +journal when mount again. + +syslog: + ocfs2: File system on device (252,1) was not unmounted cleanly, recovering it. + fs/jbd2/recovery.c:(do_one_pass, 449): Starting recovery pass 0 + fs/jbd2/recovery.c:(do_one_pass, 449): Starting recovery pass 1 + fs/jbd2/recovery.c:(do_one_pass, 449): Starting recovery pass 2 + fs/jbd2/recovery.c:(jbd2_journal_recover, 278): JBD2: recovery, exit status 0, recovered transactions 13 to 13 + +Due to first commit seq 13 recorded in journal super is not consistent +with the value recorded in block 1(seq is 14), journal recovery will be +terminated before seq 15 even though it is an unbroken commit, inode +8257802 is a new file and it will be lost. + +Link: http://lkml.kernel.org/r/20191217020140.2197-1-li.kai4@h3c.com +Signed-off-by: Kai Li +Reviewed-by: Joseph Qi +Reviewed-by: Changwei Ge +Cc: Mark Fasheh +Cc: Joel Becker +Cc: Junxiao Bi +Cc: Gang He +Cc: Jun Piao +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Sasha Levin +--- + fs/ocfs2/journal.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c +index 2301011428a1..bbf1634ff427 100644 +--- a/fs/ocfs2/journal.c ++++ b/fs/ocfs2/journal.c +@@ -1080,6 +1080,14 @@ int ocfs2_journal_load(struct ocfs2_journal *journal, int local, int replayed) + + ocfs2_clear_journal_error(osb->sb, journal->j_journal, osb->slot_num); + ++ if (replayed) { ++ jbd2_journal_lock_updates(journal->j_journal); ++ status = jbd2_journal_flush(journal->j_journal); ++ jbd2_journal_unlock_updates(journal->j_journal); ++ if (status < 0) ++ mlog_errno(status); ++ } ++ + status = ocfs2_journal_toggle_dirty(osb, 1, replayed); + if (status < 0) { + mlog_errno(status); +-- +2.20.1 + diff --git a/queue-4.4/rseq-selftests-turn-off-timeout-setting.patch b/queue-4.4/rseq-selftests-turn-off-timeout-setting.patch new file mode 100644 index 00000000000..b3ec3403045 --- /dev/null +++ b/queue-4.4/rseq-selftests-turn-off-timeout-setting.patch @@ -0,0 +1,38 @@ +From 1ae746075473959c6eeef9ff6aabd4c0cfa3cd00 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 11 Dec 2019 11:28:57 -0500 +Subject: rseq/selftests: Turn off timeout setting + +From: Mathieu Desnoyers + +[ Upstream commit af9cb29c5488381083b0b5ccdfb3cd931063384a ] + +As the rseq selftests can run for a long period of time, disable the +timeout that the general selftests have. + +Signed-off-by: Mathieu Desnoyers +Cc: Shuah Khan +Cc: Thomas Gleixner +Cc: Peter Zijlstra (Intel) +Cc: "Paul E. McKenney" +Cc: Boqun Feng +Cc: "H . Peter Anvin" +Cc: Paul Turner +Cc: Dmitry Vyukov +Signed-off-by: Shuah Khan +Signed-off-by: Sasha Levin +--- + tools/testing/selftests/rseq/settings | 1 + + 1 file changed, 1 insertion(+) + create mode 100644 tools/testing/selftests/rseq/settings + +diff --git a/tools/testing/selftests/rseq/settings b/tools/testing/selftests/rseq/settings +new file mode 100644 +index 000000000000..e7b9417537fb +--- /dev/null ++++ b/tools/testing/selftests/rseq/settings +@@ -0,0 +1 @@ ++timeout=0 +-- +2.20.1 + diff --git a/queue-4.4/series b/queue-4.4/series index fd38ce33d76..d760d4619ac 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -34,3 +34,6 @@ media-exynos4-is-fix-recursive-locking-in-isp_video_release.patch spi-atmel-fix-handling-of-cs_change-set-on-non-last-xfer.patch rtlwifi-remove-unnecessary-null-check-in-rtl_regd_init.patch rtc-msm6242-fix-reading-of-10-hour-digit.patch +rseq-selftests-turn-off-timeout-setting.patch +hexagon-work-around-compiler-crash.patch +ocfs2-call-journal-flush-to-mark-journal-as-empty-af.patch