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 6F492C02190 for ; Thu, 30 Jan 2025 08:59:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C35232800D3; Thu, 30 Jan 2025 03:59:40 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BE4A62800D0; Thu, 30 Jan 2025 03:59:40 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AADA32800D3; Thu, 30 Jan 2025 03:59:40 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 883922800D0 for ; Thu, 30 Jan 2025 03:59:40 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 06425A0B28 for ; Thu, 30 Jan 2025 08:59:40 +0000 (UTC) X-FDA: 83063520120.06.E63CB53 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf22.hostedemail.com (Postfix) with ESMTP id 4DE5AC0010 for ; Thu, 30 Jan 2025 08:59:38 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=linuxfoundation.org header.s=korg header.b=L8OIQZbx; spf=pass (imf22.hostedemail.com: domain of gregkh@linuxfoundation.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org; dmarc=pass (policy=none) header.from=linuxfoundation.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738227578; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:dkim-signature; bh=yTkosUEKR0Ce/mQMKIRqasUaiYE1ZxsYY+2FP/LHKqE=; b=U7Cu5YpWdMssoiuBL+UV1QALeGBCkDCLrKF8/JfNuc9H9Ry0wR/gREhHZ+GIc1HuZvqh+d mOldDF3KZASd6Ii9Z1u1hExItowJSx4Hz+ZVNw0Qcis8be2j0KM28rv8tMX6MNUodFTJW2 Qh83eD5mweV253Byu7gnXXje9YsV3cM= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=linuxfoundation.org header.s=korg header.b=L8OIQZbx; spf=pass (imf22.hostedemail.com: domain of gregkh@linuxfoundation.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=gregkh@linuxfoundation.org; dmarc=pass (policy=none) header.from=linuxfoundation.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738227578; a=rsa-sha256; cv=none; b=mjsLyGF+VWJPPshBWT/7jyBAuw3xqF+cRbdSKU5GjViCZMh506vddi/l+rsRSwbam+JxbU MM32lC4yhX3PPCGB04aCvCsAfWnsO0dF80kTBdGPexmjJw62L6bIzuU4cIrbwAcMX4EAwU x92TZs6CmnGP1Nnz9BVqf97tQE7E/LY= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 76E115C5E92; Thu, 30 Jan 2025 08:58:57 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D3D15C4CED2; Thu, 30 Jan 2025 08:59:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1738227577; bh=YYN0qfB5E7FZidafsZszeRcKBl8CKJlfmdfU0N00E/E=; h=Subject:To:Cc:From:Date:In-Reply-To:From; b=L8OIQZbxDh3MMX4oJWmboJbio/i0UWsI3W0RDbVbKknMKiA1qIwY1+r+TuNIhaTm6 ttx7xd0tkiQuYvRGRhVELlgv5C/wqgD+iQdwTYLrN7+2hJaEubrX3kqp9z0D+lCNK+ qzPVYlK9XvlvDrAunZAawdYsqeIUL/WVaQn0kaYM= Subject: Patch "libfs: Add simple_offset_empty()" has been added to the 6.6-stable tree To: akpm@linux-foundation.org,brauner@kernel.org,cel@kernel.org,chuck.lever@oracle.com,gregkh@linuxfoundation.org,hughd@google.com,jack@suse.cz,linux-mm@kvack.org,sashal@kernel.org,viro@zeniv.linux.org.uk,yangerkun@huawei.com,yukuai3@huawei.com Cc: From: Date: Thu, 30 Jan 2025 09:59:29 +0100 In-Reply-To: <20250124191946.22308-4-cel@kernel.org> Message-ID: <2025013028-manlike-aerobics-609b@gregkh> MIME-Version: 1.0 Content-Type: text/plain; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: 8bit X-stable: commit X-Patchwork-Hint: ignore X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 4DE5AC0010 X-Stat-Signature: kcui5kubawsmx15pkn1do3rujtiibayg X-Rspam-User: X-HE-Tag: 1738227578-467220 X-HE-Meta: U2FsdGVkX18ffwuhO6H/+93+e5MRCrAOsBtNBu6uP//iR6sOeEQk2nl6V6fhB2OMyNf+JcNIbgwWFb4pYzcoNoRZ/ru8OF7zETnUxvqLn8CeK7pIfCKikP0X9UryNyo4S4hDQw9CYT5FnMEO66GeFQvB6m5t3TIGtK6rQ9J1csEKNLu7zUTWHUCNFQUKf/+UFWJEcHu4hhTFHrJi1gB6m3CQsJZSqdItnnw3lKVCROjMVrRfLtwfpkDikrB13/AKSMAmclNmpRIRn89zWXe9BLE2/0S9sqH7drsuIJFEagMMaV5DzGvx3/r524kt06xXzpplpB2DxpxTm/GrymZUAMGOr8Rqk6c3IxZ9WBzb2vlCMaY169TMK6RHM8+TgqCreA9y9Cef89D0xAU67xsn77OqXUDYy0KGmApV3pEc7z3ADQBbbD+pFzOjLgpv36rPBEw9VzLhSIra/x0PUEpTj6iNFr1DN0Zk0E96o4Jo1glLFhx/JuczgEAlGNbTt9MZ8TBGvTx8UonZASBECVd6Dx7RyfqCVFC1YaYFFP+rzh2FIUxx+xYVtloDPzugwbAHOmkqwXQKmXiivNQLgMPXWXbXYa28vtnlo3K2pAgwGzUWpJZhp5PauStn+1AdOXZbPcA/YfSjuG710Q1B4IpOLn/ug63fihXrLmS6dLIyULTuCvhLOhPFrGhrJy1TzaNBXOaJawXr9rJxqGjcsxF8HBIWvAbidYz8nalHsfHEGKJ7XP6ysmNTEFQoVOxHR0YOHRpOdpNyYbtuMeDvw35aGpEpD1dcTyIaVAEHlVHw/hQrPbh+vAXGyGttzqxATspiZeLvjA5rwg/jBgfa6jVoe3pHug/SfkvMhHze6eBmnQ4/ggbzWzU5Iz/+8lY5Tni1sksh8LLrHn2afsepyj7xyT2EV02ob0Sczkq4SjW26do8Jugg9zQ3eAsePbh9gIsLe0B76MmwWJ0FRjZGUrn qnPUvR9y xy/tIOoHETOS319gBPQWLQbZzAvmDk6G7r+57GvVRtuh1AIk80qRbLwqIryNR/ac0NInY+k9df6XwLgetLfGmRzlMk5iexRBl6z5Fr27EGJbChetW6MwdSMhk0w4i1K9MbeHkcx0nO/srWD7h+0fltC6lu1tBzEwxCLKNS+u0z9ic7UXpXAw1lUzgwnb9p3XWiZMz10rHkl0HeS298xVbIUK89JHNLuCtNUcBxeSBIIe7NvRHo05xMsUedQ5nHxHqeJ5819WzeD2DPGk3aaO/R2edkHbS4p+4sMPhllpgK1fK8cK11zdgWjCJfUZwc5hMGVuiDC4o4L53XwdXwapAzk/4MHJ2Q5b8UkDQkRYIBaLFEe1GCaBbrXcdYlK7O6ZgH889mV5xoYhU43huFPWM1S7eYaTaN1KKSmbaMKGGkEFC+K2X6ZnARcY8i7W4O1+Xm0OUVjBMqfbpNFviO14lcBXB3dMblmDLFzzu5l347F0t8E9GskhfpozLPotX7iY+n8njJzrktcq2/ljMCJiZb0sb+HcPWxecOLXCnMHjk54qR95vbS5tPCuHiKlKknf5Z+gfuB+N85jpLFGngdnwJt0LP51zO1fVE+VCzNmwfmpm1s1f8szfZzenv0VO0D7MS9lVp1trxfMV2dpRhc2mVhU4J4RgWvIv2mLFHYlB+ZbGQbMxS+E+0Zps+0L24WImToyFxRtBJK4pKHTXyJvDGwPmyUHCDZl7gVN0HFggKu3HR3Qt2KUO9JrLAB1pQ2ccCvMg 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: This is a note to let you know that I've just added the patch titled libfs: Add simple_offset_empty() to the 6.6-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: libfs-add-simple_offset_empty.patch and it can be found in the queue-6.6 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let know about it. >From stable+bounces-110403-greg=kroah.com@vger.kernel.org Fri Jan 24 20:20:42 2025 From: cel@kernel.org Date: Fri, 24 Jan 2025 14:19:38 -0500 Subject: libfs: Add simple_offset_empty() To: Hugh Dickins , Andrew Morten , Christian Brauner , Al Viro , Greg Kroah-Hartman , Sasha Levin Cc: , , , yukuai3@huawei.com, yangerkun@huawei.com, Chuck Lever , Jan Kara Message-ID: <20250124191946.22308-4-cel@kernel.org> From: Chuck Lever [ Upstream commit ecba88a3b32d733d41e27973e25b2bc580f64281 ] For simple filesystems that use directory offset mapping, rely strictly on the directory offset map to tell when a directory has no children. After this patch is applied, the emptiness test holds only the RCU read lock when the directory being tested has no children. In addition, this adds another layer of confirmation that simple_offset_add/remove() are working as expected. Reviewed-by: Jan Kara Signed-off-by: Chuck Lever Link: https://lore.kernel.org/r/170820143463.6328.7872919188371286951.stgit@91.116.238.104.host.secureserver.net Signed-off-by: Christian Brauner Stable-dep-of: 5a1a25be995e ("libfs: Add simple_offset_rename() API") Signed-off-by: Chuck Lever Signed-off-by: Greg Kroah-Hartman --- fs/libfs.c | 32 ++++++++++++++++++++++++++++++++ include/linux/fs.h | 1 + mm/shmem.c | 4 ++-- 3 files changed, 35 insertions(+), 2 deletions(-) --- a/fs/libfs.c +++ b/fs/libfs.c @@ -313,6 +313,38 @@ void simple_offset_remove(struct offset_ } /** + * simple_offset_empty - Check if a dentry can be unlinked + * @dentry: dentry to be tested + * + * Returns 0 if @dentry is a non-empty directory; otherwise returns 1. + */ +int simple_offset_empty(struct dentry *dentry) +{ + struct inode *inode = d_inode(dentry); + struct offset_ctx *octx; + struct dentry *child; + unsigned long index; + int ret = 1; + + if (!inode || !S_ISDIR(inode->i_mode)) + return ret; + + index = DIR_OFFSET_MIN; + octx = inode->i_op->get_offset_ctx(inode); + xa_for_each(&octx->xa, index, child) { + spin_lock(&child->d_lock); + if (simple_positive(child)) { + spin_unlock(&child->d_lock); + ret = 0; + break; + } + spin_unlock(&child->d_lock); + } + + return ret; +} + +/** * simple_offset_rename_exchange - exchange rename with directory offsets * @old_dir: parent of dentry being moved * @old_dentry: dentry being moved --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -3197,6 +3197,7 @@ struct offset_ctx { void simple_offset_init(struct offset_ctx *octx); int simple_offset_add(struct offset_ctx *octx, struct dentry *dentry); void simple_offset_remove(struct offset_ctx *octx, struct dentry *dentry); +int simple_offset_empty(struct dentry *dentry); int simple_offset_rename_exchange(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, --- a/mm/shmem.c +++ b/mm/shmem.c @@ -3368,7 +3368,7 @@ static int shmem_unlink(struct inode *di static int shmem_rmdir(struct inode *dir, struct dentry *dentry) { - if (!simple_empty(dentry)) + if (!simple_offset_empty(dentry)) return -ENOTEMPTY; drop_nlink(d_inode(dentry)); @@ -3425,7 +3425,7 @@ static int shmem_rename2(struct mnt_idma return simple_offset_rename_exchange(old_dir, old_dentry, new_dir, new_dentry); - if (!simple_empty(new_dentry)) + if (!simple_offset_empty(new_dentry)) return -ENOTEMPTY; if (flags & RENAME_WHITEOUT) { Patches currently in stable-queue which might be from cel@kernel.org are queue-6.6/libfs-replace-simple_offset-end-of-directory-detection.patch queue-6.6/libfs-re-arrange-locking-in-offset_iterate_dir.patch queue-6.6/libfs-add-simple_offset_empty.patch queue-6.6/shmem-fix-shmem_rename2.patch queue-6.6/revert-libfs-add-simple_offset_empty.patch queue-6.6/libfs-use-d_children-list-to-iterate-simple_offset-directories.patch queue-6.6/libfs-define-a-minimum-directory-offset.patch queue-6.6/libfs-return-enospc-when-the-directory-offset-range-is-exhausted.patch queue-6.6/libfs-fix-simple_offset_rename_exchange.patch queue-6.6/libfs-add-simple_offset_rename-api.patch