From: Kemeng Shi Date: Fri, 13 Dec 2024 12:25:21 +0000 (+0800) Subject: Xarray: distinguish large entries correctly in xas_split_alloc() X-Git-Tag: v6.14-rc1~78^2~4 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=97db889b961ef3f849813de34bd3ea5715813ed0;p=thirdparty%2Fkernel%2Flinux.git Xarray: distinguish large entries correctly in xas_split_alloc() We don't support large entries which expand two more level xa_node in split. For case "xas->xa_shift + 2 * XA_CHUNK_SHIFT == order", we also need two level of xa_node to expand. Distinguish entry as large entry in case "xas->xa_shift + 2 * XA_CHUNK_SHIFT == order". As max order of folio in pagecache (MAX_PAGECACHE_ORDER) is <= (XA_CHUNK_SHIFT * 2 - 1), this change is more likely a cleanup... Link: https://lkml.kernel.org/r/20241213122523.12764-4-shikemeng@huaweicloud.com Signed-off-by: Kemeng Shi Cc: Mattew Wilcox Signed-off-by: Andrew Morton --- diff --git a/lib/xarray.c b/lib/xarray.c index 091e2c927915a..ecd2e4f71aa86 100644 --- a/lib/xarray.c +++ b/lib/xarray.c @@ -1027,7 +1027,7 @@ void xas_split_alloc(struct xa_state *xas, void *entry, unsigned int order, unsigned int mask = xas->xa_sibs; /* XXX: no support for splitting really large entries yet */ - if (WARN_ON(xas->xa_shift + 2 * XA_CHUNK_SHIFT < order)) + if (WARN_ON(xas->xa_shift + 2 * XA_CHUNK_SHIFT <= order)) goto nomem; if (xas->xa_shift + XA_CHUNK_SHIFT > order) return;