From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA80CC02188 for ; Mon, 27 Jan 2025 16:21:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 67C9528017E; Mon, 27 Jan 2025 11:21:45 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 62CD1280148; Mon, 27 Jan 2025 11:21:45 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4CCB728017E; Mon, 27 Jan 2025 11:21:45 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 2D7D1280148 for ; Mon, 27 Jan 2025 11:21:45 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id D0D6A1603EF for ; Mon, 27 Jan 2025 16:21:44 +0000 (UTC) X-FDA: 83053747728.28.08E72D6 Received: from mail-vs1-f44.google.com (mail-vs1-f44.google.com [209.85.217.44]) by imf04.hostedemail.com (Postfix) with ESMTP id B4E964001E for ; Mon, 27 Jan 2025 16:21:42 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=none; spf=pass (imf04.hostedemail.com: domain of geert.uytterhoeven@gmail.com designates 209.85.217.44 as permitted sender) smtp.mailfrom=geert.uytterhoeven@gmail.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1737994902; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=45OoBPJoV8zGfJClLFYbCrAaSSdq0Hy4HHZ9q0U58K4=; b=b1Ej2V+ekMCQyAAzuh9aco9N+kJjx+2tl/K741wsBm83JP66RFSVSdBy0IvpiJkIqVWDwG OncvCEoUXw/INs7fzD7QAzhcmm/G0fLZenhGpxUyw+GaYgzYR1d+st9rbYySQGYIZfWkQY +mkmDAsDDtnwavmqXnVP20ykLBd1tH0= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=none; spf=pass (imf04.hostedemail.com: domain of geert.uytterhoeven@gmail.com designates 209.85.217.44 as permitted sender) smtp.mailfrom=geert.uytterhoeven@gmail.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1737994902; a=rsa-sha256; cv=none; b=liYn+SBIGwyPNciWy9pIewGc1VXDpRqLhQxKzcZtJTKWvtnUm63tPBS7Yj9cda62079WVZ mSlkfzVsXg9uqCkwTKb9wVFT2/2jXGhljK7sLtXXmaS077Y6GgNm3tqXEfaZ/L8Q7xhQII iMU/W3JemCru1q9Czz8buVIa4mjYSEI= Received: by mail-vs1-f44.google.com with SMTP id ada2fe7eead31-4b24bc0cc65so2822927137.2 for ; Mon, 27 Jan 2025 08:21:42 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737994901; x=1738599701; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=45OoBPJoV8zGfJClLFYbCrAaSSdq0Hy4HHZ9q0U58K4=; b=DMo8tn3nqTlnEExaNMD50OG0bLxeg4VnW0ivrs5llplpfytr3mGZ4uUADPVIc6hnMe lT5IcEonoUeXL1DzZ4WEU180InXjUmATVyQcgO0NPypWqHu7+Nk5AIvDKafzI3ruhORo q/vXeCnn1ivbjMQIUyYRA4Xw10P+0sUpEwWweiZgo+CyLBovHFL13iLfTglISc3eMli0 dIUL5+nJ5L9vHzNRH/bydseaK4pOkJ6JsBYVdEdd6hqvRsiwzfSJA5T0j5nMKzaD/esh 50T5+VPLL8UcPxzxzLReQRZsYQeAsEWnI56SiLln+YP/MQckrvKT194pwQyman60ZVN+ JAQg== X-Forwarded-Encrypted: i=1; AJvYcCUgz3kycuCpEaozxUxo9oeyyPxZ6cXzqAKEM3OKveAbSleULHEP+hYKwUw3q/bKjmAnfMsFLxaNCA==@kvack.org X-Gm-Message-State: AOJu0YyZlD5xgwlPULyl0ah5faMwQbiK/jtJuLKkjM3VUz+sP7BNVWD2 6v9KrDbV3BLC7V4u++jjW/VnXrj34NAvujrzY6wPCzJy8mvadzSgtR13sRKg/BY= X-Gm-Gg: ASbGncvownEeB5NABFrq2ZVdBy5hQBu0I63ROl93uKaM4K99eCCEaIY+SHpHLzqVmDj MMAEXGzkCEf7LG8fnQmPCrxo3JvmkvHLF6ikl2KmqPGruRory6GOk/tVW79BQQWYN2Z7af/h2a8 HEksM1po1OMRkHkr1zAgVcqEYq9qircFndOa0Zr8/MJhAnQLnm/XKHgStf6xY5YciONhprAaZl6 /jHW9llNIB06LAQSiyDE1yGSnaSU4C5AXin6VlIT/9QfZ/w1Fbhp0lBxertcEY5hgrPpbfaL8QM WwOpb+K48tC+qG/2+pCPXK7a436iGdP6UUa1oDMo79A= X-Google-Smtp-Source: AGHT+IEOwidlYKwFLK1ODplykXF7fOeCbwU0rKNWQJnkurWakbdDJTuAjQpRiMPFnqR6a/gMa55bCw== X-Received: by 2002:a05:6102:a4a:b0:4b1:1b07:f7c3 with SMTP id ada2fe7eead31-4b690c77e0dmr35230725137.20.1737994900498; Mon, 27 Jan 2025 08:21:40 -0800 (PST) Received: from mail-ua1-f47.google.com (mail-ua1-f47.google.com. [209.85.222.47]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-864a9af3315sm1941812241.12.2025.01.27.08.21.40 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Jan 2025 08:21:40 -0800 (PST) Received: by mail-ua1-f47.google.com with SMTP id a1e0cc1a2514c-85b88a685e6so2175019241.2 for ; Mon, 27 Jan 2025 08:21:40 -0800 (PST) X-Forwarded-Encrypted: i=1; AJvYcCUzfoNCEqR3v7LpXHyKoHSf3kamEPdaurkOJqGrrIwzL7Dw5ryOe67kfDDSt+V7WOltb8AkVmUrsg==@kvack.org X-Received: by 2002:a05:6102:370e:b0:4b1:1a24:e19c with SMTP id ada2fe7eead31-4b690bb53cbmr34951549137.7.1737994899878; Mon, 27 Jan 2025 08:21:39 -0800 (PST) MIME-Version: 1.0 References: <20241218154613.58754-1-shikemeng@huaweicloud.com> <20241218154613.58754-3-shikemeng@huaweicloud.com> In-Reply-To: <20241218154613.58754-3-shikemeng@huaweicloud.com> From: Geert Uytterhoeven Date: Mon, 27 Jan 2025 17:21:27 +0100 X-Gmail-Original-Message-ID: X-Gm-Features: AWEUYZm3QsghWJGgtE4-bBJDpa8L-HpWyQPtWRVnePo0_2YvMLY_Y47k7OF49o4 Message-ID: Subject: Re: [PATCH v4 2/5] Xarray: move forward index correctly in xas_pause() To: Kemeng Shi Cc: akpm@linux-foundation.org, willy@infradead.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-nfs@vger.kernel.org, linux-m68k Content-Type: text/plain; charset="UTF-8" X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: B4E964001E X-Stat-Signature: 1qp8b4fu8dewks9374fcmhgfoyfudoxp X-HE-Tag: 1737994902-522562 X-HE-Meta: U2FsdGVkX1+Thy7iz1eij0Z+mfbO/WZTq0NagMBBxbhSGpdTvvoPD+F0F4k0Q5pKgvIutL+l/abO0l5XzRoFfttgWoc7HtoisGEUDu2kT5Dw4vFADB1m3aMh6hbSSjNVyjOsd4P6fXQvVc/+rXnZyGm+GT5NzYBKkOWrMAp5nj6NY2LnZ6GA+FdeusGygQDq1dKwIPoa12IbPoxrIoMMGiA67gJo3u8Ju2XT8WQwidBUglDF8WmqtWUFnFnpIFO+bWEFsrG1DgQARzH76xp+VHw2xtYSWK5G4hpFWSJHcFcs7ZvEySaO6Qfp7awU83QdH3bTMBtLNHSl6fS1Kp6rh8djpUl9Wz+xx1cxTxNr73my2RZti1jqmSYaDV1rGQ8ft4n0uvxdatpeKvZOp0U9voCI5Sm8Qws+pTkJCBYN18Feula/jf4t0KJ2EOVAXTOq1vvGSF1BOwdL49elBiEQqR1shP01IKJIa6KVJTcl7kp/Cgmq/bSy2ZM6wMNbxOOCR3Y7+gvyZ3qQfiZq4XA+ukkMM7MgxrH4k/LwQV510S57+gphwj8Gtbrgbgt79VKJEDvFp3Np5KM+Vtw675tL3W0bWqZDjP8DQPpXPlH/wM/k2f5K7bgIjnm9l08hV18PE3DUCBXoc79C+ca9Vjs0ZavZ81U1vX9EDTaQ9Tp0ziSNluCVICrTT+FfyB2ReBUjLoVrq6ez4ZqCGAuhuqWF/TUtlzud7uY+KCWSnYQR8sRJQvPqFiLIDo3putkNn4hgIwrJg+KFdHonYgCbABgJFLp890dZnxJRJ2Ip0ApY6LLWKuI8KXMHpWL9C1FiSb9iiEg21rVp+JcFenCLFG0Y+Kxk0kqgtKxBzuLV5rnMZmGgqij4Lb+pCic1tL8i0D4AXOeO1tA4IcDGS57IBHnN/lVUhWDYnzEZrSG3x4TaNAJBZ4sulqZzg9B6p4qBLjw4MSfiBocExcSQgfXNXXv 1j6QZvh/ iyYG8YZfArFBwGYIfH+WekBziQzkaB+cE/n6noCtBJYeaB1KmL2uStK1a3Upz8mIvc9dzOP2TsPcev/uMZcfkEE7glA2h8DpWtbHYuHhkhGAEVUP9vuZ2t4/DKiNf+wHJ8e7h5FF+5Q6tn3DV1Z1KeHoPa6ufgFJbipoU2NoX74eZEFD4XERadN7PLZBhl3WuT9k0pXaqPZUH9bvtEAjO7AcmWpX+YdKteijDiNH2ZYeYm7pC/KTrlOzRFEF0MCWnwwP8NU6d/yrDpwq7tVDdblbqtRRVr6YIu/2Hk1l14ONOycP/U4XcNWwyVasEKv9PM4YXwMj3Im9fn8qoXEz+ziqWGrOlTExZ6Fz6hf1IbNz+HVmfkHx+jTNkbOLI2orb5kjzK85ZjtFArwsgzu7dl4NDgOlKCjwrvmZdARwsNB7QtcxlEwbVsdR15nqLoGTnPhwEKS3eT4zXGopjae3k8PSzPnqtw4QBhmNf X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi Kemeng, On Wed, 18 Dec 2024 at 07:58, Kemeng Shi wrote: > After xas_load(), xas->index could point to mid of found multi-index entry > and xas->index's bits under node->shift maybe non-zero. The afterward > xas_pause() will move forward xas->index with xa->node->shift with bits > under node->shift un-masked and thus skip some index unexpectedly. > > Consider following case: > Assume XA_CHUNK_SHIFT is 4. > xa_store_range(xa, 16, 31, ...) > xa_store(xa, 32, ...) > XA_STATE(xas, xa, 17); > xas_for_each(&xas,...) > xas_load(&xas) > /* xas->index = 17, xas->xa_offset = 1, xas->xa_node->xa_shift = 4 */ > xas_pause() > /* xas->index = 33, xas->xa_offset = 2, xas->xa_node->xa_shift = 4 */ > As we can see, index of 32 is skipped unexpectedly. > > Fix this by mask bit under node->xa_shift when move forward index in > xas_pause(). > > For now, this will not cause serious problems. Only minor problem > like cachestat return less number of page status could happen. > > Signed-off-by: Kemeng Shi Thanks for your patch, which is now commit c9ba5249ef8b080c ("Xarray: move forward index correctly in xas_pause()") upstream. > --- a/lib/test_xarray.c > +++ b/lib/test_xarray.c > @@ -1448,6 +1448,41 @@ static noinline void check_pause(struct xarray *xa) > XA_BUG_ON(xa, count != order_limit); > > xa_destroy(xa); > + > + index = 0; > + for (order = XA_CHUNK_SHIFT; order > 0; order--) { > + XA_BUG_ON(xa, xa_store_order(xa, index, order, > + xa_mk_index(index), GFP_KERNEL)); > + index += 1UL << order; > + } > + > + index = 0; > + count = 0; > + xas_set(&xas, 0); > + rcu_read_lock(); > + xas_for_each(&xas, entry, ULONG_MAX) { > + XA_BUG_ON(xa, entry != xa_mk_index(index)); > + index += 1UL << (XA_CHUNK_SHIFT - count); > + count++; > + } > + rcu_read_unlock(); > + XA_BUG_ON(xa, count != XA_CHUNK_SHIFT); > + > + index = 0; > + count = 0; > + xas_set(&xas, XA_CHUNK_SIZE / 2 + 1); > + rcu_read_lock(); > + xas_for_each(&xas, entry, ULONG_MAX) { > + XA_BUG_ON(xa, entry != xa_mk_index(index)); > + index += 1UL << (XA_CHUNK_SHIFT - count); > + count++; > + xas_pause(&xas); > + } > + rcu_read_unlock(); > + XA_BUG_ON(xa, count != XA_CHUNK_SHIFT); > + > + xa_destroy(xa); > + > } On m68k, the last four XA_BUG_ON() checks above are triggered when running the test. With extra debug prints added: entry = 00000002 xa_mk_index(index) = 000000c1 entry = 00000002 xa_mk_index(index) = 000000e1 entry = 00000002 xa_mk_index(index) = 000000f1 ... entry = 000000e2 xa_mk_index(index) = fffff0ff entry = 000000f9 xa_mk_index(index) = fffff8ff entry = 000000f2 xa_mk_index(index) = fffffcff count = 63 XA_CHUNK_SHIFT = 6 entry = 00000081 xa_mk_index(index) = 00000001 entry = 00000002 xa_mk_index(index) = 00000081 entry = 00000002 xa_mk_index(index) = 000000c1 ... entry = 000000e2 xa_mk_index(index) = ffffe0ff entry = 000000f9 xa_mk_index(index) = fffff0ff entry = 000000f2 xa_mk_index(index) = fffff8ff count = 62 XA_CHUNK_SHIFT = 6 On arm32, the test succeeds, so it's probably not a 32-vs-64-bit issue. Perhaps a big-endian or alignment issue (alignof(int/long) = 2)? > --- a/lib/xarray.c > +++ b/lib/xarray.c > @@ -1147,6 +1147,7 @@ void xas_pause(struct xa_state *xas) > if (!xa_is_sibling(xa_entry(xas->xa, node, offset))) > break; > } > + xas->xa_index &= ~0UL << node->shift; > xas->xa_index += (offset - xas->xa_offset) << node->shift; > if (xas->xa_index == 0) > xas->xa_node = XAS_BOUNDS; Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds