Archive-only list for patches
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev, Hugh Dickins <hughd@google.com>,
	David Hildenbrand <david@redhat.com>,
	Yang Shi <shy828301@gmail.com>,
	Baolin Wang <baolin.wang@linux.alibaba.com>,
	Barry Song <baohua@kernel.org>, Chris Li <chrisl@kernel.org>,
	Johannes Weiner <hannes@cmpxchg.org>,
	Kefeng Wang <wangkefeng.wang@huawei.com>,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	"Matthew Wilcox (Oracle)" <willy@infradead.org>,
	Nhat Pham <nphamcs@gmail.com>,
	Ryan Roberts <ryan.roberts@arm.com>,
	Shakeel Butt <shakeel.butt@linux.dev>,
	Usama Arif <usamaarif642@gmail.com>,
	Wei Yang <richard.weiyang@gmail.com>, Zi Yan <ziy@nvidia.com>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: [PATCH 6.11 154/184] mm/thp: fix deferred split unqueue naming and locking
Date: Tue, 12 Nov 2024 11:21:52 +0100	[thread overview]
Message-ID: <20241112101906.783436968@linuxfoundation.org> (raw)
In-Reply-To: <20241112101900.865487674@linuxfoundation.org>

6.11-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Hugh Dickins <hughd@google.com>

commit f8f931bba0f92052cf842b7e30917b1afcc77d5a upstream.

