From patchwork Tue Jul 25 14:45:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlos Maiolino X-Patchwork-Id: 13326565 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 AC0F8C41513 for ; Tue, 25 Jul 2023 14:45:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E7AB86B0071; Tue, 25 Jul 2023 10:45:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E29A78D0001; Tue, 25 Jul 2023 10:45:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CF1EE6B0075; Tue, 25 Jul 2023 10:45:20 -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 BB7646B0071 for ; Tue, 25 Jul 2023 10:45:20 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 891B4140E11 for ; Tue, 25 Jul 2023 14:45:20 +0000 (UTC) X-FDA: 81050407200.16.3C69917 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf21.hostedemail.com (Postfix) with ESMTP id 6897B1C0005 for ; Tue, 25 Jul 2023 14:45:18 +0000 (UTC) Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=XHIQ1q9w; spf=pass (imf21.hostedemail.com: domain of cem@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=cem@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690296318; a=rsa-sha256; cv=none; b=0BuoB/ze+1S7ARK5OoJQiJOfSE516GeVinwwybS3zJ7YJBrVayEgP+FlfGTyYmxuK4Jmw5 e2EwjISMWDXFFM52rGYA7+SKbb7eumE64lrZMTojf/EBq414rvaWhdClufzFu/nOAk+8V+ StgW6G+k++ufGDcb88/sJHbIt3Kh37g= ARC-Authentication-Results: i=1; imf21.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=XHIQ1q9w; spf=pass (imf21.hostedemail.com: domain of cem@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=cem@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690296318; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=f15IjzpcI2jfQZo8BamJR1KLcMsTdLHIzpkZvmj2BRs=; b=0kg1Z0KhigBOHG8I3/jB4yG/DixK0flVFe/Y6UeyU0dxfQaIN+VRwir53isFKtvUwA0Cvy 3pyg4JoNw/06Sj74poM9uPFwLkKeQoCHAt3uM2vic6dEbTyyDvGstJ7VaG9yjxbjSVctD6 MG7ZiVGrnuZ2B4ccvXVR2wOfwxvALE8= Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 59BA561780; Tue, 25 Jul 2023 14:45:17 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7A596C433C7; Tue, 25 Jul 2023 14:45:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690296316; bh=2C4Du4OdzYuMUJ6Ft6P3cA/szNhsyOJ2t3MD6dK4yRw=; h=From:To:Cc:Subject:Date:From; b=XHIQ1q9w1O4LQd/fEACIZxKGUMskgVYeVEywu0szY4qRL8GrjqdQkbOV+Ob5o4Js/ nnxbCgyV24cXsdCVd6FVC0+THjVLPM1ylVoF5yCUS/JFCngnFKHlCdYXSd6RvKwYz7 Dxr+IZAPPLWleVG8qZyZv2t2N/I6MibNrcUVgb3oB58fQiOjmmU66V+T97NW5Vs5GE Jb43KcSpfeX8KRqNyf1N1PLGS+MjgIXOuCTl8ttq95nQcKpeLBCvD0ENduyemcbIQF dF+ufGEHhRU+3Ir53n2QmqWGTZeyPvmOdrOJ9zzJZukrkqwP+LpKLYWRIVW+K31qh8 A88YXw/mJP2YQ== From: cem@kernel.org To: linux-fsdevel@vger.kernel.org Cc: jack@suse.cz, akpm@linux-foundation.org, viro@zeniv.linux.org.uk, linux-mm@kvack.org, djwong@kernel.org, hughd@google.com, brauner@kernel.org, mcgrof@kernel.org Subject: [PATCH V6 0/7] shmem: Add user and group quota support for tmpfs Date: Tue, 25 Jul 2023 16:45:03 +0200 Message-Id: <20230725144510.253763-1-cem@kernel.org> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 6897B1C0005 X-Stat-Signature: y47oiuhswks8wmz4kzek4ihmp6xoy1tz X-Rspam-User: X-HE-Tag: 1690296318-294585 X-HE-Meta: U2FsdGVkX19P/3PsEuI/KJegAOjkod02VflE4DZ6AXo0DJlmitQU0veiyKs7B4ENit5OVlPHGTI8TkyV/2AxvKtxDNULI12jrWniZ6Y6w4S5VzWKyWuFkTrIumzdpckctNG8aL6S5e0GJJ3pCykk1LsB2z8y0u0pq2dtf4GBABUjhra8TgpqgUBPNHlWu6HF4BoKw+jSgZoTj06jlZCNIqT8hN+nwjyh+146L3gI1WnukCNuiDpYCxD2kyp6VPUrcJ+DWBwok47DBM0TmQkeN3o0l2rfnSqCKOLd0SJTe9CURQREvvNOHTXXSDXAdG4Tr55Z7DrMMjGaA+/oxovNQREspeme8n1ELTBwiPlfwEmu8cRUJ/vM+Nc4Md9lpQcSS2HtnzlgTSQi0Jmoxo9o9EczDBfHrOynnaR50bl6NtUweijWl4XFMN6LH50O/5tYP+XuFEB8+3/SCXbgL6IvPGx2FWcdjeylCMZd4UC0XYHmPEyLVI88ndA3RlZbbvvrKd0NdA/uNmfvDMK3DbX5Lv/alZp7YYJ4JMS/K6kdb8CfWaHqJHtaJR5+WWAhU7MISlI/W0y4g2tVjq7wokAFVXnB9BevGP/HdqPcr1uG5WXWOPSKnRFfOKhy4r/+dPAzglVayjQ42Yf93YGfXgXanlNOskqTNCXXsmvD2POs3OToSHvWol72akYByneG6TLGYP+grWcDFEx6pDRcLtpd1ITMHI7X1BWZOIfXOUdSo3ioi8yiURVyQ2O+8Bxm0Kii46zJMG7MNm3Ym+/XxpoeIH8dyntDzODgoG9gd1zQMdvU2SJIwq8O0MK9nKOtF6EMEt2RGgqNfkEkajq3dNnAnkkaEplUmGw4BKNnpj2JxkBpqcRZFiWeKoqaaz38n10NCpK62lL4haS4KhjIWb+9rf8xwq9ShQkvy6tNBkeRlbiaWhmEI+F8Qdhln/PKBH2cbXtASJqhU/MePkyUqDG 4Vh5t/BV cmktjz+0iBcC5cYNJ0+ZZLlLelwnuo6Z8lHegUTS8rpPZTDa61Y1pj9I/48Py1s1F+donSO5I1Aeto479Ps3SyBm7YbDOZGywLyb3eoX9pJ5kZ573z9MghDLDiKeGHBxSgE8Ms9HGNR8cUy9XhArrrr5McKJuuhdNUaorvnBIvgK+M1PdamYrIIAJEV6xXQ7BS0E2H5geGlEMUq3xyZRYZgLEKwJ/d56kiUNfQmU4Eq46MHAE6BG1dMr6eLOaR/mer9itHSEfoOeocItYshuMeOOXekHUeMKMav1U/qF3cY6W9dUZdXavUtDB8HMYWZiZizOTUtnT8JdmH/oBrYq9O8SfCWWur3BJjMWrcd2pbFCDtUoRFpww08Ndd2wmRxcCjoXM 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: From: Carlos Maiolino Hello folks. This is a new version of the implementation of tmpfs quota, below is the serie's changelog, hopefully it make it easier to track down changes done on the past 3 versions. I've rebased this series on Linus today's TOT, hopefully it prevents conflicts. I also removed Jan Kara's RwB from patch 4, due to changes in functions definition. Changelog: V6: - Fix build warning (patch 4) by defining shmem_mark_dquot_dirty() and shmem_dquot_write_info() as static functions - Add a patch to fix syzkaller's reports. Once Patch 7 is applied, I didn't manage to reproduce the syzkaller issues anymore, so, added a Tested-by: tag V5: - Update shmem_parse_one() to prevent quota enablement in unprivileged mounts. V4: - Rebase to fix conflicts against 'noswap' mount option. Original cover below. people have been asking for quota support in tmpfs many times in the past mostly to avoid one malicious user, or misbehaving user/program to consume all of the system memory. This has been partially solved with the size mount option, but some problems still prevail. One of the problems is the fact that /dev/shm is still generally unprotected with this and another is administration overhead of managing multiple tmpfs mounts and lack of more fine grained control. Quota support can solve all these problems in a somewhat standard way people are already familiar with from regular file systems. It can give us more fine grained control over how much memory user/groups can consume. Additionally it can also control number of inodes and with special quota mount options introduced with a second patch we can set global limits allowing us to replace the size mount option with quota entirely. Currently the standard userspace quota tools (quota, xfs_quota) are only using quotactl ioctl which is expecting a block device. I patched quota [1] and xfs_quota [2] to use quotactl_fd in case we want to run the tools on mount point directory to work nicely with tmpfs. The implementation was tested on patched version of xfstests [3]. [1] https://github.com/lczerner/quota/tree/quotactl_fd_support [2] https://github.com/lczerner/xfsprogs/tree/quotactl_fd_support [3] https://github.com/lczerner/xfstests/tree/tmpfs_quota_support Carlos Maiolino (3): shmem: make shmem_get_inode() return ERR_PTR instead of NULL shmem: prepare shmem quota infrastructure shmem: quota support Hugh Dickins (1): shmem: fix quota lock nesting in huge hole handling Jan Kara (1): quota: Check presence of quota operation structures instead of ->quota_read and ->quota_write callbacks Lukas Czerner (2): shmem: make shmem_inode_acct_block() return error shmem: Add default quota limit mount options Documentation/filesystems/tmpfs.rst | 31 ++ fs/Kconfig | 12 + fs/quota/dquot.c | 2 +- include/linux/shmem_fs.h | 28 ++ include/uapi/linux/quota.h | 1 + mm/Makefile | 2 +- mm/huge_memory.c | 6 +- mm/khugepaged.c | 13 +- mm/shmem.c | 495 +++++++++++++++++++++------- mm/shmem_quota.c | 350 ++++++++++++++++++++ 10 files changed, 812 insertions(+), 128 deletions(-) create mode 100644 mm/shmem_quota.c Signed-off-by: Carlos Maiolino