Matthew Wilcox (Oracle) cbc0285433 XArray: Do not return sibling entries from xa_load()
It is possible for xa_load() to observe a sibling entry pointing to
another sibling entry.  An example:

Thread A:		Thread B:
			xa_store_range(xa, entry, 188, 191, gfp);
xa_load(xa, 191);
entry = xa_entry(xa, node, 63);
[entry is a sibling of 188]
			xa_store_range(xa, entry, 184, 191, gfp);
if (xa_is_sibling(entry))
offset = xa_to_sibling(entry);
entry = xa_entry(xas->xa, node, offset);
[entry is now a sibling of 184]

It is sufficient to go around this loop until we hit a non-sibling entry.
Sibling entries always point earlier in the node, so we are guaranteed
to terminate this search.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Fixes: 6b24ca4a1a8d ("mm: Use multi-index entries in the page cache")
Cc: stable@vger.kernel.org
2023-07-28 15:37:45 -04:00
..
2023-06-13 15:13:20 -07:00
2023-06-09 17:44:13 -07:00
2021-05-06 19:24:12 -07:00
2023-04-08 13:45:37 -07:00
2021-01-21 14:06:00 -07:00
2022-03-07 12:48:35 -07:00
2021-08-19 09:02:55 +09:00
2023-02-02 22:50:01 -08:00
2023-02-02 22:50:01 -08:00
2022-04-22 21:30:57 +02:00
2023-02-15 15:44:43 +01:00
2021-01-03 20:05:18 -05:00
2023-03-19 10:02:04 -07:00
2022-03-07 12:48:35 -07:00
2022-04-29 14:38:01 -07:00
2022-07-10 13:55:49 -07:00
2022-10-03 14:03:21 -07:00
2021-08-19 09:02:55 +09:00
2023-07-08 12:08:39 -07:00
2021-07-08 11:48:20 -07:00
2023-04-17 18:01:23 +02:00
2021-07-08 11:48:20 -07:00
2022-10-03 17:34:32 -07:00
2021-07-08 11:48:20 -07:00
2023-07-21 11:40:20 -06:00
2023-07-06 10:06:04 -07:00
2022-06-03 10:34:34 -07:00
2021-06-18 11:43:09 +02:00
2021-07-08 11:48:20 -07:00
2023-05-31 12:58:38 +02:00
2022-01-20 08:52:54 +02:00
2022-12-13 15:47:48 -08:00