mbox series

[V6,0/7] shmem: Add user and group quota support for tmpfs

Message ID 20230725144510.253763-1-cem@kernel.org (mailing list archive)
Headers show
Series shmem: Add user and group quota support for tmpfs | expand

Message

Carlos Maiolino July 25, 2023, 2:45 p.m. UTC
From: Carlos Maiolino <cem@kernel.org>

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 <cmaiolino@redhat.com>

Comments

Christian Brauner July 25, 2023, 5:33 p.m. UTC | #1
On Tue, 25 Jul 2023 16:45:03 +0200, cem@kernel.org wrote:
> 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.
> 
> [...]

Applied to the vfs.tmpfs branch of the vfs/vfs.git tree.
Patches in the vfs.tmpfs branch should appear in linux-next soon.

Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.

It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.

Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs.tmpfs

[1/7] shmem: make shmem_inode_acct_block() return error
      https://git.kernel.org/vfs/vfs/c/fd612a41ed54
[2/7] shmem: make shmem_get_inode() return ERR_PTR instead of NULL
      https://git.kernel.org/vfs/vfs/c/91f1d62b97b4
[3/7] quota: Check presence of quota operation structures instead of ->quota_read and ->quota_write callbacks
      https://git.kernel.org/vfs/vfs/c/641c3cdf05e0
[4/7] shmem: prepare shmem quota infrastructure
      https://git.kernel.org/vfs/vfs/c/8286a5c8264a
[5/7] shmem: quota support
      https://git.kernel.org/vfs/vfs/c/9a9f8f590f6d
[6/7] shmem: Add default quota limit mount options
      https://git.kernel.org/vfs/vfs/c/fbf5fbc5ed0e
[7/7] shmem: fix quota lock nesting in huge hole handling
      https://git.kernel.org/vfs/vfs/c/5da76f81c519