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 0D396CD37B6 for ; Wed, 4 Sep 2024 22:28:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 80B4F6B008C; Wed, 4 Sep 2024 18:28:45 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7944E6B00BE; Wed, 4 Sep 2024 18:28:45 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 60EF96B00AE; Wed, 4 Sep 2024 18:28:45 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 359CD6B0204 for ; Wed, 4 Sep 2024 18:28:45 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 790141A04FF for ; Wed, 4 Sep 2024 22:28:44 +0000 (UTC) X-FDA: 82528496568.16.96A8DE5 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf08.hostedemail.com (Postfix) with ESMTP id 4B4E0160005 for ; Wed, 4 Sep 2024 22:28:41 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b="jafjgz/d"; spf=pass (imf08.hostedemail.com: domain of andrealmeid@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com; dmarc=pass (policy=none) header.from=igalia.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725488794; 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:references:dkim-signature; bh=KSjAivHlg5cFDajG1oCwI0Dhjh9+yTX2k4XmuHn6kME=; b=YkJxPXp56ElZoc1kCVt1jEwiVN2plgUU2D1CRh491ITt0sD2mqreldfSklCqxJaLCJSyUF PnpQmxFEJID2bHt1IKSYCX4/D/XMyIjLeOPZAcBuBfKtmbrrNhEqh6jiSq2A5BA/5dIjeV kl6J3xeKxEjAboA6YaTUJ9+1+uOs90A= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b="jafjgz/d"; spf=pass (imf08.hostedemail.com: domain of andrealmeid@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com; dmarc=pass (policy=none) header.from=igalia.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725488794; a=rsa-sha256; cv=none; b=mIRJOPBiWTkRB/rXRRTSeckiLHt3ECesCw0xGBhEsFYGkSXmg9a+njMqDl7Q6si42PEeth TM4bGrLNtJ2GWDfXevn9HKCbYI0AmVcsHG40ttLQ2d7Jw/khvFRwW0UGtMhOU9CcN0+D7f cQhfGh9jNqtNI/TcCtRCgeLLCOeD2RA= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:References: Cc:To:Subject:From:MIME-Version:Date:Message-ID:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=KSjAivHlg5cFDajG1oCwI0Dhjh9+yTX2k4XmuHn6kME=; b=jafjgz/dLo82epmN2dJPeOiiG2 S9q6xwR+XDVUJAQoJ87qvKHMUjIEm5BDmnQc/YkzJP9/UK7FEH7EpbsI7i/Og36lPlL8x9VVC5PoZ 25Jp+BBDYwTkkip9tOAov17p3TmijF66rH0kipfw/1ioGR0MD7xCCSx2kHHXdbtsURt4kv8ZO5q02 KiyI+RVd0BDewsoyhHsErN99jwRwB1KhLaIb7+M2NEHeHZT5pOWf7dpt5RQMpjS47SFS1QelI0W1V dpJy4avtnYK2KJSuWt4oO/5Iyvruh7XOuLbn+F+MabcxJ1wGjjBZ1KdjSUt5zigJaE7FzF+QS6r2r EaG/x3WA==; Received: from [177.172.122.98] (helo=[192.168.15.100]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_128_GCM:128) (Exim) id 1slyUB-009gve-2F; Thu, 05 Sep 2024 00:28:22 +0200 Message-ID: <500ff1ba-d8db-4f4d-9084-6d59401992da@igalia.com> Date: Wed, 4 Sep 2024 19:28:16 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: =?UTF-8?Q?Andr=C3=A9_Almeida?= Subject: Re: [PATCH v2 6/8] tmpfs: Add flag FS_CASEFOLD_FL support for tmpfs dirs To: Gabriel Krisman Bertazi Cc: Hugh Dickins , Andrew Morton , Alexander Viro , Christian Brauner , Jan Kara , krisman@kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, kernel-dev@igalia.com, Daniel Rosenberg , smcv@collabora.com, Christoph Hellwig References: <20240902225511.757831-1-andrealmeid@igalia.com> <20240902225511.757831-7-andrealmeid@igalia.com> <87jzfshfwn.fsf@mailhost.krisman.be> Content-Language: en-US In-Reply-To: <87jzfshfwn.fsf@mailhost.krisman.be> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 4B4E0160005 X-Stat-Signature: schsikuro1jtw448iyo75py4j5xdweyx X-Rspam-User: X-HE-Tag: 1725488921-545613 X-HE-Meta: U2FsdGVkX1+GtdvGZIh/ejV9UNfjUsxZTVYPqv2Xhg5iHJLEF/eV7G5yliJG6Zl4LU5p0mGPPJEbG4OYhCUCzOHFN4DvQRlHjtlDpMIV2CWkqIRjnO2yR9OVt+rXOFXFAKbEitr7VmynNaos88DG6O6lx0ftuNiOWXiqLslpG+PTDzzerZNO3SHk13LRmZQkZjkHuHLqLuPz4Js06IdYbgT5A+gLpwuqcDfx1mD69emZK8z8yTp0i+mDMtZWwARRAaEW1r7jAlNYhayG4K/bVJDbUrmZewsmgluwg+IB+vEGI8lVgncMdBV8pJVk0yUrGftbc1HGweEEYeJQjooidGbTfAYiQ3B/SsnrCHB2XSfJM5NLhwiddNfm5WNiM7WoUCe7c7JhApX5xayNhbxFjs24f1wcfvxNcyANKQ34t/gBgbZ1QHUcY0L4oPjMFlRCy6YOABnkfsgi190AeknHq+n7X+DG+rLR/wcKQcRny5XST77tXhvA4ar+YYWBK6izSybSMKU/YKOuy3z4YfH2wRkShvOVz2cDQTcEKX7E+POI3nS9bxu+COTdhGs1pnXXdVls/b0XvhL5H72xG2zGgZBlBt+gATutFo5u+KE2kc0+3dGri/GNWsTFGI8+dnkDZoApb0t08gZMQ33ujtnTrrLngQWi9AZw9EeLB99nlNXihoXaloFsrFmLPFHQE6AI2c5O9ybTJj/UVaU82ewZQnAfU7z8ByBEhu/m3e7nI49K80E21dr4Vs76ad0GrKysnVb6ffo0Nqx9haa5Q+8hefTg8d/1Ntlf+x7IULpU00xBOjTqct4A0q5VS3v4sKYwbXdd4tS7vrm9aOps6jYRIeunHfU6X2g3fonl/z4XFN4EV1Vjl0Ht+XRAdMR0W8I9vzPAX7qi7I+wo8Qj+F8H4IUilFs9GeYDnO/Wn/UvdMhnTBBCilaUQHerEQ4392fm41eOhduTkkint8gyM7k BF8ZO9ft ZhRUV+iDsvZuT57dSL1hqhXReaHYnPymfcuq7fhdCPXMnsFJVGNw6zI0dWT8g49KZLDce1csSFW2HWJsEnDpbV/3h5jr5RpGC/D0SHVusaHYtZIFXtTsCcj9GMtc+dbibSWQ5bj5TUSkCS2XkjIP0oLAyqet8NeDroW7L5Em5eZRoqD1Y30zgOlAOBXv64bKeu2BwZv71mypUmJbJ/WvIvtE7RBvjuPDTDQWE90FwOxBrKcKSA4fhzHnsQ6zw4QrNZ+tQbQcIP8KBQpBYSP7y4wl7sMPOa6+d20KqWUe3cHUu9/VGxqs9zrLA6jhAS9fQ/x9I11OQWiqgE4HO6DpOUm3GmeKuj/JJnTndxzyKM9fvNs/0O8cRtI0l9ZOo3IP74Iuwzs1xecURiAQ= 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 Krisman, Thanks for the feedback! Em 03/09/2024 13:15, Gabriel Krisman Bertazi escreveu: > André Almeida writes: > >> Enable setting flag FS_CASEFOLD_FL for tmpfs directories, when tmpfs is >> mounted with casefold support. A special check is need for this flag, >> since it can't be set for non-empty directories. >> >> Signed-off-by: André Almeida [...] >> + >> + if (fsflags & FS_CASEFOLD_FL) { >> + if (!sb->s_encoding) >> + return -EOPNOTSUPP; >> + >> + if (!S_ISDIR(inode->i_mode)) >> + return -ENOTDIR; >> + >> + if (dentry && !simple_empty(dentry)) >> + return -ENOTEMPTY; >> + >> + i_flags |= S_CASEFOLD; >> + } else if (old & S_CASEFOLD) { >> + if (dentry && !simple_empty(dentry)) >> + return -ENOTEMPTY; > > We don't want to fail if a directory already has the S_CASEFOLD > flag and we are not flipping it in the current operation. Something like: > > if ((fsflags ^ old) & S_CASEFOLD) { > if (!sb->s_encoding) > return -EOPNOTSUPP; > > if (!S_ISDIR(inode->i_mode)) > return -ENOTDIR; > > if (dentry && !simple_empty(dentry)) > return -ENOTEMPTY; > i_flags |= fsflags & S_CASEFOLD; > } > You are right, it's broken and failing for directories with S_CASEFOLD. Here's a small test showing that we can't add the +d attribute to a non-empty CI folder (+d doesn't require the directory to be empty): folder ) mkdir A folder ) mkdir A/B folder ) chattr +d A/B folder ) chattr +d A chattr: Directory not empty while setting flags on A However, FS_CASEFOLD_FL != S_CASEFOLD and the set of values for inode->i_flags (var old) and fsflags aren't the same, so your proposed snippet didn't work. I see that ext4 has a very similar code as your proposal, but I think they do something different with the flag values. I rewrote my code separating the three possible paths and it worked: /* inheritance from parent dir/keeping the same flags path */ if ((fsflags & FS_CASEFOLD_FL) && (old & S_CASEFOLD)) i_flags |= S_CASEFOLD; /* removing flag path */ if (!(fsflags & FS_CASEFOLD_FL) && (old & S_CASEFOLD)) if (dentry && !simple_empty(dentry)) return -ENOTEMPTY; /* adding flag path */ if ((fsflags & FS_CASEFOLD_FL) && !(old & S_CASEFOLD)) { if (!sb->s_encoding) return -EOPNOTSUPP; if (!S_ISDIR(inode->i_mode)) return -ENOTDIR; if (dentry && !simple_empty(dentry)) return -ENOTEMPTY; i_flags |= S_CASEFOLD; } In that way, the `chattr +d` call doesn't fall into the simple_empty() check. I simplified the code like this for the v3: if (fsflags & FS_CASEFOLD_FL) { if (!(old & S_CASEFOLD)) { if (!sb->s_encoding) return -EOPNOTSUPP; if (!S_ISDIR(inode->i_mode)) return -ENOTDIR; if (dentry && !simple_empty(dentry)) return -ENOTEMPTY; } i_flags |= S_CASEFOLD; } else if (old & S_CASEFOLD) { if (dentry && !simple_empty(dentry)) return -ENOTEMPTY; }