From patchwork Mon Sep 2 22:55:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 13787772 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 F325FC54FC6 for ; Mon, 2 Sep 2024 22:55:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id AD7986B035C; Mon, 2 Sep 2024 18:55:40 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9753E6B035E; Mon, 2 Sep 2024 18:55:40 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 752D36B035C; Mon, 2 Sep 2024 18:55:40 -0400 (EDT) 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 4C2BA6B03D5 for ; Mon, 2 Sep 2024 18:55:40 -0400 (EDT) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C916F16030F for ; Mon, 2 Sep 2024 22:55:39 +0000 (UTC) X-FDA: 82521306798.15.A84D281 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf27.hostedemail.com (Postfix) with ESMTP id D8A4B40017 for ; Mon, 2 Sep 2024 22:55:37 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=M+XOwtWh; spf=pass (imf27.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=1725317663; 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=AgFFNkqn5/cUGlfr18a5Dx7qJiLmYYoj79VenxCQGNs=; b=A7xFhFnOwiihpIoOw67hXEbWrLOlWJD3t7aS3hlY1FGVlzv5nu9v7ia3aKqRRjxnKWjzU8 mrY9SD84rt4e5D59hgyIK1N5IG6mQyStNT4e5+0qOvBN0iPmy4SYHJNEsG6Rvu4xGUopZF wMz4dPm4zM13P75b4/nbVrIqJVu0utQ= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=M+XOwtWh; spf=pass (imf27.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=1725317663; a=rsa-sha256; cv=none; b=nlRiucMG08DUJrbMwGR+7mdA342HyLnWkUd+oFVaJt9cS6aHYyC4wrM0w+aCp+xeUuH89V ZSHRfe5KkjeZn+0W9CIzxLzYC8XM6odbFoXK5aa8wtpjg1Y9ngY9RVxmYVL8YzFyLUZI1P ytLK6xEPHVIoQqRY7DIjsbHB3QAHx2g= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From: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=AgFFNkqn5/cUGlfr18a5Dx7qJiLmYYoj79VenxCQGNs=; b=M+XOwtWh6PCY2iI37gV+1uD0TB PFrzcYHjocykhzsyfGxMB/cYuLDeDi3CXLxa8cSADb2aqf6NE+EN9ZJvqDytsW7gg0OOBcfY3qVbG X1gdcoA4Irzbo9/bcltCFQwQdV/piCR/37Eder7MTLuKvJXq5c62PQ9NhX18T/vHoOM3I+fopxM9D e2MxZ0GGqjlbPB/iD+hQpotuT/2Lm5gIaNebSwuppcbuzEsWbqunMiToozAtmiAEGaMJuLPD8oOpl GjK+WrAyBpF6M91dTEq4sRB9V7/U0yL3P2EbQFnLFLf6WVvpFqGtni8cmlJ54szj1DgtSL6BnRV5g rZuzGNuA==; Received: from [177.172.122.98] (helo=localhost.localdomain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1slFxE-008VrL-8I; Tue, 03 Sep 2024 00:55:24 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: Hugh Dickins , Andrew Morton , Alexander Viro , Christian Brauner , Jan Kara , krisman@kernel.org Cc: 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 , =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v2 1/8] unicode: Fix utf8_load() error path Date: Mon, 2 Sep 2024 19:55:03 -0300 Message-ID: <20240902225511.757831-2-andrealmeid@igalia.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240902225511.757831-1-andrealmeid@igalia.com> References: <20240902225511.757831-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Stat-Signature: dnbntak59gukai1jir58sruwmzf8atz3 X-Rspam-User: X-Rspamd-Queue-Id: D8A4B40017 X-Rspamd-Server: rspam02 X-HE-Tag: 1725317737-358384 X-HE-Meta: U2FsdGVkX1/tF8+dF5bPap1L9Nsh3bXmZyEzICGUm7vqXRozDnfeF5dB6UK29HBCyK5GjIetqh0y5lSxHNOCscjlNaOnPvR1CDO14CJHudDP99UzHjalS05ZLgYZRbzBe71eyl1J2xGw+eySNW/j9qQw13JDrgHHvTMdHIna5uPvbOC7qeKoZa15LI3l/TtWCqCRCHBDwU+GMS2TDtWGbCJQlyVlZ4UHfIAvJbuesElW8zAgV02FCUPwhFizhzSAulHW5V46eegUZqLyG07mLe55Y+ydyWB9NG7ucVmwCnB04dmLkHQLf6pXjn1tBZ/MamexmOeS8V2PGwvu9Y7T7aalNavoC7qFrng3e0rv/Huoh9bqYhs54LpMiQbvY9tpvumDZuTfQLVe2YtPxci3KDqv7znsRD7yyIggVuJxGN0J3RGHnelqirJ1lU8ZIYt/L4VU6QEJ4jpvDOqmemKAUfM+eaCB9CsIv/3Y6N2yQ1/tYccje/y1JWIPnq0rJwdAxps5pm7DFwueWi+U+oFxD0Ay/jRXfI/x2kKfsR2g0pwQ854C27MHXLePEfH0xuIHcI4PxvFex/g5LZxm9w/aEMNeK79KInUXqDVBG3lycPBIIP2T6JmRTBliamPEkNVa9FjNO00jGxLJNaDpjQhRkWSZAqhx6JlCqymIPM7w4Ax8i92DnrRkXw71tJmWH+1Ew2WjcobqIDAUb3mM9H4pt0NkagByhhEscg1Z0ty4A54sdEpeMs+SM6lUMEgm7LrRjmaqHVGOpEngkgA+U/esYeJu+vO5mudB0J67Aivu7/G4LZb8D7L7QrYe5ukP/Yq32E7C6KWWTDVSLkLd0iYlqlEHqUXp5+4YJSHFXa6/jmJKjmNLp8RA2RQklXA3nX3mIfocvAJMWIE5o+tfHxdu31TWPXyBOSiR/YT28osfPPPKnZabqYJhH2bGCFZcMK6jsxGWEVZpHb+IPRdacwY O1P6sRNN uuKYhhzCwTeXBLUaPLwAEGvr2NxBAdLw6rwe0vG7SdJJyxKSPaTJrVboeDvGcGVypH1yLxL/C4vCR4ydgS7ECTJFaPUE5wmzHpMuT9xGZjUkff7voYP/WlprLFhhoHt3AuUV6jEt6uu3Tus1eE6rDjRlrxtsVQo/QKAb605FyZNoeubnq5JM8eixzRcOzQ0VnGFx3URMXyE9fWb8s0JdmZtDwxXzUwPakM0wl3iBpcS4DboVw/RRK513sXtoqNCIJmCSJEOH+lbmHbO8vMF0FV3J99JBAAv7oo40M1N2NIQUuc+A2Bp6ROD6Iqw1c09Y0erlNRHsu0lzWrSeOSv/Z/Jmm2vzLBRjDC8VIWpr5SkNjqC8/Sb5SY1At3NeHNPVsYyj9 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: utf8_load() requests the symbol "utf8_data_table" and then checks if the requested UTF-8 version is supported. If it's unsupported, it tries to put the data table using symbol_put(). If an unsupported version is requested, symbol_put() fails like this: kernel BUG at kernel/module/main.c:786! RIP: 0010:__symbol_put+0x93/0xb0 Call Trace: ? __die_body.cold+0x19/0x27 ? die+0x2e/0x50 ? do_trap+0xca/0x110 ? do_error_trap+0x65/0x80 ? __symbol_put+0x93/0xb0 ? exc_invalid_op+0x51/0x70 ? __symbol_put+0x93/0xb0 ? asm_exc_invalid_op+0x1a/0x20 ? __pfx_cmp_name+0x10/0x10 ? __symbol_put+0x93/0xb0 ? __symbol_put+0x62/0xb0 utf8_load+0xf8/0x150 That happens because symbol_put() expects the unique string that identify the symbol, instead of a pointer to the loaded symbol. Fix that by using such string. Fixes: 2b3d04787012 ("unicode: Add utf8-data module") Signed-off-by: André Almeida Reviewed-by: Theodore Ts'o --- fs/unicode/utf8-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/unicode/utf8-core.c b/fs/unicode/utf8-core.c index 8395066341a4..0400824ef493 100644 --- a/fs/unicode/utf8-core.c +++ b/fs/unicode/utf8-core.c @@ -198,7 +198,7 @@ struct unicode_map *utf8_load(unsigned int version) return um; out_symbol_put: - symbol_put(um->tables); + symbol_put(utf8_data_table); out_free_um: kfree(um); return ERR_PTR(-EINVAL); From patchwork Mon Sep 2 22:55:04 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 13787773 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 C9BBBC54FC6 for ; Mon, 2 Sep 2024 22:55:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 755438D00EF; Mon, 2 Sep 2024 18:55:41 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 705446B0363; Mon, 2 Sep 2024 18:55:41 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 556FD8D00EF; Mon, 2 Sep 2024 18:55:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 38F816B0362 for ; Mon, 2 Sep 2024 18:55:41 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id F2BB71A0208 for ; Mon, 2 Sep 2024 22:55:40 +0000 (UTC) X-FDA: 82521306840.10.03F1268 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf30.hostedemail.com (Postfix) with ESMTP id 4FD4480010 for ; Mon, 2 Sep 2024 22:55:39 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=co2PdNaA; dmarc=pass (policy=none) header.from=igalia.com; spf=pass (imf30.hostedemail.com: domain of andrealmeid@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725317663; a=rsa-sha256; cv=none; b=8X8SA9qoXcTbnkNGCl9L48fucUcLxcrrO1Co83h0+5Zv2qmH2Xa9C51fGHs9IHc3pi7DfC 0Qu5EOl2YQTzvs/2FVOf4eEDdJ86DjLqx7FPbk+Pg71wk06QkXSJrppp3Y3DXz7S5xBWJZ /etEc0YA4wQlgzt3ZajLON5IxJMQ30U= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=co2PdNaA; dmarc=pass (policy=none) header.from=igalia.com; spf=pass (imf30.hostedemail.com: domain of andrealmeid@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725317663; 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=78SnBPaA8AMbufjsrTkG+60p1swE8SZ2JxVNDuChTVM=; b=Hoq+KQ+dt32yJpZ2GCEAkVpDNPrJyLebYHmDnsUvFiBVzgj5U7MITh401nxUIDcPaNwr3e 0ojO9jLR/sdcFf9TTzNUbLyHVnh750vCT6siJKprkTbmMHsn60CXu0q4z7ZHSdtMFAFKlp bwBVwluTge+VWQN/XkkczMomNz72c7M= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From: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=78SnBPaA8AMbufjsrTkG+60p1swE8SZ2JxVNDuChTVM=; b=co2PdNaAbIHqhBdYCbOVQvfiQj eqbK3sEbYyRP3Eu70TX6yDrX0S9XQRy/B/Nh/Rkvy5zetX1tSMwOGwyVTiYAOtw5Bqks8RrgWnDut PFRafJ8jC4JKCn3ga7iWiiU7g0ULzHwp/EBbz3OfvrUEuRlSOV/FCjTqwTqa7P0sfMlNP9l6UO0S1 s43sWtqT1Tx3fF7JDtPuAP49wm2oRZJq5hdUajCOSl9ubwomaIRxqf+jbuWf4aPvF/7TKgk/1gfmz TZ0V1gBUkxu6hTqKSWeLaOSAVJ4RcCWr0v9v/yPiTtOVU0hdWCdXO6cnODl3YiOKPmAQmubQgoXi0 8VZ7oPTg==; Received: from [177.172.122.98] (helo=localhost.localdomain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1slFxI-008VrL-Cc; Tue, 03 Sep 2024 00:55:28 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: Hugh Dickins , Andrew Morton , Alexander Viro , Christian Brauner , Jan Kara , krisman@kernel.org Cc: 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 , =?utf-8?q?Andr=C3=A9_Almeida?= , Gabriel Krisman Bertazi Subject: [PATCH v2 2/8] unicode: Create utf8_check_strict_name Date: Mon, 2 Sep 2024 19:55:04 -0300 Message-ID: <20240902225511.757831-3-andrealmeid@igalia.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240902225511.757831-1-andrealmeid@igalia.com> References: <20240902225511.757831-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 4FD4480010 X-Stat-Signature: p699obnx9yrqsjb5p8x3qkba5ijbx983 X-Rspam-User: X-HE-Tag: 1725317739-698978 X-HE-Meta: U2FsdGVkX18O2aT7aln3yl2xp18veFVMGI0UAahpFbk7onYrX827KUS2vLamuwHtH4Xnm9B3TRtzx/bycpuyKA+SaSKra/6QEkP0u/YBmWJRc35NLzte0B236nfDInp6ryvcYH7FfHRz5dQRY4r5W7djzRCVmJRtYqgTVGJGq4j0pbUUG4IYRG5r2lGic24WXzpcJYRVrlUE/5bmjej8VbnZ01WhdA63kIPE5lrELWQILaWC7dv7yMkmYJpOcJ62JgftEV3CRe3I4l44vnw4MH2rEubuPTOFxJGdFTtJ+k7i+dSui6ZA6P7HuLHKscqpIXpEtU/My4CVFF8eo3I17SIwTbFBadxoXcZou3JDxnBPxmRwf5VC4atamOxidl2/ZbaSKtZtJrK93RL5zc/jSww2RRqBpihUl+eNtQinIPIwb7tGICAIdxgTyhpzjvlbeJYlytf8gSVohnfkVGBrcHUjiGgdd6E3WsldQkWCaG4QP7ZdRNeZ028DeUU9EqFb814fJVakSOAlVYlrDmadhBN/kb6GAKlVRZkiSWmWDvxQw4qypr3O6/rwRUMlHWyZoSlkJ8lm19o2kGmICq1xYSzC+CnqHHq3WiEZ8tNtLFV3A5QyViZBVNKjQRk3KIy3VR1KjonAcPOd7BUINhhnyeHPtC2PDXzKWSO+QAsmZuGHHeC6HKdkdC7h8/r6mMEJnOCIaqZKl6BLNayn2gXiJxzbv4cOfTeumbpOO04A4BO53RDSP12Z0yrUzR/NdrOc657YBiNcRSiz9PiOqQG9De3pdoOA3/9xvqtikGseU5PWmI/PpvamCQPcK6tycoj/EV22R5ppw377RU1/jCsj/vUduIj8BdFxr6EnqJ27AvVu1m99kddG61POUVM7KbVRJq2Tue2cHbcJMNW6ZOqVi2tVaVZG8TGEFEOHlhrbt97O6FXSkeBjYyTZdePRvowz4C6EGZsj0UELfXFCn8O jVQEoVXn OU90o73dVuIbJpy6Oxiq9p5gauLrr9659d24lzgZXDi9n2pQ6cR/97O6fvA4FQ/QeBDE78m5hddPaUTH8oGQjK5gXVtUrdLBvj7fwbIuSwyvgclqXUExBdtUbUmm6h1nmty/jFUwwkNFS+tOQ0X6YUt2hF/XsdsE9vIyOcorS2AR9vyn/FBSkcft44Jy7Slm37nFEoeurLRu72WvqklF0W3a49AuICGLa3gYLPUBdwsUsS53WMQhvj85BIvrGzh6KK9ha2mxrHFRPlehgrob4dMD7x6VwUL30wNIccEVwY+kTfIcxW9wly+iOrdv3n+t0pqdhiWI0utvlqUrKGfZgr76bi7gRWmjnwDCcTF3bTkseScg= 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: Create a helper function for filesystems do the checks required for casefold directories and strict enconding. Suggested-by: Gabriel Krisman Bertazi Signed-off-by: André Almeida --- fs/unicode/utf8-core.c | 26 ++++++++++++++++++++++++++ include/linux/unicode.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/fs/unicode/utf8-core.c b/fs/unicode/utf8-core.c index 0400824ef493..4966e175ed71 100644 --- a/fs/unicode/utf8-core.c +++ b/fs/unicode/utf8-core.c @@ -214,3 +214,29 @@ void utf8_unload(struct unicode_map *um) } EXPORT_SYMBOL(utf8_unload); +/** + * utf8_check_strict_name - Check if a given name is suitable for a directory + * + * This functions checks if the proposed filename is suitable for the parent + * directory. That means that only valid UTF-8 filenames will be accepted for + * casefold directories from filesystems created with the strict enconding flags. + * That also means that any name will be accepted for directories that doesn't + * have casefold enabled, or aren't being strict with the enconding. + * + * @inode: inode of the directory where the new file will be created + * @d_name: name of the new file + * + * Returns: + * * True if the filename is suitable for this directory. It can be true if a + * given name is not suitable for a strict enconding directory, but the + * directory being used isn't strict + * * False if the filename isn't suitable for this directory. This only happens + * when a directory is casefolded and is strict about its encoding. + */ +bool utf8_check_strict_name(struct inode *dir, struct qstr *d_name) +{ + return !(IS_CASEFOLDED(dir) && dir->i_sb->s_encoding && + sb_has_strict_encoding(dir->i_sb) && + utf8_validate(dir->i_sb->s_encoding, d_name)); +} +EXPORT_SYMBOL(utf8_check_strict_name); diff --git a/include/linux/unicode.h b/include/linux/unicode.h index 4d39e6e11a95..fb56fb5e686c 100644 --- a/include/linux/unicode.h +++ b/include/linux/unicode.h @@ -76,4 +76,6 @@ int utf8_casefold_hash(const struct unicode_map *um, const void *salt, struct unicode_map *utf8_load(unsigned int version); void utf8_unload(struct unicode_map *um); +bool utf8_check_strict_name(struct inode *dir, struct qstr *d_name); + #endif /* _LINUX_UNICODE_H */ From patchwork Mon Sep 2 22:55:05 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 13787803 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 32465C54FC6 for ; Mon, 2 Sep 2024 23:20:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 84B5A8D011A; Mon, 2 Sep 2024 19:20:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7FA1C8D00E7; Mon, 2 Sep 2024 19:20:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6EB5B8D011A; Mon, 2 Sep 2024 19:20:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 506C78D00E7 for ; Mon, 2 Sep 2024 19:20:25 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 067931A020B for ; Mon, 2 Sep 2024 23:20:25 +0000 (UTC) X-FDA: 82521369210.22.321E5E8 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf11.hostedemail.com (Postfix) with ESMTP id 30AC040011 for ; Mon, 2 Sep 2024 23:20:22 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=LrVGqvSz; spf=pass (imf11.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=1725319175; a=rsa-sha256; cv=none; b=xzYIQ/EmlOmPsI2JXcM+QR1uOnbuCFDSvFNF/ankNDi6IjIrZLAabdec+vHVJeIuIg9gVU lLmL71RlPp0f5yOPgxbojUxtgQRLrWwNUxvZ67wLq/XeXK6iXt8bVLeAYM08MDLv88g7YQ wZEXjjrjOanSyXZVnDFXS1iQbQDaRsA= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=LrVGqvSz; spf=pass (imf11.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=1725319175; 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=7VI+yky5LaYBS1bSHdHAgpXKw65lgRI7FAY05caFqb4=; b=Xwo5StyOkFmMNRXJG43MqKo7OkhIddKgWfHMfxlpAP7GbqpLcxWxm3T8p9cEnzxaFlkv2C CQglKIoVCI0SKAuqqqB/eNeAneTdm61U8oF1OPsAG15hEbbvamc4GuqXWvC//jM0cLsve7 HFnk5kiQ8P23LRqE+CZZlH+M3Q2v3zE= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From: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=7VI+yky5LaYBS1bSHdHAgpXKw65lgRI7FAY05caFqb4=; b=LrVGqvSzFlJiFx1ovS/TrKYVRm YVRST5UuQ3EQLIqL0oUdhvMxlWx5A94Vvh4Ypwkv3/u/cUfEFG7kGtAcNXrlfb6xgum369T5jm0C7 md4caOkyV5QHRo63Yj/sXiHFNwRBLacDkfqO5nV+uEOiO87mzXrTHRJUbqfPPDCReOfs8J8vVDbck 1J2ODqREXz+7pX94ivq4f/dPT+zJviI7LHrs7lDydHLbSRWJrjzpW2P47+CY/7j8nIraefqXYwKRz EpmcTPJcv8Eh0j4yabBxXcs0aehoFrjfO//6T4VYJIDMjbkQIzgLYerNQaqJrS9x5uUqdhv6REN9R IV1vXBhg==; Received: from [177.172.122.98] (helo=localhost.localdomain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1slFxM-008VrL-H0; Tue, 03 Sep 2024 00:55:32 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: Hugh Dickins , Andrew Morton , Alexander Viro , Christian Brauner , Jan Kara , krisman@kernel.org Cc: 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 , =?utf-8?q?Andr=C3=A9_Almeida?= , Gabriel Krisman Bertazi Subject: [PATCH v2 3/8] ext4: Use utf8_check_strict_name helper Date: Mon, 2 Sep 2024 19:55:05 -0300 Message-ID: <20240902225511.757831-4-andrealmeid@igalia.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240902225511.757831-1-andrealmeid@igalia.com> References: <20240902225511.757831-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Stat-Signature: 7xa4ucuk57cute19y1f9ihaew437c6z8 X-Rspamd-Queue-Id: 30AC040011 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1725319222-447635 X-HE-Meta: U2FsdGVkX18PvhlOBGAiboWnf1ecllAcmNINFAM1IGuwJ/qqJtw0LTNSmo2xXG8d5Kt/rRtY1qtwEJgqw7iWAAVcNHhcbS+uvAMQLy1OeSMG+McBN9pPt8olNsE5FuRZslOvUQ9tno5pTEnvEYQ70x0GSU8cDri9vWZRk2Q5VwSOs72A82QwZYmoPULCvRlZyB/vk2yi9pbZJus6sf+oDutPeHz262GAJOeRkxRkSRh2/qXsjiXL8lGhaG3zLC2fBfSjKYqfsw+xvZTSV867dTNzBvhdT1/6Q9csmsyvrybcdHkRqrP5ByOQIUfB/KIgS7uQys/CNoUjRATzcPK9EZX2VH6g+KW+Soiytu4OU91PA5fIqjyJkGAAwsszr2Es1KjGMD7gzwn5dDXxil7+wZLHp3sxLDFwLi3m5YC7GwE3lauMkjqGwVYK14lodZicn6kBWMKVKydAJ0sEdfdJluOTXY8D1wtP2/TajOpiWrasTEXrdNeCajS5lbjOBTe5+x8TGn5fPH9YIVIXqbkust5K68BN+eJ9HzidClvUE8IdDZZ27/DKrV+Tid/9a/DdRYFucGQGWYVGHFHgjIDx+PWj1kK7zeDQriOpDT2XmQhgqVs+dKPI/DDrSREMsNui7SUUPXJoLUVug+h2GH05cPKz26xIE8N50RBbE0huXpmWJHWOF25wGGVnJukG/jMIk6MReJyP6Jfh4LuwOaMu3OnU4AW+qn0Vvj8yqh7N87vhs/UNGclbw8b8/o34a3isbnzMH5IyoYe1TPTxw9u09lzNcXjbOoiIWg/uJRf/jcD/xqVrR+3x07bY6vRUS0VNJxc0HEWmYBfNnb9d+250OBDeHNNeuKzL5X0/UsbcTLn+l7QrgOOS9IFGQ/bU8FHPYQIr0UKn3rWaxm0LOpATuLo1sK51ueZkugKHChh7VtgW9F4VB10skQkqHVBQYiTd5TX6Y1ke/vbEYHcNe3V gQMSfwsY iNJak0DInHldTzGuQgnvwVCf3ImpdAnhFDaI91HOuiTt7gB0Omj20OE09WrrSGM12uF+g3vdoYVvqvNYgwRY9gT0LYf8QkXD9Wd1EAoJAFI5azQuIBbOUmQJwzX/9vHZ/MndNlWpfxV0AxstNq9Dw4LspMx9PiZ/9UZ+BXQIF6HnoWIiwea8N0XRWh7YyjT9COqcQGXsLLyodMzrGbLZuUF2VDzbJSua7yhlBhLlOorAOK/1+gq6MrFpJdiOtVysGXhIMWaJZFGz9BCUS7ur47lgFe2wC52evSlEH2CDAOGYs/Z4Xs7NiM87gYFVriUcJR1TX9gCiVnA+Jh7ditQNIbOewgagKBDzSbRfjAF14z/uUogGKna14u4ghUHpYrNvR1GF 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: Use the helper function to check the requeriments for casefold directories using strict enconding. Suggested-by: Gabriel Krisman Bertazi Signed-off-by: André Almeida Acked-by: Theodore Ts'o --- fs/ext4/namei.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 6a95713f9193..067face4dc41 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -2394,8 +2394,7 @@ static int ext4_add_entry(handle_t *handle, struct dentry *dentry, return -ENOKEY; #if IS_ENABLED(CONFIG_UNICODE) - if (sb_has_strict_encoding(sb) && IS_CASEFOLDED(dir) && - utf8_validate(sb->s_encoding, &dentry->d_name)) + if (!utf8_check_strict_name(dir, &dentry->d_name)) return -EINVAL; #endif From patchwork Mon Sep 2 22:55:06 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 13787774 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 D2F44CD3420 for ; Mon, 2 Sep 2024 22:55:47 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 13A7E6B038C; Mon, 2 Sep 2024 18:55:47 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 09E138D0118; Mon, 2 Sep 2024 18:55:47 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EA9308D0117; Mon, 2 Sep 2024 18:55:46 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id CE5F26B03D9 for ; Mon, 2 Sep 2024 18:55:46 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 806721C4D00 for ; Mon, 2 Sep 2024 22:55:46 +0000 (UTC) X-FDA: 82521307092.21.B6A617D Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf04.hostedemail.com (Postfix) with ESMTP id CE48B40005 for ; Mon, 2 Sep 2024 22:55:44 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b="rvUoE5U/"; spf=pass (imf04.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=1725317650; 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=f1lkFnBhu2A4rfcTTwgMOmoFrMOxofOkPfLVQlrRaOA=; b=S3cg7R3Bl82q/zfsGFft6NpGQkwiqicH7uwgyyw576ohQKOgGW9Czy9uuAC338Z6FdFDg3 NXO/QbDcMagL+9Yr0JDWcXTi6t01iYyBvmoUsCDH8eJfw1jUl2ZiFNHyLN68lIPCi1fDTQ VQFGqhLtozFYo+UIiVrzRCiKuoXqOmQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725317650; a=rsa-sha256; cv=none; b=ZTtXFbFA/WXMPb5eUQ4uQpx2xpn4mW3ez+PkbalPDT+2f+s4m8sipBBnQamAvb0PkyRXYL 8abiesKT5qiGJX8p/R7b/FhfA/tXJ/ltkTyvX8QUQzOjg2nKZFDjTTzaYGG5CYqFcuqTaA 0Z3xDzlOKg3PjwfWiavFRtemx0LyRqo= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b="rvUoE5U/"; spf=pass (imf04.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 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From: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=f1lkFnBhu2A4rfcTTwgMOmoFrMOxofOkPfLVQlrRaOA=; b=rvUoE5U/5H5F4Qjp3s3lJnTsn/ gzTbW9mJkx6r+0MShBqi3wVhPGdxQrANKTSmWFvZKfVKg9xssWGHCAXlZBGtKQJV1wQJCHk8LbE6+ NIxBpTIsFfFkg1v3+V/a2uuCXZcl5duORJE3e91+Dz5/fhljpmco9eZJPP7e+pYT+hKekoPCebAH1 BBiwH+/wuuWQGGDusD2FC70/3WQE2UDEZCbF1f3wGwiS+XRCDJF+IbLjC3fdJhzTOW5889k2ZEN7D RAWlAK+yPhDtNhxnXakQ/bI3iM39s0C8slryFhW4nP4TXYhH5RNPPb0b5AWlS2DkGbDQynrzO5CV7 iWIVDPaQ==; Received: from [177.172.122.98] (helo=localhost.localdomain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1slFxQ-008VrL-EL; Tue, 03 Sep 2024 00:55:36 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: Hugh Dickins , Andrew Morton , Alexander Viro , Christian Brauner , Jan Kara , krisman@kernel.org Cc: 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 , =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v2 4/8] unicode: Recreate utf8_parse_version() Date: Mon, 2 Sep 2024 19:55:06 -0300 Message-ID: <20240902225511.757831-5-andrealmeid@igalia.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240902225511.757831-1-andrealmeid@igalia.com> References: <20240902225511.757831-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Stat-Signature: gkgciz8ma4449ked4uof7cjzkbagqpgi X-Rspamd-Queue-Id: CE48B40005 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1725317744-617050 X-HE-Meta: U2FsdGVkX1/YsNyQdh63r++5aFvXXpsIyD+jEdXcfCQ6oWjPT4FkVoh1H2Xr7KpE+rTD7NYcJJjY0ocIk9dqzT9UoYeLVIO4H+fXLGdiUOp7JLlUDCruLuPVqtVo8sJtyZV8Jhw9UCBxhwiGIx81UXdARXX6mcTZJERKGhxIQAomLVuUn5FvFDIgGSnNS8vaZ+ZLRcXsP39bwvC99pGWqnf9YeezY74m2I2lWCIDsQ7DKPchpwHEtFDTSaICCzJ/TT0kzIcpl2bW6YUk9XcTJHEc4pVyLTT/5xu1RUnuDywglooLsFwmZx3o3UvG/0Bmbi00s2kWhRd72wlAlkWUzqr2aV0l7bLHU9ZMK0JHysBet1oANYEqsV0mKFrwUdPAJ1YNkX0SgQAzCf2RbZa2Pun/TAFPZAAC5bSwWEif4qumU4op70dIS+bxsKYtlYNhIZ90aDGtYk8G+jT3uuqzSYsLNIt+rcXOFpddLlKWIg4qud1AN5nrx3AkZAbRyPyI+a4Tii1hbnnIfHHIQf1qJu+zI/IjRMI3f33XseNvfvvfvRRHo14VoY05+fI/QmUvg2d5I05XwsDODGx1ys0UAfzJCUjIZkhj+dXI1gYLj3RybQq6seUZvxfaClAqb92LiIlj62hGNr/gIlhC0rjlwTkLyVLsyVgEmBEi3BSCgaSjtecnznbiLOCsjeNLYIED5FFSCsWk/20L77WaVSc3MKufG9KTDWDaiAByG+wgFXNgbgDlh5baqPKcRnwj13fy86FgYSZvDQWf6+PW55pXps6zULf0z9atkLQ0qxAT2IYrU19fs4+uGZnv9eOK0V7V5DGw63J3vGqtKZT+jmVkhrSaDsenWuU9wGv6iuLpFCRg2/fz1OYR7gFMklyn5lhSIhmpeLQ9IzU/dK4kbYhMU48NY7HVp43DmQtlfkyye9znyRA/G/ntKGIyBtU5LNNjjKR34U/AJ5uBdwmIZjS 7VMf5/mI Cz+mPpf0eV3EjqaLHO27BWKLZ2DGsk7br2LuPTfwF/xrSev1QC0i9be8Gr4ifrbKooa5ZFt/uafak0D4eAZcMsQQVX7PvZmA7Le3vUKotSxJazhbF/IVUkqRR7Y9+SawGebMp8ltFxhl5EqqA3o7FUdDpIfT2kGF2mEeuFFFsdtdWsWRmoM5Mq36bTi+c6PvWwoqmU2VuFu+0ALpPK1jseeW4Xy71TAjPO5bgUKNqmng98Nlgl7/kuljfuTc1Ksawe+qU25Wm9gDYXCMpdw7HIAfVSRbNT8ns6sHCoLbBsWZkzw+SjvbCA6mAuht9P9ABzeh6MPe7/1xqmZhyikynYZPnrd/RKKdb9P5u+1/OJKE6tpuOMNZhLYtPg1OFVgtJWI4F 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: All filesystems that currently support UTF-8 casefold can fetch the UTF-8 version from the filesystem metadata stored on disk. They can get the data stored and directly match it to a integer, so they can skip the string parsing step, which motivated the removal of this function in the first place. However, for tmpfs, the only way to tell the kernel which UTF-8 version we are about to use is via mount options, using a string. Re-introduce utf8_parse_version() to be used by tmpfs. This version differs from the original by skipping the intermediate step of copying the version string to an auxiliary string before calling match_token(). This versions calls match_token() in the argument string. utf8_parse_version() was created by 9d53690f0d4 ("unicode: implement higher level API for string handling") and later removed by 49bd03cc7e9 ("unicode: pass a UNICODE_AGE() tripple to utf8_load"). Signed-off-by: André Almeida Reviewed-by: Theodore Ts'o --- fs/unicode/utf8-core.c | 30 ++++++++++++++++++++++++++++++ include/linux/unicode.h | 3 +++ 2 files changed, 33 insertions(+) diff --git a/fs/unicode/utf8-core.c b/fs/unicode/utf8-core.c index 4966e175ed71..3e8afd637b28 100644 --- a/fs/unicode/utf8-core.c +++ b/fs/unicode/utf8-core.c @@ -240,3 +240,33 @@ bool utf8_check_strict_name(struct inode *dir, struct qstr *d_name) utf8_validate(dir->i_sb->s_encoding, d_name)); } EXPORT_SYMBOL(utf8_check_strict_name); + +/** + * utf8_parse_version - Parse a UTF-8 version number from a string + * + * @version: input string + * @maj: output major version number + * @min: output minor version number + * @rev: output minor revision number + * + * Returns 0 on success, negative code on error + */ +int utf8_parse_version(char *version, unsigned int *maj, + unsigned int *min, unsigned int *rev) +{ + substring_t args[3]; + static const struct match_token token[] = { + {1, "%d.%d.%d"}, + {0, NULL} + }; + + if (match_token(version, token, args) != 1) + return -EINVAL; + + if (match_int(&args[0], maj) || match_int(&args[1], min) || + match_int(&args[2], rev)) + return -EINVAL; + + return 0; +} +EXPORT_SYMBOL(utf8_parse_version); diff --git a/include/linux/unicode.h b/include/linux/unicode.h index fb56fb5e686c..724db2cd709d 100644 --- a/include/linux/unicode.h +++ b/include/linux/unicode.h @@ -78,4 +78,7 @@ void utf8_unload(struct unicode_map *um); bool utf8_check_strict_name(struct inode *dir, struct qstr *d_name); +int utf8_parse_version(char *version, unsigned int *maj, unsigned int *min, + unsigned int *rev); + #endif /* _LINUX_UNICODE_H */ From patchwork Mon Sep 2 22:55:07 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 13787775 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 85473CA0ED3 for ; Mon, 2 Sep 2024 22:55:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1B0D08D0117; Mon, 2 Sep 2024 18:55:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1614B6B03DC; Mon, 2 Sep 2024 18:55:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0026C8D0117; Mon, 2 Sep 2024 18:55:50 -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 D27E26B03DB for ; Mon, 2 Sep 2024 18:55:50 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 5129F401F0 for ; Mon, 2 Sep 2024 22:55:50 +0000 (UTC) X-FDA: 82521307260.10.8C8D6C8 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf09.hostedemail.com (Postfix) with ESMTP id 885EC14000C for ; Mon, 2 Sep 2024 22:55:48 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=SCwErnN1; spf=pass (imf09.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=1725317725; 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=MIHofFtxayC4m6Wwh0Y/aHwAJtRNJjHOKhG4ip79qTs=; b=QogsAEssPL86ufOJDmBXP6O+9R8tDNtYQ5DGKsvAr8JlaSo40WnmLIl3mkvv/kM63+OUR6 +ry3plxf6g3ODpvtsy4nl9i57PiaDfQ46OfgU8o8tMRdXpdB47J88fGqnEdUR9jbG/p38G p7LiB6TvWah67dQaAIAzZNQx2pMddN4= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=SCwErnN1; spf=pass (imf09.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=1725317725; a=rsa-sha256; cv=none; b=gudk9SR5xOd0YSMpuvJeJqzEEjIfwORY4QWd7ZHXiWVP5Bq9+boogIFrbpXxxJ2Q9vUyn4 pXzWjlb+ulrwDXISBGeQ/E8yFFJBhepn+e5pb8Z69Mch9lDVAoKndJ6yo5Es+L9gmhYotL 3+RluaQhxnZd4M6bda7eF3OqeR4OaCw= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From: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=MIHofFtxayC4m6Wwh0Y/aHwAJtRNJjHOKhG4ip79qTs=; b=SCwErnN1HCVhCKEx6e3mD5Th7s +DrdbC/khwxG0T3+am2/iYUCjanHt+ea8KOMESeyYR/G38RTPLa/xZKtYJ9/7mXJR+aVUi++xhHJm nuj8rm9HQbJyjS2uij9IKoFLoTLtgLnNDa+/xC+ES51AESVYAmewtkhcW3DeUt4MSCkZBQpV6u0aV EHfIHZ/g1Aaw/0amDX8L9b0Er5xN/hGgQBSSdFPzqTN+vA2lWjBIWZemPcXp+ITE6V82dxg8rNIMZ Oes8GI7vEt8WWMXGVT/+xURGP4W3QZoaZL3RHromEGq9a6yjBEWHdXvxw99a3lpgKMicxZJ/VKgXy HmUL3Q2A==; Received: from [177.172.122.98] (helo=localhost.localdomain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1slFxU-008VrL-Bi; Tue, 03 Sep 2024 00:55:40 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: Hugh Dickins , Andrew Morton , Alexander Viro , Christian Brauner , Jan Kara , krisman@kernel.org Cc: 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 , =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v2 5/8] tmpfs: Add casefold lookup support Date: Mon, 2 Sep 2024 19:55:07 -0300 Message-ID: <20240902225511.757831-6-andrealmeid@igalia.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240902225511.757831-1-andrealmeid@igalia.com> References: <20240902225511.757831-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: cj8wk5bfqytsuzwajndhqyzwgixxxxmi X-Rspamd-Queue-Id: 885EC14000C X-Rspamd-Server: rspam11 X-HE-Tag: 1725317748-196178 X-HE-Meta: U2FsdGVkX1+fvsFdg3syN26M6HK4RoTIpWgcIAB/a6yplR0HHCqhfd17aRWQM5AZLwFqz0uw00PwrrUcFQIJPrg00q0Dc0EnmzWMhFmaJIa5HoOr1pt0GwyTVpaWWqHDjayNdQ67Y4t7NI0/dqJPekL6/0eoyeWjHFRR/8JKye33egFa2EgV9pJIxTqbiuWFeSMbh+y/YQgvSAAMBe87/zwo3lQlu3eAl6nYrVvMzEEiGXxZnDRdzjJXFMIT8Ut1IRNXw2+7cwStRPvEA7Tn33US/5s3iQZ24m+gbZHpWl0Deoov2Ql9bPEyamk3Od8CfxDtuzcnuFv2bey9Rmqm8EGXHiMebo50+T8ae6yHvE1egRZZiF4++esGyEQzxATBLMTrP/qdkDzOrDueYWBgB6z0cgP9A/h1+Ux1EIAXuHk1wU3TEtaii/xagjH9Gsdbb2QXAKd8Tq+U4pc3duC/PY0kNLmm8c1lqxdZTy09ZT5CekwEVJQCMic0f3niQI3FDa0uye318ECsEJIBtCLDM46ExVxmeOfjboIVbBQ+QRdpG+2LfptOLBWb8LQLT55l3I8RvOc9C7+u7LfuEkOiRocQgu20t+46+67eBSBsWG7Ohv6ssR+b5f0KTefC21NeiAPduSuWRFMZcl+M5dTLbqoXCNjOr9wyqjHhid970vEkNAxaljfT225E4bqDcBFC8ZOKQFlT9IDbvoGUn4mCL5+3In34++VgX7gBXDViuWor9TOsZ9aZyH9D+KS6tgfN3JpQ3PET7b/92i17OVKoQsZ44QGg/g/fUkWbqJixeb6MfnHnEz8E+gSbGD0xCyBuCjm+fCsubB2dSAQlSEmKJ9m8YrGg1ZF+5k6JmuzV3tprEvniZY3JII6/8gj0WuslmTNPCRYyLw4Du6koMYVllYIBuuOPGDXWyvfNWATZBP3+oPnX3E5AQzK8JzPu7HTCBfmc4UpR1nA8OLGpvga vOOuOsgD IU7YCsApoUmReCBudYLJL1e5Rx8grz8nonHqtC0KKITMTjQagv8+1V+mDr9pNlhFZ+pTORRw58oj8Pr/uwJwdFk6Wy6xsjPasuV2jzX4+892xIUmnf0WqmgqAipwiehDuNIM49BcRxh13wOq4hxcsqA360xHihb8nae4PzYEj/bCHWJKQo17L3lCNbJ6kTXIPGcc8US4N6jtVXs08VuXkuQFQNEU/9PkIrFD05agu+2J9jxPyWxUm9DFACLATZxmQib9guWOul4t/82KehIOeipVKiXOQPbiuZ7deauyNobzW5FNzl6WijP4Tig== 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: Enable casefold lookup in tmpfs, based on the enconding defined by userspace. That means that instead of comparing byte per byte a file name, it compares to a case-insensitive equivalent of the Unicode string. * Dcache handling There's a special need when dealing with case-insensitive dentries. First of all, we currently invalidated every negative casefold dentries. That happens because currently VFS code has no proper support to deal with that, giving that it could incorrectly reuse a previous filename for a new file that has a casefold match. For instance, this could happen: $ mkdir DIR $ rm -r DIR $ mkdir dir $ ls DIR/ And would be perceived as inconsistency from userspace point of view, because even that we match files in a case-insensitive manner, we still honor whatever is the initial filename. Along with that, tmpfs stores only the first equivalent name dentry used in the dcache, preventing duplications of dentries in the dcache. The d_compare() version for casefold files uses a normalized string, so the filename under lookup will be compared to another normalized string for the existing file, achieving a casefolded lookup. * Enabling casefold via mount options Most filesystems have their data stored in disk, so casefold option need to be enabled when building a filesystem on a device (via mkfs). However, as tmpfs is a RAM backed filesystem, there's no disk information and thus no mkfs to store information about casefold. For tmpfs, create casefold options for mounting. Userspace can then enable casefold support for a mount point using: $ mount -t tmpfs -o casefold=utf8-12.1.0 fs_name mount_dir/ Userspace must set what Unicode standard is aiming to. The available options depends on what the kernel Unicode subsystem supports. And for strict encoding: $ mount -t tmpfs -o casefold=utf8-12.1.0,strict_encoding fs_name mount_dir/ Strict encoding means that tmpfs will refuse to create invalid UTF-8 sequences. When this option is not enabled, any invalid sequence will be treated as an opaque byte sequence, ignoring the encoding thus not being able to be looked up in a case-insensitive way. Signed-off-by: André Almeida --- mm/shmem.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 111 insertions(+), 4 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index 5a77acf6ac6a..0f918010bc54 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -40,6 +40,8 @@ #include #include #include +#include +#include #include "swap.h" static struct vfsmount *shm_mnt __ro_after_init; @@ -123,6 +125,8 @@ struct shmem_options { bool noswap; unsigned short quota_types; struct shmem_quota_limits qlimits; + struct unicode_map *encoding; + bool strict_encoding; #define SHMEM_SEEN_BLOCKS 1 #define SHMEM_SEEN_INODES 2 #define SHMEM_SEEN_HUGE 4 @@ -3427,6 +3431,11 @@ shmem_mknod(struct mnt_idmap *idmap, struct inode *dir, if (IS_ERR(inode)) return PTR_ERR(inode); +#if IS_ENABLED(CONFIG_UNICODE) + if (!utf8_check_strict_name(dir, &dentry->d_name)) + return -EINVAL; +#endif + error = simple_acl_create(dir, inode); if (error) goto out_iput; @@ -3442,7 +3451,12 @@ shmem_mknod(struct mnt_idmap *idmap, struct inode *dir, dir->i_size += BOGO_DIRENT_SIZE; inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir)); inode_inc_iversion(dir); - d_instantiate(dentry, inode); + + if (IS_CASEFOLDED(dir)) + d_add(dentry, inode); + else + d_instantiate(dentry, inode); + dget(dentry); /* Extra count - pin the dentry in core */ return error; @@ -3533,7 +3547,10 @@ static int shmem_link(struct dentry *old_dentry, struct inode *dir, inc_nlink(inode); ihold(inode); /* New dentry reference */ dget(dentry); /* Extra pinning count for the created dentry */ - d_instantiate(dentry, inode); + if (IS_CASEFOLDED(dir)) + d_add(dentry, inode); + else + d_instantiate(dentry, inode); out: return ret; } @@ -3553,6 +3570,14 @@ static int shmem_unlink(struct inode *dir, struct dentry *dentry) inode_inc_iversion(dir); drop_nlink(inode); dput(dentry); /* Undo the count from "create" - does all the work */ + + /* + * For now, VFS can't deal with case-insensitive negative dentries, so + * we invalidate them + */ + if (IS_CASEFOLDED(dir)) + d_invalidate(dentry); + return 0; } @@ -3697,7 +3722,10 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir, dir->i_size += BOGO_DIRENT_SIZE; inode_set_mtime_to_ts(dir, inode_set_ctime_current(dir)); inode_inc_iversion(dir); - d_instantiate(dentry, inode); + if (IS_CASEFOLDED(dir)) + d_add(dentry, inode); + else + d_instantiate(dentry, inode); dget(dentry); return 0; @@ -4050,6 +4078,8 @@ enum shmem_param { Opt_usrquota_inode_hardlimit, Opt_grpquota_block_hardlimit, Opt_grpquota_inode_hardlimit, + Opt_casefold, + Opt_strict_encoding, }; static const struct constant_table shmem_param_enums_huge[] = { @@ -4081,9 +4111,47 @@ const struct fs_parameter_spec shmem_fs_parameters[] = { fsparam_string("grpquota_block_hardlimit", Opt_grpquota_block_hardlimit), fsparam_string("grpquota_inode_hardlimit", Opt_grpquota_inode_hardlimit), #endif + fsparam_string("casefold", Opt_casefold), + fsparam_flag ("strict_encoding", Opt_strict_encoding), {} }; +#if IS_ENABLED(CONFIG_UNICODE) +static int shmem_parse_opt_casefold(struct fs_context *fc, struct fs_parameter *param) +{ + struct shmem_options *ctx = fc->fs_private; + unsigned int maj = 0, min = 0, rev = 0, version_number; + char version[10]; + int ret; + struct unicode_map *encoding; + + if (strncmp(param->string, "utf8-", 5)) + return invalfc(fc, "Only utf8 encondings are supported"); + ret = strscpy(version, param->string + 5, sizeof(version)); + if (ret < 0) + return invalfc(fc, "Invalid enconding argument: %s", + param->string); + + ret = utf8_parse_version(version, &maj, &min, &rev); + if (ret) + return invalfc(fc, "Invalid utf8 version: %s", version); + version_number = UNICODE_AGE(maj, min, rev); + encoding = utf8_load(version_number); + if (IS_ERR(encoding)) + return invalfc(fc, "Invalid utf8 version: %s", version); + pr_info("tmpfs: Using encoding provided by mount options: %s\n", + param->string); + ctx->encoding = encoding; + + return 0; +} +#else +static int shmem_parse_opt_casefold(struct fs_context *fc, struct fs_parameter *param) +{ + return invalfc(fc, "tmpfs: No kernel support for casefold filesystems\n"); +} +#endif + static int shmem_parse_one(struct fs_context *fc, struct fs_parameter *param) { struct shmem_options *ctx = fc->fs_private; @@ -4242,6 +4310,11 @@ static int shmem_parse_one(struct fs_context *fc, struct fs_parameter *param) "Group quota inode hardlimit too large."); ctx->qlimits.grpquota_ihardlimit = size; break; + case Opt_casefold: + return shmem_parse_opt_casefold(fc, param); + case Opt_strict_encoding: + ctx->strict_encoding = true; + break; } return 0; @@ -4471,6 +4544,11 @@ static void shmem_put_super(struct super_block *sb) { struct shmem_sb_info *sbinfo = SHMEM_SB(sb); +#if IS_ENABLED(CONFIG_UNICODE) + if (sb->s_encoding) + utf8_unload(sb->s_encoding); +#endif + #ifdef CONFIG_TMPFS_QUOTA shmem_disable_quotas(sb); #endif @@ -4515,6 +4593,16 @@ static int shmem_fill_super(struct super_block *sb, struct fs_context *fc) } sb->s_export_op = &shmem_export_ops; sb->s_flags |= SB_NOSEC | SB_I_VERSION; + +#if IS_ENABLED(CONFIG_UNICODE) + if (ctx->encoding) { + sb->s_encoding = ctx->encoding; + generic_set_sb_d_ops(sb); + if (ctx->strict_encoding) + sb->s_encoding_flags = SB_ENC_STRICT_MODE_FL; + } +#endif + #else sb->s_flags |= SB_NOUSER; #endif @@ -4704,11 +4792,28 @@ static const struct inode_operations shmem_inode_operations = { #endif }; +static struct dentry *shmem_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags) +{ + if (dentry->d_name.len > NAME_MAX) + return ERR_PTR(-ENAMETOOLONG); + + /* + * For now, VFS can't deal with case-insensitive negative dentries, so + * we prevent them from being created + */ + if (IS_CASEFOLDED(dir)) + return NULL; + + d_add(dentry, NULL); + + return NULL; +} + static const struct inode_operations shmem_dir_inode_operations = { #ifdef CONFIG_TMPFS .getattr = shmem_getattr, .create = shmem_create, - .lookup = simple_lookup, + .lookup = shmem_lookup, .link = shmem_link, .unlink = shmem_unlink, .symlink = shmem_symlink, @@ -4791,6 +4896,8 @@ int shmem_init_fs_context(struct fs_context *fc) ctx->uid = current_fsuid(); ctx->gid = current_fsgid(); + ctx->encoding = NULL; + fc->fs_private = ctx; fc->ops = &shmem_fs_context_ops; return 0; From patchwork Mon Sep 2 22:55:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 13787776 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 04321CA0ED3 for ; Mon, 2 Sep 2024 22:55:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8675C8D0118; Mon, 2 Sep 2024 18:55:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7EF216B03B6; Mon, 2 Sep 2024 18:55:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 691B58D0118; Mon, 2 Sep 2024 18:55:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 414DC6B03B5 for ; Mon, 2 Sep 2024 18:55:54 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id BB1D7140473 for ; Mon, 2 Sep 2024 22:55:53 +0000 (UTC) X-FDA: 82521307386.11.EC12252 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf20.hostedemail.com (Postfix) with ESMTP id 1A7971C0002 for ; Mon, 2 Sep 2024 22:55:51 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=MUkc6dP8; dmarc=pass (policy=none) header.from=igalia.com; spf=pass (imf20.hostedemail.com: domain of andrealmeid@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725317647; 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=/2i9Fi4oBPYgwH3vxA7dodmgTyqTZhVfRjdU73qonMA=; b=EFt1Qlkp6Z01tpN3kFC14tFzR4z9XIvgWrEGm6LMD3oMZpsLC2aiKj4U7fu5Kue+Wbcdv9 wjuGR/QdPox+GRRQJmnHxoyxH+BjpNAWrvH3XUPwixDrFuApbSgG6NN6On4az0u5fUwDaM 2x9qXMyuQTibXAzFJ4SvDmdNzADdA4Y= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725317647; a=rsa-sha256; cv=none; b=IcQVIbh5IiuQaQLthLd+CXZkM3s6SWlI1TOklxw/hdis8n7Re70f052QOiTTN2NhLAiJ3f 8NwUmdKQhhRYfiJTNyg+tTOpK8X7r5rx026nxmCC4JPM2FIdpE0FEohoHKJzFA6Gt7z7Cw MuPIULH7RfV/zoNL9+pvqoEdhjbXc5c= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=MUkc6dP8; dmarc=pass (policy=none) header.from=igalia.com; spf=pass (imf20.hostedemail.com: domain of andrealmeid@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From: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=/2i9Fi4oBPYgwH3vxA7dodmgTyqTZhVfRjdU73qonMA=; b=MUkc6dP85J2EBxkw+6Qhzqiask MAcs/wENfzy2vgBdutdU+tLIzXJHJWvEXb+YKkQW4Cx1+KivoxLgdp3qtjc/V+dl5Mw+sg5vM6Mrm g05+BAjToGNLTCLlRVR6RBSyAhwVC+4Dz+00uGwTlQFGMCk1Apd3HRWvIsSOKYt02cbWaM19ftwbV iE8x2tByMFC1mef3SLSQ0rErkGSYtUhHFaKVr9ZE2fPU7zbzRMfWkP9bXEohOWSrK9t+1b00v1OYc 21dU82fo9APqJY4Sqr+jD5E6+XiS76JLMSuod904d+98gnOSPV+8ajywtt96wblst17BIJ9tonnyZ wEL0cOGA==; Received: from [177.172.122.98] (helo=localhost.localdomain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1slFxY-008VrL-95; Tue, 03 Sep 2024 00:55:44 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: Hugh Dickins , Andrew Morton , Alexander Viro , Christian Brauner , Jan Kara , krisman@kernel.org Cc: 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 , =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v2 6/8] tmpfs: Add flag FS_CASEFOLD_FL support for tmpfs dirs Date: Mon, 2 Sep 2024 19:55:08 -0300 Message-ID: <20240902225511.757831-7-andrealmeid@igalia.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240902225511.757831-1-andrealmeid@igalia.com> References: <20240902225511.757831-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 1A7971C0002 X-Stat-Signature: 4wqm3tg3ekfb43yi5u9afteirkp7x6np X-Rspam-User: X-HE-Tag: 1725317751-411507 X-HE-Meta: U2FsdGVkX1+5CN9amgiADrS6jW8Wm4yCPBoBe+AlWzcGCC3Cocx5Eixhs+FbMffT/FLMJh4eNYJYt8IMs3LAYVKrhlWDtBx+IaJ5VhmadrqKJwt3JM6ROuz+vM7JnEnMYR79i7r0UcP5HhNHr7B5LBvt+DVIfS6+gCA36K9+k5zm12tad3tdxyOQ2p9q9dWKa/6GyyOEXSG8ejEqYLrSjnkPrAxMm7S0DbzQ7ysVaktFUPktMSL2T+XVPE0I+LlhAtIgyXoTffdXcmwZlUjIXqzdpbAyAt/De5LlnATsi6rMaQmco7b+piUxYYoN7JbIi2wI2VzRBP3xlEfvtkOaBHn2WEVrLzyfnzb01VNCBLM2KNQWApg2BWLapXVJQ+gjpdOBHeeNcytt8wYfqTYxJNmwCjH/1TThj2A4iJldNJguejlDJBDKvsLlAbtpKekUBh2iVw9TTzK6ok9rms8sSkhC0P4bZJ4Pelc/ouGcxe4TXv8pAqztWNTFkJ94oGZtRoChGWTzk8ycGREIPWtc0s5/1QoiOpLs9MG7fLLoIu4f29ihXsbkmFXWpg8YBfyF2GSM6Y2bkl207TQ/EL+JhA0Ke7d5uATh+CRcMTUWUITCilYeyl8zRXJhSQ/UAwGztq1zMLbGrVKM1LDjxYHFfyoQHmr88BIk01Tu2TnTrH9HwpBN30D4Rr5J+Ex1+saMQrq8lXWEf5+O4biY1vy220a6HDXMoOmjPjBetKL8uKWXMwy+7LlSdiHI7S3tGnjaTode5CDqFiOIGGfFdUfLo9gpBbOoeu8zASgLM2JyNeQtCHUvkf6uNMJI/6kfR1jAFqfnGe7jezabPpHjfBmfK9kXfBSzlW9On4gsIfVLcwHHVy0JiU+4kdD/euNZL8LtvFFGg5N2e3Qz60rlkUQBnoHiYn+YjqXIWrDkagOJXet+qgZI8Q2q6qy1rvlh2sjuQSH4Jl1YniwAkapqcsF JCxdo0sr 9rmi+fOgAl3HTHGTNO+8tDSuA2NICnFz5nunwTKIPUkstdwgmXac1HTBVM6u8LcwKOfNqT5nBjG8V1b8VHN15eO+ET/ms5PJM+1Uq02yy8biS6ZIG6ve+NJ+y86kIP9hchnVGgCMEv/Dq6ixUMCw1O2DZeZQLwsaBfr+dILL8wn4nEVdH3+hCQHj88fPhmRaoywNFzlxUpCPnrng8AWfzX92cLt3UkQFURWnkTPnArqokR4HXpSFSP6N2WI6L4a2l3mfjbMNkonTE6/Yb+GybSqLZPiQlxYPdDnQ5imEXPEMS4JPO+DgDb+aRg/VWjC49Lq4mBpT25tCUbJ2CG3zChCKhBNpMtw0Y4ckuglWNEpHb2OA= 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: 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 --- include/linux/shmem_fs.h | 6 +++--- mm/shmem.c | 40 +++++++++++++++++++++++++++++++++------- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h index 1d06b1e5408a..8367ca2b99d9 100644 --- a/include/linux/shmem_fs.h +++ b/include/linux/shmem_fs.h @@ -42,10 +42,10 @@ struct shmem_inode_info { struct inode vfs_inode; }; -#define SHMEM_FL_USER_VISIBLE FS_FL_USER_VISIBLE +#define SHMEM_FL_USER_VISIBLE (FS_FL_USER_VISIBLE | FS_CASEFOLD_FL) #define SHMEM_FL_USER_MODIFIABLE \ - (FS_IMMUTABLE_FL | FS_APPEND_FL | FS_NODUMP_FL | FS_NOATIME_FL) -#define SHMEM_FL_INHERITED (FS_NODUMP_FL | FS_NOATIME_FL) + (FS_IMMUTABLE_FL | FS_APPEND_FL | FS_NODUMP_FL | FS_NOATIME_FL | FS_CASEFOLD_FL) +#define SHMEM_FL_INHERITED (FS_NODUMP_FL | FS_NOATIME_FL | FS_CASEFOLD_FL) struct shmem_quota_limits { qsize_t usrquota_bhardlimit; /* Default user quota block hard limit */ diff --git a/mm/shmem.c b/mm/shmem.c index 0f918010bc54..9a0fc7636629 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -2617,9 +2617,26 @@ static int shmem_initxattrs(struct inode *, const struct xattr *, void *); * chattr's fsflags are unrelated to extended attributes, * but tmpfs has chosen to enable them under the same config option. */ -static void shmem_set_inode_flags(struct inode *inode, unsigned int fsflags) +static int shmem_set_inode_flags(struct inode *inode, unsigned int fsflags, struct dentry *dentry) { - unsigned int i_flags = 0; + unsigned int i_flags = 0, old = inode->i_flags; + struct super_block *sb = inode->i_sb; + + 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; + } if (fsflags & FS_NOATIME_FL) i_flags |= S_NOATIME; @@ -2630,10 +2647,12 @@ static void shmem_set_inode_flags(struct inode *inode, unsigned int fsflags) /* * But FS_NODUMP_FL does not require any action in i_flags. */ - inode_set_flags(inode, i_flags, S_NOATIME | S_APPEND | S_IMMUTABLE); + inode_set_flags(inode, i_flags, S_NOATIME | S_APPEND | S_IMMUTABLE | S_CASEFOLD); + + return 0; } #else -static void shmem_set_inode_flags(struct inode *inode, unsigned int fsflags) +static void shmem_set_inode_flags(struct inode *inode, unsigned int fsflags, struct dentry *dentry) { } #define shmem_initxattrs NULL @@ -2680,7 +2699,7 @@ static struct inode *__shmem_get_inode(struct mnt_idmap *idmap, info->fsflags = (dir == NULL) ? 0 : SHMEM_I(dir)->fsflags & SHMEM_FL_INHERITED; if (info->fsflags) - shmem_set_inode_flags(inode, info->fsflags); + shmem_set_inode_flags(inode, info->fsflags, NULL); INIT_LIST_HEAD(&info->shrinklist); INIT_LIST_HEAD(&info->swaplist); simple_xattrs_init(&info->xattrs); @@ -3790,16 +3809,23 @@ static int shmem_fileattr_set(struct mnt_idmap *idmap, { struct inode *inode = d_inode(dentry); struct shmem_inode_info *info = SHMEM_I(inode); + int ret, flags; if (fileattr_has_fsx(fa)) return -EOPNOTSUPP; if (fa->flags & ~SHMEM_FL_USER_MODIFIABLE) return -EOPNOTSUPP; - info->fsflags = (info->fsflags & ~SHMEM_FL_USER_MODIFIABLE) | + flags = (info->fsflags & ~SHMEM_FL_USER_MODIFIABLE) | (fa->flags & SHMEM_FL_USER_MODIFIABLE); - shmem_set_inode_flags(inode, info->fsflags); + ret = shmem_set_inode_flags(inode, flags, dentry); + + if (ret) + return ret; + + info->fsflags = flags; + inode_set_ctime_current(inode); inode_inc_iversion(inode); return 0; From patchwork Mon Sep 2 22:55:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 13787805 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 1234BC54FC6 for ; Mon, 2 Sep 2024 23:20:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9D13D8D011C; Mon, 2 Sep 2024 19:20:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9817B8D00E7; Mon, 2 Sep 2024 19:20:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 84A3C8D011C; Mon, 2 Sep 2024 19:20:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 67C0A8D00E7 for ; Mon, 2 Sep 2024 19:20:31 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 188B2140473 for ; Mon, 2 Sep 2024 23:20:31 +0000 (UTC) X-FDA: 82521369462.27.7BFC526 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf02.hostedemail.com (Postfix) with ESMTP id 5EC4080006 for ; Mon, 2 Sep 2024 23:20:29 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=p9Uj+HQO; dmarc=pass (policy=none) header.from=igalia.com; spf=pass (imf02.hostedemail.com: domain of andrealmeid@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725319153; a=rsa-sha256; cv=none; b=Ap4w3owdLWT+lSr6Bn7r2fE/Xe6uvWbX94edl9iuaxERiO4ge14QJCedZS7UKfSEbrCSIw U04VqVv/UkrrAW3QRmddjLK2xueh0xFTGfGwze5lZ/V3V80aOjissyaWBUIKHBWrX+8Jsw eRkiguuG7PDqW/n+eiwwRb54U8DLJqk= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=p9Uj+HQO; dmarc=pass (policy=none) header.from=igalia.com; spf=pass (imf02.hostedemail.com: domain of andrealmeid@igalia.com designates 178.60.130.6 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725319153; 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=3R/tp+CDqyBtPlv516oP8Fp25VoAZ0ob6jRSgnVwtV0=; b=DntJdz4BaoHNxB8RB9vBOgGqveRRBuCwX1R4xtpf5iuYHHWvHfdz11ztUjFOqwzhg+aqr5 y8VIkrSxNfEas08NilttbEQ6/adN0l8xddkZwMEwtmWiB+fUibBmpnTX9TKh4/8USGviHS DlCCMmcNgXqhOiNNhmUTDB6dzE75qic= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From: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=3R/tp+CDqyBtPlv516oP8Fp25VoAZ0ob6jRSgnVwtV0=; b=p9Uj+HQO7xB0nBgaoWBjepov4N hHfY4s4Au6B3vEil6NOrGBzm5GroC1P0mp5WyxlUIc372IGKu7pI0vyl/sC7ES4VZnj4YxPwFtB2t KxF1C7a7cgdwihU4cE3z4dUwucE1+ci/hnTZEd4SBpjHVHmd87vT9sNYe6eBQ0/eB/Myqxsvi3zfH /xHeHyMcNs3ZOPh1MLSYgq0s3NxfGLun+OoFVvpzLD0iwGiefDz85zXF1Ay7zRSfW8GnkXO81R6ol 1RMf1Q/2mm8NWh/ACClOonMPxgS33SKmuNuqkWtMz87RuBxl+UcdzK4tv99AFJl7Ivb+ccefu8ytu A0axMLqQ==; Received: from [177.172.122.98] (helo=localhost.localdomain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1slFxc-008VrL-6R; Tue, 03 Sep 2024 00:55:48 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: Hugh Dickins , Andrew Morton , Alexander Viro , Christian Brauner , Jan Kara , krisman@kernel.org Cc: 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 , =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v2 7/8] tmpfs: Expose filesystem features via sysfs Date: Mon, 2 Sep 2024 19:55:09 -0300 Message-ID: <20240902225511.757831-8-andrealmeid@igalia.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240902225511.757831-1-andrealmeid@igalia.com> References: <20240902225511.757831-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 5EC4080006 X-Stat-Signature: 4guozosij4at5j5itqe78u84w1jogd6w X-Rspam-User: X-HE-Tag: 1725319229-362281 X-HE-Meta: U2FsdGVkX1+W6hsL+S4PaWd6IIYEgVmC+Tp41lSkaOhcwIZ02clAZWzz2PO9YD8FZidxzq5drnAeTCXxk3o68s5FRR6Fk66gSF9QG88g/uKbZWMihl8sxfBrJj8teMPkcXnzQ8VNHps4IF5U1sHDPGk1Pkrj8NcA4ElgXqShxRQtci+X1O51oa03HHXICRIodPWqdn2L/rgPqs41SlxoZsYzl9E01VCr7ne1KQ+HNMROuBmdeKj/EQfhTPWIb85L8n49YTwPSa5cvjZ6EpOMrupF+dkF9I2cRd8J/n1WgIbJoRLi/TzuAYOnokpdZ51qgStCudvGeBZGVdhjyGAU4Zqalfa5ApJnxu76oRbvzzjJKXgjr2d0D/M9NHZa8Wuu403oMoyE6fPtEYOhWcjfeNpzEXsNALn7yEjzTRYoBDJvMiE/EuZfYZl0MNDnloLYoYZtQOEBxLqDvUQj0d0DQ+oz1LnkwcHODUhB8cRXnDu/ziEAlh/R6KgyLb+T0ttJCgCGXOtQ8fnY32eOsQe52PPfcR69sbDQN6qYtLOvWdeGqczdYMsvBCBh8h9SVO5l0uv4q7GVPojIo/32rl0v7OMyq0K3dZCKdQBnySonnxMD6FrkqEBgRmvexxi0OOkRLsbPl0dAQbbJl6LA/8auBtOYppBp/k91X14TWFJ79UM0IhO7+Wy/N+aol1Mwo3P/wT8p5mQQVUw9D2apFwcjwaJenzh7FCKre3qQXH7meQdOIIEAyrpaC6PlVizh93Cfl7WKT3sRqq8xiIYANg1wLY10iwN0OCnudckmdU53XYVmWT++YDmcqwpZb8aWQYwsTL5vNVA+qNwd3tRzaU/W+1bqQrPWoKrXOiW109R2MZV45inj7n3dHHAE/z0gy90NrtYrV61sv3eH1/9ekHt7ZurPBo0V7r/xpu6989P7BJlcgoKu90/Nmjqb/J1o8at2MrJFuO9EIOy+rQfAtk2 ITqJof2i XfgbDaRslJ0KC+enco/HglJaT4Z8E9s2pwXDcFK+MmhP/8TXESY6Eq7sxE5qWuM5RJIVmaL3cKkXxRdoFH2Sdm1J7HpnLARwd6usgPe5gmHkNTxQtgJDgwjB8L5wbh21aEzZue8f36HlmsxWoamjWPcH7zzRy9YlBnW4MEfz2xCnS7FEM2y9pKZ+9jDRdWrHTZllM9OrbYhF6sGvydhWkI2nQoebc9uRVNh3aJbj3wVars1SPBK8MI+QWCFQM4SL4kfKihau8OWz23VQTL6nPS2xA9wCOCV3rvZbKDLE095zMSHCWbpDoZrhIiw== 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: Expose filesystem features through sysfs, so userspace can query if tmpfs support casefold. This follows the same setup as defined by ext4 and f2fs to expose casefold support to userspace. Signed-off-by: André Almeida --- mm/shmem.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/mm/shmem.c b/mm/shmem.c index 9a0fc7636629..fdaae7543d1a 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -5365,3 +5365,40 @@ struct page *shmem_read_mapping_page_gfp(struct address_space *mapping, return page; } EXPORT_SYMBOL_GPL(shmem_read_mapping_page_gfp); + +#if defined(CONFIG_SYSFS) && defined(CONFIG_TMPFS) +#if IS_ENABLED(CONFIG_UNICODE) +static DEVICE_STRING_ATTR_RO(casefold, 0444, "supported"); +#endif + +static struct attribute *tmpfs_attributes[] = { +#if IS_ENABLED(CONFIG_UNICODE) + &dev_attr_casefold.attr.attr, +#endif + NULL +}; + +static const struct attribute_group tmpfs_attribute_group = { + .attrs = tmpfs_attributes, + .name = "features" +}; + +static struct kobject *tmpfs_kobj; + +static int __init tmpfs_sysfs_init(void) +{ + int ret; + + tmpfs_kobj = kobject_create_and_add("tmpfs", fs_kobj); + if (!tmpfs_kobj) + return -ENOMEM; + + ret = sysfs_create_group(tmpfs_kobj, &tmpfs_attribute_group); + if (ret) + kobject_put(tmpfs_kobj); + + return ret; +} + +fs_initcall(tmpfs_sysfs_init); +#endif /* CONFIG_SYSFS && CONFIG_TMPFS */ From patchwork Mon Sep 2 22:55:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Almeida?= X-Patchwork-Id: 13787804 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 09FC7CA0ED3 for ; Mon, 2 Sep 2024 23:20:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8E6D48D011B; Mon, 2 Sep 2024 19:20:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 898008D00E7; Mon, 2 Sep 2024 19:20:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 712F78D011B; Mon, 2 Sep 2024 19:20:28 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 4796E8D00E7 for ; Mon, 2 Sep 2024 19:20:28 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 0D64BA99B0 for ; Mon, 2 Sep 2024 23:20:28 +0000 (UTC) X-FDA: 82521369336.25.AE8FF22 Received: from fanzine2.igalia.com (fanzine.igalia.com [178.60.130.6]) by imf20.hostedemail.com (Postfix) with ESMTP id 5E8F31C0005 for ; Mon, 2 Sep 2024 23:20:26 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=b4153IEy; spf=pass (imf20.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=1725319101; 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=2uckVKN0pdzCghR0p6/g82d2/8anRVmY8PvlKYt2nuo=; b=qQgS7RPs7QC8WXS2FRT+J/G7ObHb+KCX5GFy+hlZ/bF4hsPLAZKVyiUABpToENUteVn3yP Ap6+XKJHq1Jywxj495KoZxmvhJBwguhSnQVd/abjZPVJy1fN0di1Y9o/SxGe9fxn5/Uzx9 9Vnt+KdOMFZgHUCO1kNEP1ojHpFQVio= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=b4153IEy; spf=pass (imf20.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=1725319101; a=rsa-sha256; cv=none; b=ExrxyI+DyHNue3+HuR3k9L4ugtvtOG7mUMwQT9TMfm4QG1PZ0wHfJsU4UHKnNcINMbj8we cF4oDoduwh+RzYwQGwSvrGJlX1Wh5bmS4h72hbBdYFED+YOSvX12XXdsOD7BY6G8lcM/Fr /0cMU7kxBFjRzTBXE53Ym4YpP90q+TI= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From: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=2uckVKN0pdzCghR0p6/g82d2/8anRVmY8PvlKYt2nuo=; b=b4153IEyOlT24sPlLCTltO9k17 8ORGs8pUbsZjsP8G/G7rTOVrboU7vVIZneJ8WVG/79knVk9jBbZVADQQB9xZ0+HNLJ6zNE+AJloa3 PzYgotO6CNgL/5xQHs65xcK9qG4aDJXgP3vQiRQgSqUDm4kSCZPpRjEkgGosgomMKpsSp/rAt+sLx dNhEyyZ5vXhUHhbeICkiJlGkoJJ7dvij0gzxUPN98AoIcZgUhtSkxTe3cOBhZJVkr/hvSL4/H53/Q yyu6BowILx2MdeuMEF45JsXlZjoCPhaXUvslbUt7A0BEuA0KJRYHMOU2FokYx1/TWh/02jvYm/pPJ S24Apbjw==; Received: from [177.172.122.98] (helo=localhost.localdomain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1slFxg-008VrL-3m; Tue, 03 Sep 2024 00:55:52 +0200 From: =?utf-8?q?Andr=C3=A9_Almeida?= To: Hugh Dickins , Andrew Morton , Alexander Viro , Christian Brauner , Jan Kara , krisman@kernel.org Cc: 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 , =?utf-8?q?Andr=C3=A9_Almeida?= Subject: [PATCH v2 8/8] docs: tmpfs: Add casefold options Date: Mon, 2 Sep 2024 19:55:10 -0300 Message-ID: <20240902225511.757831-9-andrealmeid@igalia.com> X-Mailer: git-send-email 2.46.0 In-Reply-To: <20240902225511.757831-1-andrealmeid@igalia.com> References: <20240902225511.757831-1-andrealmeid@igalia.com> MIME-Version: 1.0 X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 5E8F31C0005 X-Stat-Signature: xqwdp8nopa7g5z9egnhrgtpzsmjifzza X-Rspam-User: X-HE-Tag: 1725319226-152404 X-HE-Meta: U2FsdGVkX1+qBzqYB5Ic9C3Ed6Q3Kd+TvJMT/tTZRAkgeUSGWcopQWPlkuE/0EC7vgMPxMMRqKjqgSTNOVR8Ix0L0WqN0v8ntYp9r+iY9+aq9yaK/hir4rMHpsLwdstMwbKZW4LPaOS1tN0cuGguWRH3kEk7pHGsY00pkN+lhPshhAgHUxgQ/Vd/uMtTilYm7IpTiS2sahtXkVjZHLYorEoahVRdehAYPYQm2OeQRoW32QWlCXCNuyXEhlq+nfu5PuMh2N1k39RxzTSk1bU5fF3P78VoRr8eHfqLAXqEn4R+ucPaTER7mNTJDQfKj/VPjO2qZkfQBZDYNMQudLP8MY3c2WkeqSOtWE6YtAnWvrVeXBzl7N8iqblW5ezy/UM19YMBPhIldAbV5tLp9P1C6YEVo7Fllvei58+rpL8AQSOppJKLNs4z/DxPfVGaW2HLYVHa3Aex81Xw5duC8jJb8f1f9AofN3DJWbaUMZAK6RXbmVO+v8UVHgovkpyoUpco0ol749ZTUMLDefVdd/Ke/NuO5RnL2JXVmj47BijpQGAIK95y05HPNERrd1tXOL4iQepK3BRBFzZvCkL/nZ85uSgDJJWt4bn/C5stz2k1rIM1PijBrtfwK3ATDTcqaJGXMxZtMogm+FRfnoR+TgBJBErvV5yoaMnT2DO1UISSYeuexS/FL0ppZxAxrsEqN/stbmfzw6W1AkG0Ji12StSI4OWcYoFkf5D1pBP8IXzII9FQoiVm/uWdPOuR0qxK3+OmvYiUjkXdyADo6Vkd3ZhKrtR7cYo0PxdgYzcv5Ypsa0dzi48KppT3+r5JxegdnHwSLUsNG2Ipd1YmaM3NpkfgOjMkIeNorqKHG4Gf15bMmSBrFwQV4tMbc2jyAsNU1Ysq9hqijLSbMl5DZlgCujPjk7ArzAA9/lmRxIGreeaN2922MjFIDx7mSEScatcIjckKnlZCDLlrEl+Le3TJfD8 a3K8KxQJ iEke13poixzbguLTygb7SFiRBfUVAtgLrXQPYkkeVjc/2H4T2MvioVajDv4RSnbWssv0zp1Vs2sgmuU9NuYtL82EiOI44hcf4dxHZCGkynOF84jcQR3Qp+spzZQu4b77+2nVhv04Zr8RKqazW4DUELICV/QkqDZsxJUdUvSoUHShvO7/GTBWApeSejMobg480hcqqEmQb7tzhW2xKYISqNcKa0ozsI6TppXJZRgL9vopE/O3S8cESuwWBPH8jdko8IVKrn5TK0Ip58/5uwIalUyefjJ36YjR8cClT25jXVX7KOE2CpY4DJoR+yOEau722DND+r0eeJSJelLtgncDrc+RacXP43L6CEsqCNkUEzMa5xQ8= 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: Document mounting options for casefold support in tmpfs. Signed-off-by: André Almeida --- Documentation/filesystems/tmpfs.rst | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Documentation/filesystems/tmpfs.rst b/Documentation/filesystems/tmpfs.rst index 56a26c843dbe..ce24fb16979a 100644 --- a/Documentation/filesystems/tmpfs.rst +++ b/Documentation/filesystems/tmpfs.rst @@ -241,6 +241,41 @@ So 'mount -t tmpfs -o size=10G,nr_inodes=10k,mode=700 tmpfs /mytmpfs' will give you tmpfs instance on /mytmpfs which can allocate 10GB RAM/SWAP in 10240 inodes and it is only accessible by root. +tmpfs has the following mounting options for case-insesitive lookups support: + +================= ============================================================== +casefold Enable casefold support at this mount point using the given + argument as the encoding standard. Currently only utf8 + encodings are supported. +strict_encoding Enable strict encoding at this mount point (disabled by + default). This means that invalid sequences will be rejected + by the file system. +================= ============================================================== + +Note that this option doesn't enable casefold by default; one needs to set +casefold flag per directory, setting the +F attribute in an empty directory. New +directories within a casefolded one will inherit the flag. + +Example:: + + $ mount -t tmpfs -o casefold=utf8-12.1.0,cf_strict fs_name /mytmpfs + $ cd /mytmpfs # case-sensitive by default + $ touch a; touch A + $ ls + A a + $ mkdir B + $ cd b + cd: The directory 'b' does not exist + $ mkdir casefold_dir + $ chattr +F casefold_dir/ # marking it as case-insensitive + $ cd + $ touch dir/a; touch dir/A + $ ls dir + a + $ mkdir B + $ cd b + $ pwd + /home/user/mytmpfs/casefold_dir/B :Author: Christoph Rohland , 1.12.01 @@ -250,3 +285,5 @@ RAM/SWAP in 10240 inodes and it is only accessible by root. KOSAKI Motohiro, 16 Mar 2010 :Updated: Chris Down, 13 July 2020 +:Updated: + André Almeida, 23 Aug 2024