From patchwork Thu Apr 20 08:03:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlos Maiolino X-Patchwork-Id: 13218084 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 063ABC77B78 for ; Thu, 20 Apr 2023 08:04:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5F83F900003; Thu, 20 Apr 2023 04:04:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5A795900002; Thu, 20 Apr 2023 04:04:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 49922900003; Thu, 20 Apr 2023 04:04:09 -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 38EFE900002 for ; Thu, 20 Apr 2023 04:04:09 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id C2907ABDE1 for ; Thu, 20 Apr 2023 08:04:08 +0000 (UTC) X-FDA: 80701031376.01.49FBB46 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf03.hostedemail.com (Postfix) with ESMTP id 2885B20023 for ; Thu, 20 Apr 2023 08:04:05 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=erTaHao8; spf=pass (imf03.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=1681977846; 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=jVdAaw+tgXX48vBCAVder9oPyOtlHrP8CFGBFnG1AQQ=; b=CwWnplngzWRm6K+xjqFnDmTDtJxbLztNRL05LCS2xl2MYbgv5IKoUzLk+JrAY5qtChUz+f AexfNR6SG930pOSWZLZwzNtMMayrvrykr71gzH2tmkJJj3pTLqgmYAIOi/v1smmQ+UD9CH Tz8k4Ibp9ykD8+lEPBVVvtOJtoIzXDQ= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=erTaHao8; spf=pass (imf03.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=1681977846; a=rsa-sha256; cv=none; b=7UiJRXsYYadgz0aeSK7YPZ7gy6qhi6COGDPAXykUUi31X4uMf3A4x8H0YWX0dPW7kVlzPU WezWmNCBECN8qrFasSKMjkjcgZa/0/Cnwoqn1/75CTOSoeVz2WTfLfNbKckqhO3JUS46HO rGqA0vsiX25LHy2aY5v4CdRJOf8MBPM= Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 2097B645C4; Thu, 20 Apr 2023 08:04:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0E154C433D2; Thu, 20 Apr 2023 08:04:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681977844; bh=XeWdmkyc9D5aTf3bX5LVoYzWJtaddA3mhOd1N60Bjdo=; h=From:To:Cc:Subject:Date:From; b=erTaHao8Evg4+ims2BPdPuBoczHPfOSr124yKoqYMiClw2jEbMJaqW2B3TN+IzxES cfE/o0AAehouLcJXwa+jp7Fwxt2ZxAiKZc7DpGgvHBYBG9ELxNhCoPYLkUgX2+HOIj mkg+o1v0jWtfSLD/EoHXkn4urHp5CW5U+mbn+153ZeTsYTgujmbQdiW4ZW+EC6eU3i g9+RpV+Xe1ebOUvUH41V86psVgfYpq0GaFpXPB78sX93+Ej8CKy/b/VxC6hLSyci+g co0TURTjrs0sH1a/3EUTbKIaJMyoMOmeNeNemOWmgdw9iRgrnKE90/ygiCJwv2Cyke 27OGuN5oFdGHg== From: cem@kernel.org To: hughd@google.com Cc: jack@suse.cz, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, djwong@kernel.org Subject: [PATCH V2 0/6] shmem: Add user and group quota support for tmpfs Date: Thu, 20 Apr 2023 10:03:53 +0200 Message-Id: <20230420080359.2551150-1-cem@kernel.org> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 2885B20023 X-Stat-Signature: 9uizn8kt9ouw5cj6umodq6p88k9iotjp X-Rspam-User: X-HE-Tag: 1681977845-351120 X-HE-Meta: U2FsdGVkX19+HvYtOnhBLxV/6WgpMud+uNkeh3z9gQuA/MSfnElSDNhx9nK+jW/xkSac2pqvidCjtl+6XdFpYschbUMSPKF2brUmZR6KJ8KItv+N7rNLKzssAKyIjdCL4eV/Dod1edRk/nrOBa9/YxOmfgUzs7jVO6kC04NIIP2bOGoKVTuxT90Dx7wzgBMcp3UqmNYt/k+mUjY6riWfMJdhAJsuZl/lMIj2q21g3TqjhE5uwhMWVd+Hr2Uko6wjujuz1fHvZRzKFy3rR1kuqrqU0K/DU8WOK6DXKV3k9VrURBhlCXSHZ9IlylLuwKVBuBNH/0Txc85DK+AaTxT8YDpQU2dMVBE7w8hmQ+ReX9o8wxRsvlKHcUFyB7G4juyNtCBbN4QuoJPcUgcALCZzPHhQ+6Qq3JrxZT0CSKKKbhE12hbUdOBwQtjp6jvDBC8HmTkJifXVduNOVbyWkgR7//RtOUwn9I5sy+EGw3hgN3/yXQqK964aGrifFhHOcAI5UwoPlR2wl75ARjsu6d/oujaadB/0OjQq1YB8EycXpZfsmFwk89e4/mvitlrb/ZYXLio0Knx/ht2zXvq6AQM7b5XOtZ89S2HU8Ujhc2h9opvaHuTp6XmYeKiAVU2d+YfAmSE5soEWkJkBkmNU1jLYJ2et6TXyjNZM8VZldEEpsMUHF0Dt+bwJLFv+oB+8pi790GpBpW6x3h1LGbi37HMTP3wBRCmNCEgzjegU043cKU+yTeIRga9UM9NzQb5VXc/8nMNCpK4/QgXrd57RLrdCbz9sFYv3ttZ/ihecDUz2rWT8X9avC83S2Yx6yMWYv0FOViRBRQ56pRQ4VN1W3IMQxcSK9FUDNLsJA9/Zz11VeZXNmXKmeFLpT0/x5u2uQMG2Dv4accjA53a3ZLf4vtzA3FAZG5hPABqODxXmNoq7fo2Y6uwgQOXyFyBcCxeyD5CCPqIeaIZWBndfIzKXx8d pyQlp3O4 7wb4L6kBcHaAm/Hn0sKtcZPp9brp6Ir6H64Ocgp7VWHt4/HdlAHbE01o3o30IYO9qrhLq+D9wij5MPaI21Y7E9oTTiViswi7PpOr8C1BXjuJT8LI16BD224pLd8iFIHdSSFL8a16WdgJ0biSyfQHjDWiQc9wxssDC/s3fH5kQayjxVtfL7D4EpoyH9ifF9dEVS16JgB2I5Pgb4FO2COwWxsnM0sqRHun1jTLAqM+iAwVr0UWrbDxtLMa9QJVMxjgKmzMogo1vvEag8pEUm0q7mdzKExK6g3fxq9Nde5QFy4cdv563n5tGZ6WQNhraZ5p4FXmSaf+74oLy3XhXHLCBsIyZ5lr81qB+R2sM+cac16zEpls+OtYyHFqfWaiCpir9q70HpqyM/tlDaTc= 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 the version 2 of the quota support from tmpfs addressing some issues discussed on V1 and a few extra things, details are within each patch. Original cover-letter below. Hi folks. this work has been done originally by Lukas, but he left the company, so I'm taking over his work from where he left it of. This series is virtually done, and he had updated it with comments from the last version, but, I'm initially posting it as a RFC because it's been a while since he posted the last version. Most of what I did here was rebase his last work on top of current Linus's tree. Honza, there is one patch from you in this series, which I believe you had it suggested to Lukas on a previous version. The original cover-letter follows... 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 Jan Kara (1): quota: Check presence of quota operation structures instead of ->quota_read and ->quota_write callbacks Lukas Czerner (5): shmem: make shmem_inode_acct_block() return error shmem: make shmem_get_inode() return ERR_PTR instead of NULL shmem: prepare shmem quota infrastructure shmem: quota support 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/shmem.c | 473 +++++++++++++++++++++------- mm/shmem_quota.c | 327 +++++++++++++++++++ 8 files changed, 768 insertions(+), 108 deletions(-) create mode 100644 mm/shmem_quota.c Signed-off-by: Carlos Maiolino