Recent changes are putting more pressure on THP deferred split queues:
under load revealing long-standing races, causing list_del corruptions,
"Bad page state"s and worse (I keep BUGs in both of those, so usually
don't get to see how badly they end up without).  The relevant recent
changes being 6.8's mTHP, 6.10's mTHP swapout, and 6.12's mTHP swapin,
improved swap allocation, and underused THP splitting.

Before fixing locking: rename misleading folio_undo_large_rmappable(),
which does not undo large_rmappable, to folio_unqueue_deferred_split(),
which is what it does.  But that and its out-of-line __callee are mm
internals of very limited usability: add comment and WARN_ON_ONCEs to
check usage; and return a bool to say if a deferred split was unqueued,
which can then be used in WARN_ON_ONCEs around safety checks (sparing
callers the arcane conditionals in __folio_unqueue_deferred_split()).

Just omit the folio_unqueue_deferred_split() from free_unref_folios(), all
of whose callers now call it beforehand (and if any forget then bad_page()
will tell) - except for its caller put_pages_list(), which itself no
longer has any callers (and will be deleted separately).

Swapout: mem_cgroup_swapout() has been resetting folio->memcg_data 0
without checking and unqueueing a THP folio from deferred split list;
which is unfortunate, since the split_queue_lock depends on the memcg
(when memcg is enabled); so swapout has been unqueueing such THPs later,
when freeing the folio, using the pgdat's lock instead: potentially
corrupting the memcg's list.  __remove_mapping() has frozen refcount to 0
here, so no problem with calling folio_unqueue_deferred_split() before
resetting memcg_data.

That goes back to 5.4 commit 87eaceb3faa5 ("mm: thp: make deferred split
shrinker memcg aware"): which included a check on swapcache before adding
to deferred queue, but no check on deferred queue before adding THP to
swapcache.  That worked fine with the usual sequence of events in reclaim
(though there were a couple of rare ways in which a THP on deferred queue
could have been swapped out), but 6.12 commit dafff3f4c850 ("mm: split
underused THPs") avoids splitting underused THPs in reclaim, which makes
swapcache THPs on deferred queue commonplace.

Keep the check on swapcache before adding to deferred queue?  Yes: it is
no longer essential, but preserves the existing behaviour, and is likely
to be a worthwhile optimization (vmstat showed much more traffic on the
queue under swapping load if the check was removed); update its comment.

Memcg-v1 move (deprecated): mem_cgroup_move_account() has been changing
folio->memcg_data without checking and unqueueing a THP folio from the
deferred list, sometimes corrupting "from" memcg's list, like swapout.
Refcount is non-zero here, so folio_unqueue_deferred_split() can only be
used in a WARN_ON_ONCE to validate the fix, which must be done earlier:
mem_cgroup_move_charge_pte_range() first try to split the THP (splitting
of course unqueues), or skip it if that fails.  Not ideal, but moving
charge has been requested, and khugepaged should repair the THP later:
nobody wants new custom unqueueing code just for this deprecated case.

The 87eaceb3faa5 commit did have the code to move from one deferred list
to another (but was not conscious of its unsafety while refcount non-0);
but that was removed by 5.6 commit fac0516b5534 ("mm: thp: don't need care
deferred split queue in memcg charge move path"), which argued that the
existence of a PMD mapping guarantees that the THP cannot be on a deferred
list.  As above, false in rare cases, and now commonly false.

Backport to 6.11 should be straightforward.  Earlier backports must take
care that other _deferred_list fixes and dependencies are included.  There
is not a strong case for backports, but they can fix cornercases.

Link: https://lkml.kernel.org/r/8dc111ae-f6db-2da7-b25c-7a20b1effe3b@google.com
Fixes: 87eaceb3faa5 ("mm: thp: make deferred split shrinker memcg aware")
Fixes: dafff3f4c850 ("mm: split underused THPs")
Signed-off-by: Hugh Dickins <hughd@google.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Yang Shi <shy828301@gmail.com>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Barry Song <baohua@kernel.org>
Cc: Chris Li <chrisl@kernel.org>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Nhat Pham <nphamcs@gmail.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Shakeel Butt <shakeel.butt@linux.dev>
Cc: Usama Arif <usamaarif642@gmail.com>
Cc: Wei Yang <richard.weiyang@gmail.com>
Cc: Zi Yan <ziy@nvidia.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 mm/huge_memory.c   |   35 ++++++++++++++++++++++++++---------
 mm/internal.h      |   10 +++++-----
 mm/memcontrol-v1.c |   25 +++++++++++++++++++++++++
 mm/memcontrol.c    |    8 +++++---
 mm/migrate.c       |    4 ++--
 mm/page_alloc.c    |    1 -
 mm/swap.c          |    4 ++--
 mm/vmscan.c        |    4 ++--
 8 files changed, 67 insertions(+), 24 deletions(-)

--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -3268,18 +3268,38 @@ out:
 	return ret;
 }
 
-void __folio_undo_large_rmappable(struct folio *folio)
+/*
+ * __folio_unqueue_deferred_split() is not to be called directly:
+ * the folio_unqueue_deferred_split() inline wrapper in mm/internal.h
+ * limits its calls to those folios which may have a _deferred_list for
+ * queueing THP splits, and that list is (racily observed to be) non-empty.
+ *
+ * It is unsafe to call folio_unqueue_deferred_split() until folio refcount is
+ * zero: because even when split_queue_lock is held, a non-empty _deferred_list
+ * might be in use on deferred_split_scan()'s unlocked on-stack list.
+ *
+ * If memory cgroups are enabled, split_queue_lock is in the mem_cgroup: it is
+ * therefore important to unqueue deferred split before changing folio memcg.
+ */
+bool __folio_unqueue_deferred_split(struct folio *folio)
 {
 	struct deferred_split *ds_queue;
 	unsigned long flags;
+	bool unqueued = false;
+
+	WARN_ON_ONCE(folio_ref_count(folio));
+	WARN_ON_ONCE(!mem_cgroup_disabled() && !folio_memcg(folio));
 
 	ds_queue = get_deferred_split_queue(folio);
 	spin_lock_irqsave(&ds_queue->split_queue_lock, flags);
 	if (!list_empty(&folio->_deferred_list)) {
 		ds_queue->split_queue_len--;
 		list_del_init(&folio->_deferred_list);
+		unqueued = true;
 	}
 	spin_unlock_irqrestore(&ds_queue->split_queue_lock, flags);
+
+	return unqueued;	/* useful for debug warnings */
 }
 
 void deferred_split_folio(struct folio *folio)
@@ -3298,14 +3318,11 @@ void deferred_split_folio(struct folio *
 		return;
 
 	/*
-	 * The try_to_unmap() in page reclaim path might reach here too,
-	 * this may cause a race condition to corrupt deferred split queue.
-	 * And, if page reclaim is already handling the same folio, it is
-	 * unnecessary to handle it again in shrinker.
-	 *
-	 * Check the swapcache flag to determine if the folio is being
-	 * handled by page reclaim since THP swap would add the folio into
-	 * swap cache before calling try_to_unmap().
+	 * Exclude swapcache: originally to avoid a corrupt deferred split
+	 * queue. Nowadays that is fully prevented by mem_cgroup_swapout();
+	 * but if page reclaim is already handling the same folio, it is
+	 * unnecessary to handle it again in the shrinker, so excluding
+	 * swapcache here may still be a useful optimization.
 	 */
 	if (folio_test_swapcache(folio))
 		return;
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -631,11 +631,11 @@ static inline void folio_set_order(struc
 #endif
 }
 
-void __folio_undo_large_rmappable(struct folio *folio);
-static inline void folio_undo_large_rmappable(struct folio *folio)
+bool __folio_unqueue_deferred_split(struct folio *folio);
+static inline bool folio_unqueue_deferred_split(struct folio *folio)
 {
 	if (folio_order(folio) <= 1 || !folio_test_large_rmappable(folio))
-		return;
+		return false;
 
 	/*
 	 * At this point, there is no one trying to add the folio to
@@ -643,9 +643,9 @@ static inline void folio_undo_large_rmap
 	 * to check without acquiring the split_queue_lock.
 	 */
 	if (data_race(list_empty(&folio->_deferred_list)))
-		return;
+		return false;
 
-	__folio_undo_large_rmappable(folio);
+	return __folio_unqueue_deferred_split(folio);
 }
 
 static inline struct folio *page_rmappable_folio(struct page *page)
--- a/mm/memcontrol-v1.c
+++ b/mm/memcontrol-v1.c
@@ -845,6 +845,8 @@ static int mem_cgroup_move_account(struc
 	css_get(&to->css);
 	css_put(&from->css);
 
+	/* Warning should never happen, so don't worry about refcount non-0 */
+	WARN_ON_ONCE(folio_unqueue_deferred_split(folio));
 	folio->memcg_data = (unsigned long)to;
 
 	__folio_memcg_unlock(from);
@@ -1214,7 +1216,9 @@ static int mem_cgroup_move_charge_pte_ra
 	enum mc_target_type target_type;
 	union mc_target target;
 	struct folio *folio;
+	bool tried_split_before = false;
 
+retry_pmd:
 	ptl = pmd_trans_huge_lock(pmd, vma);
 	if (ptl) {
 		if (mc.precharge < HPAGE_PMD_NR) {
@@ -1224,6 +1228,27 @@ static int mem_cgroup_move_charge_pte_ra
 		target_type = get_mctgt_type_thp(vma, addr, *pmd, &target);
 		if (target_type == MC_TARGET_PAGE) {
 			folio = target.folio;
+			/*
+			 * Deferred split queue locking depends on memcg,
+			 * and unqueue is unsafe unless folio refcount is 0:
+			 * split or skip if on the queue? first try to split.
+			 */
+			if (!list_empty(&folio->_deferred_list)) {
+				spin_unlock(ptl);
+				if (!tried_split_before)
+					split_folio(folio);
+				folio_unlock(folio);
+				folio_put(folio);
+				if (tried_split_before)
+					return 0;
+				tried_split_before = true;
+				goto retry_pmd;
+			}
+			/*
+			 * So long as that pmd lock is held, the folio cannot
+			 * be racily added to the _deferred_list, because
+			 * __folio_remove_rmap() will find !partially_mapped.
+			 */
 			if (folio_isolate_lru(folio)) {
 				if (!mem_cgroup_move_account(folio, true,
 							     mc.from, mc.to)) {
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -4604,9 +4604,6 @@ static void uncharge_folio(struct folio
 	struct obj_cgroup *objcg;
 
 	VM_BUG_ON_FOLIO(folio_test_lru(folio), folio);
-	VM_BUG_ON_FOLIO(folio_order(folio) > 1 &&
-			!folio_test_hugetlb(folio) &&
-			!list_empty(&folio->_deferred_list), folio);
 
 	/*
 	 * Nobody should be changing or seriously looking at
@@ -4653,6 +4650,7 @@ static void uncharge_folio(struct folio
 			ug->nr_memory += nr_pages;
 		ug->pgpgout++;
 
+		WARN_ON_ONCE(folio_unqueue_deferred_split(folio));
 		folio->memcg_data = 0;
 	}
 
@@ -4769,6 +4767,9 @@ void mem_cgroup_migrate(struct folio *ol
 
 	/* Transfer the charge and the css ref */
 	commit_charge(new, memcg);
+
+	/* Warning should never happen, so don't worry about refcount non-0 */
+	WARN_ON_ONCE(folio_unqueue_deferred_split(old));
 	old->memcg_data = 0;
 }
 
@@ -4955,6 +4956,7 @@ void mem_cgroup_swapout(struct folio *fo
 	VM_BUG_ON_FOLIO(oldid, folio);
 	mod_memcg_state(swap_memcg, MEMCG_SWAP, nr_entries);
 
+	folio_unqueue_deferred_split(folio);
 	folio->memcg_data = 0;
 
 	if (!mem_cgroup_is_root(memcg))
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -415,7 +415,7 @@ static int __folio_migrate_mapping(struc
 		    folio_test_large_rmappable(folio)) {
 			if (!folio_ref_freeze(folio, expected_count))
 				return -EAGAIN;
-			folio_undo_large_rmappable(folio);
+			folio_unqueue_deferred_split(folio);
 			folio_ref_unfreeze(folio, expected_count);
 		}
 
@@ -438,7 +438,7 @@ static int __folio_migrate_mapping(struc
 	}
 
 	/* Take off deferred split queue while frozen and memcg set */
-	folio_undo_large_rmappable(folio);
+	folio_unqueue_deferred_split(folio);
 
 	/*
 	 * Now we know that no one else is looking at the folio:
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2663,7 +2663,6 @@ void free_unref_folios(struct folio_batc
 		unsigned long pfn = folio_pfn(folio);
 		unsigned int order = folio_order(folio);
 
-		folio_undo_large_rmappable(folio);
 		if (!free_pages_prepare(&folio->page, order))
 			continue;
 		/*
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -123,7 +123,7 @@ void __folio_put(struct folio *folio)
 	}
 
 	page_cache_release(folio);
-	folio_undo_large_rmappable(folio);
+	folio_unqueue_deferred_split(folio);
 	mem_cgroup_uncharge(folio);
 	free_unref_page(&folio->page, folio_order(folio));
 }
@@ -1020,7 +1020,7 @@ void folios_put_refs(struct folio_batch
 			free_huge_folio(folio);
 			continue;
 		}
-		folio_undo_large_rmappable(folio);
+		folio_unqueue_deferred_split(folio);
 		__page_cache_release(folio, &lruvec, &flags);
 
 		if (j != i)
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -1462,7 +1462,7 @@ free_it:
 		 */
 		nr_reclaimed += nr_pages;
 
-		folio_undo_large_rmappable(folio);
+		folio_unqueue_deferred_split(folio);
 		if (folio_batch_add(&free_folios, folio) == 0) {
 			mem_cgroup_uncharge_folios(&free_folios);
 			try_to_unmap_flush();
@@ -1849,7 +1849,7 @@ static unsigned int move_folios_to_lru(s
 		if (unlikely(folio_put_testzero(folio))) {
 			__folio_clear_lru_flags(folio);
 
-			folio_undo_large_rmappable(folio);
+			folio_unqueue_deferred_split(folio);
 			if (folio_batch_add(&free_folios, folio) == 0) {
 				spin_unlock_irq(&lruvec->lru_lock);
 				mem_cgroup_uncharge_folios(&free_folios);



  parent reply	other threads:[~2024-11-12 10:46 UTC|newest]

Thread overview: 198+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-12 10:19 [PATCH 6.11 000/184] 6.11.8-rc1 review Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 001/184] arm64: dts: rockchip: Fix rt5651 compatible value on rk3399-eaidk-610 Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 002/184] arm64: dts: rockchip: Fix rt5651 compatible value on rk3399-sapphire-excavator Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 003/184] arm64: dts: rockchip: Move L3 cache outside CPUs in RK3588(S) SoC dtsi Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 004/184] arm64: dts: rockchip: Start cooling maps numbering from zero on ROCK 5B Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 005/184] arm64: dts: rockchip: Designate Turing RK1s system power controller Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 006/184] firmware: qcom: scm: fix a NULL-pointer dereference Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 007/184] EDAC/qcom: Make irq configuration optional Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 008/184] arm64: dts: rockchip: Remove hdmis 2nd interrupt on rk3328 Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 009/184] arm64: dts: rockchip: Fix wakeup prop names on PineNote BT node Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 010/184] arm64: dts: rockchip: Fix reset-gpios property on brcm BT nodes Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 011/184] arm64: dts: rockchip: fix i2c2 pinctrl-names property on anbernic-rg353p/v Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 012/184] arm64: dts: rockchip: Drop regulator-init-microvolt from two boards Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 013/184] arm64: dts: rockchip: Fix bluetooth properties on rk3566 box demo Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 014/184] arm64: dts: rockchip: Fix bluetooth properties on Rock960 boards Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 015/184] arm64: dts: rockchip: Add DTS for FriendlyARM NanoPi R2S Plus Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 016/184] arm64: dts: rockchip: Remove undocumented supports-emmc property Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 017/184] arm64: dts: rockchip: Remove #cooling-cells from fan on Theobroma lion Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 018/184] arm64: dts: rockchip: Fix LED triggers on rk3308-roc-cc Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 019/184] arm64: dts: rockchip: remove num-slots property from rk3328-nanopi-r2s-plus Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 020/184] arm64: dts: qcom: sm8450 fix PIPE clock specification for pcie1 Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 021/184] arm64: dts: imx8-ss-vpu: Fix imx8qm VPU IRQs Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 022/184] arm64: dts: imx8mp: correct sdhc ipg clk Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 023/184] arm64: dts: imx8mp-phyboard-pollux: Set Video PLL1 frequency to 506.8 MHz Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 024/184] firmware: arm_scmi: Fix slab-use-after-free in scmi_bus_notifier() Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 025/184] firmware: qcom: scm: Return -EOPNOTSUPP for unsupported SHM bridge enabling Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 026/184] arm64: dts: rockchip: remove orphaned pinctrl-names from pinephone pro Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 027/184] ARM: dts: rockchip: fix rk3036 acodec node Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 028/184] ARM: dts: rockchip: drop grf reference from rk3036 hdmi Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 029/184] ARM: dts: rockchip: Fix the spi controller on rk3036 Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 030/184] ARM: dts: rockchip: Fix the realtek audio codec on rk3036-kylin Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 031/184] arm64: dts: rockchip: Correct GPIO polarity on brcm BT nodes Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 032/184] HID: core: zero-initialize the report buffer Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 033/184] platform/x86/amd/pmc: Detect when STB is not available Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 034/184] sunrpc: handle -ENOTCONN in xs_tcp_setup_socket() Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 035/184] NFSv3: only use NFS timeout for MOUNT when protocols are compatible Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 036/184] NFS: Fix attribute delegation behaviour on exclusive create Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 037/184] NFS: Further fixes to attribute delegation a/mtime changes Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 038/184] nfs: avoid i_lock contention in nfs_clear_invalid_mapping Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 039/184] security/keys: fix slab-out-of-bounds in key_task_permission Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 040/184] regulator: rtq2208: Fix uninitialized use of regulator_config Greg Kroah-Hartman
2024-11-12 10:19 ` [PATCH 6.11 041/184] net: enetc: set MAC address to the VF net_device Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 042/184] net: dpaa_eth: print FD status in CPU endianness in dpaa_eth_fd tracepoint Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 043/184] dt-bindings: net: xlnx,axi-ethernet: Correct phy-mode property value Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 044/184] sctp: properly validate chunk size in sctp_sf_ootb() Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 045/184] net: enetc: allocate vf_state during PF probes Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 046/184] net: xilinx: axienet: Enqueue Tx packets in dql before dmaengine starts Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 047/184] can: c_can: fix {rx,tx}_errors statistics Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 048/184] ice: change q_index variable type to s16 to store -1 value Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 049/184] i40e: fix race condition by adding filters intermediate sync state Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 050/184] e1000e: Remove Meteor Lake SMBUS workarounds Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 051/184] net: hns3: fix kernel crash when uninstalling driver Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 052/184] net: phy: ti: add PHY_RST_AFTER_CLK_EN flag Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 053/184] net: stmmac: Fix unbalanced IRQ wake disable warning on single irq case Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 054/184] netfilter: nf_tables: wait for rcu grace period on net_device removal Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 055/184] virtio_net: Support dynamic rss indirection table size Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 056/184] virtio_net: Add hash_key_length check Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 057/184] virtio_net: Sync rss config to device when virtnet_probe Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 058/184] virtio_net: Update rss when set queue Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 059/184] net: arc: fix the device for dma_map_single/dma_unmap_single Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 060/184] net: arc: rockchip: fix emac mdio node support Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 061/184] rxrpc: Fix missing locking causing hanging calls Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 062/184] net/smc: do not leave a dangling sk pointer in __smc_create() Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 063/184] drivers: net: ionic: add missed debugfs cleanup to ionic_probe() error path Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 064/184] Revert "ALSA: hda/conexant: Mute speakers at suspend / shutdown" Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 065/184] media: stb0899_algo: initialize cfr before using it Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 066/184] media: dvbdev: prevent the risk of out of memory access Greg Kroah-Hartman
2024-11-18  0:33   ` Nathan Chancellor
2024-11-19 12:03     ` Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 067/184] media: dvb_frontend: dont play tricks with underflow values Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 068/184] media: adv7604: prevent underflow condition when reporting colorspace Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 069/184] scsi: sd_zbc: Use kvzalloc() to allocate REPORT ZONES buffer Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 070/184] ALSA: firewire-lib: fix return value on fail in amdtp_tscm_init() Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 071/184] tools/lib/thermal: Fix sampling handler context ptr Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 072/184] thermal/of: support thermal zones w/o trips subnode Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 073/184] ASoC: stm32: spdifrx: fix dma channel release in stm32_spdifrx_remove Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 074/184] ASoC: SOF: sof-client-probes-ipc4: Set param_size extension bits Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 075/184] media: dvb-core: add missing buffer index check Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 076/184] media: mgb4: protect driver against spectre Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 077/184] media: ar0521: dont overflow when checking PLL values Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 078/184] media: s5p-jpeg: prevent buffer overflows Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 079/184] media: cx24116: prevent overflows on SNR calculus Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 080/184] media: av7110: fix a spectre vulnerability Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 081/184] media: pulse8-cec: fix data timestamp at pulse8_setup() Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 082/184] media: vivid: fix buffer overwrite when using > 32 buffers Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 083/184] media: v4l2-tpg: prevent the risk of a division by zero Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 084/184] media: v4l2-ctrls-api: fix error handling for v4l2_g_ctrl() Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 085/184] can: m_can: m_can_close(): dont call free_irq() for IRQ-less devices Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 086/184] can: mcp251xfd: mcp251xfd_get_tef_len(): fix length calculation Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 087/184] can: mcp251xfd: mcp251xfd_ring_alloc(): fix coalescing configuration when switching CAN modes Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 088/184] can: {cc770,sja1000}_isa: allow building on x86_64 Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 089/184] ksmbd: fix slab-use-after-free in ksmbd_smb2_session_create Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 090/184] ksmbd: check outstanding simultaneous SMB operations Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 091/184] ksmbd: Fix the missing xa_store error check Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 092/184] ksmbd: fix slab-use-after-free in smb3_preauth_hash_rsp Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 093/184] drm/xe: Fix possible exec queue leak in exec IOCTL Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 094/184] drm/xe: Drop VM dma-resv lock on xe_sync_in_fence_get failure " Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 095/184] drm/xe: Set mask bits for CCS_MODE register Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 096/184] pwm: imx-tpm: Use correct MODULO value for EPWM mode Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 097/184] tpm: Lock TPM chip in tpm_pm_suspend() first Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 098/184] rpmsg: glink: Handle rejected intent request better Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 099/184] drm/amd/pm: always pick the pptable from IFWI Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 100/184] drm/amd/display: Fix brightness level not retained over reboot Greg Kroah-Hartman
2024-11-12 10:20 ` [PATCH 6.11 101/184] drm/imagination: Add a per-file PVR context list Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 102/184] drm/imagination: Break an object reference loop Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 103/184] drm/amd/pm: correct the workload setting Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 104/184] drm/amd/display: parse umc_info or vram_info based on ASIC Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 105/184] drm/panthor: Lock XArray when getting entries for the VM Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 106/184] drm/panthor: Be stricter about IO mapping flags Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 107/184] drm/amdgpu: Adjust debugfs eviction and IB access permissions Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 108/184] drm/amdgpu: add missing size check in amdgpu_debugfs_gprwave_read() Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 109/184] drm/amdgpu: Adjust debugfs register access permissions Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 110/184] drm/amdgpu: Fix DPX valid mode check on GC 9.4.3 Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 111/184] drm/amdgpu: prevent NULL pointer dereference if ATIF is not supported Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 112/184] thermal/drivers/qcom/lmh: Remove false lockdep backtrace Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 113/184] KEYS: trusted: dcp: fix NULL dereference in AEAD crypto operation Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 114/184] dm cache: correct the number of origin blocks to match the target length Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 115/184] dm cache: fix flushing uninitialized delayed_work on cache_ctr error Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 116/184] dm cache: fix out-of-bounds access to the dirty bitset when resizing Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 117/184] dm cache: optimize dirty bit checking with find_next_bit " Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 118/184] dm cache: fix potential out-of-bounds access on the first resume Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 119/184] dm-unstriped: cast an operand to sector_t to prevent potential uint32_t overflow Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 120/184] dm: fix a crash if blk_alloc_disk fails Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 121/184] mptcp: no admin perm to list endpoints Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 122/184] ALSA: usb-audio: Add quirk for HP 320 FHD Webcam Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 123/184] scsi: ufs: core: Start the RTC update work later Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 124/184] nfs: Fix KMSAN warning in decode_getfattr_attrs() Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 125/184] tracing: Fix tracefs mount options Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 126/184] net: wwan: t7xx: Fix off-by-one error in t7xx_dpmaif_rx_buf_alloc() Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 127/184] net: vertexcom: mse102x: Fix possible double free of TX skb Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 128/184] mptcp: use sock_kfree_s instead of kfree Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 129/184] arm64/sve: Discard stale CPU state when handling SVE traps Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 130/184] arm64: Kconfig: Make SME depend on BROKEN for now Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 131/184] arm64: smccc: Remove broken support for SMCCCv1.3 SVE discard hint Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 132/184] mm/slab: fix warning caused by duplicate kmem_cache creation in kmem_buckets_create Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 133/184] KVM: PPC: Book3S HV: Mask off LPCR_MER for a vCPU before running it to avoid spurious interrupts Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 134/184] idpf: avoid vport access in idpf_get_link_ksettings Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 135/184] idpf: fix idpf_vc_core_init error path Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 136/184] btrfs: fix the length of reserved qgroup to free Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 137/184] btrfs: fix per-subvolume RO/RW flags with new mount API Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 138/184] btrfs: reinitialize delayed ref list after deleting it from the list Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 139/184] platform/x86/amd/pmf: Relocate CPU ID macros to the PMF header Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 140/184] platform/x86/amd/pmf: Update SMU metrics table for 1AH family series Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 141/184] platform/x86/amd/pmf: Add SMU metrics table support for 1Ah family 60h model Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 142/184] media: uvcvideo: Skip parsing frames of type UVC_VS_UNDEFINED in uvc_parse_format Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 143/184] filemap: Fix bounds checking in filemap_read() Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 144/184] i2c: designware: do not hold SCL low when I2C_DYNAMIC_TAR_UPDATE is not set Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 145/184] clk: qcom: gcc-x1e80100: Fix USB MP SS1 PHY GDSC pwrsts flags Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 146/184] clk: qcom: clk-alpha-pll: Fix pll post div mask when width is not set Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 147/184] fs/proc: fix compile warning about variable vmcore_mmap_ops Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 148/184] objpool: fix to make percpu slot allocation more robust Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 149/184] signal: restore the override_rlimit logic Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 150/184] mm/damon/core: avoid overflow in damon_feed_loop_next_input() Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 151/184] mm/damon/core: handle zero {aggregation,ops_update} intervals Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 152/184] mm/damon/core: handle zero schemes apply interval Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 153/184] mm/mlock: set the correct prev on failure Greg Kroah-Hartman
2024-11-12 10:21 ` Greg Kroah-Hartman [this message]
2024-11-12 10:21 ` [PATCH 6.11 155/184] thunderbolt: Add only on-board retimers when !CONFIG_USB4_DEBUGFS_MARGINING Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 156/184] usb: musb: sunxi: Fix accessing an released usb phy Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 157/184] usb: dwc3: fix fault at system suspend if device was already runtime suspended Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 158/184] usb: typec: qcom-pmic: init value of hdr_len/txbuf_len earlier Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 159/184] usb: typec: fix potential out of bounds in ucsi_ccg_update_set_new_cam_cmd() Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 160/184] USB: serial: io_edgeport: fix use after free in debug printk Greg Kroah-Hartman
2024-11-12 10:21 ` [PATCH 6.11 161/184] USB: serial: qcserial: add support for Sierra Wireless EM86xx Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 162/184] USB: serial: option: add Fibocom FG132 0x0112 composition Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 163/184] USB: serial: option: add Quectel RG650V Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 164/184] clk: qcom: videocc-sm8350: use HW_CTRL_TRIGGER for vcodec GDSCs Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 165/184] clk: qcom: gcc-x1e80100: Fix halt_check for pipediv2 clocks Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 166/184] thunderbolt: Fix connection issue with Pluggable UD-4VPD dock Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 167/184] staging: vchiq_arm: Use devm_kzalloc() for drv_mgmt allocation Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 168/184] staging: vchiq_arm: Use devm_kzalloc() for vchiq_arm_state allocation Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 169/184] irqchip/gic-v3: Force propagation of the active state with a read-back Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 170/184] ocfs2: remove entry once instead of null-ptr-dereference in ocfs2_xa_remove() Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 171/184] ucounts: fix counter leak in inc_rlimit_get_ucounts() Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 172/184] selftests: hugetlb_dio: check for initial conditions to skip in the start Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 173/184] firmware: qcom: scm: Refactor code to support multiple dload mode Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 174/184] firmware: qcom: scm: suppress download mode error Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 175/184] block: rework bio splitting Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 176/184] block: fix queue limits checks in blk_rq_map_user_bvec for real Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 177/184] drm/xe/guc/ct: Flush g2h worker in case of g2h response timeout Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 178/184] drm/xe: Move LNL scheduling WA to xe_device.h Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 179/184] drm/xe/ufence: Flush xe ordered_wq in case of ufence timeout Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 180/184] drm/xe/guc/tlb: Flush g2h worker in case of tlb timeout Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 181/184] ASoC: amd: yc: fix internal mic on Xiaomi Book Pro 14 2022 Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 182/184] xtensa: Emulate one-byte cmpxchg Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 183/184] hv_sock: Initializing vsk->trans to NULL to prevent a dangling pointer Greg Kroah-Hartman
2024-11-12 10:22 ` [PATCH 6.11 184/184] vsock/virtio: Initialization of the dangling pointer occurring in vsk->trans Greg Kroah-Hartman
2024-11-12 16:21 ` [PATCH 6.11 000/184] 6.11.8-rc1 review Luna Jernberg
2024-11-12 20:58 ` Pavel Machek
2024-11-12 23:12 ` Shuah Khan
2024-11-13  0:24 ` Ron Economos
2024-11-13  1:25 ` Florian Fainelli
2024-11-13 11:05 ` Naresh Kamboju
2024-11-13 13:28 ` Mark Brown
2024-11-13 19:42 ` Peter Schneider
2024-11-13 19:59 ` Jon Hunter
2024-11-14 10:52 ` [PATCH 6.11] " Hardik Garg
2024-11-14 11:45 ` [PATCH 6.11 000/184] " Christian Heusel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241112101906.783436968@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=akpm@linux-foundation.org \
    --cc=baohua@kernel.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=chrisl@kernel.org \
    --cc=david@redhat.com \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=nphamcs@gmail.com \
    --cc=patches@lists.linux.dev \
    --cc=richard.weiyang@gmail.com \
    --cc=ryan.roberts@arm.com \
    --cc=shakeel.butt@linux.dev \
    --cc=shy828301@gmail.com \
    --cc=stable@vger.kernel.org \
    --cc=usamaarif642@gmail.com \
    --cc=wangkefeng.wang@huawei.com \
    --cc=willy@infradead.org \
    --cc=ziy@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox