shmem: Add user and group quota support for tmpfs
Status from this message: Applied to the vfs.tmpfs branch of the vfs/vfs.git tree.
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v6 Latest7 patches 3 repliesApplied
- v56 patches 0 repliesSuperseded
- v4 posting 2/26 patches 5 repliesSuperseded
Earlier versions · 3
| Version | Posted | Patches | Replies | Status |
|---|---|---|---|---|
| v4 posting 1/2 | 6 patches | 3 replies | Superseded | |
| v2 | 6 patches | 9 replies | Superseded | |
| v1 | 6 patches | 22 replies | Superseded |
Changes in v6 from the cover letter
- 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
Patches in v6 Applied
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/7 | shmem: make shmem_inode_acct_block() return errormm/ | +10 | 0 replies | |
| 2/7 | shmem: make shmem_get_inode() return ERR_PTR instead of NULLmm/ | +119 | 0 replies | |
| 3/7 | quota: Check presence of quota operation structures instead of ->quota_read and ->quota_write callbacksfs/ | +1 | 0 replies | |
| 4/7 | shmem: prepare shmem quota infrastructurefs/ include/ include/ +2 more | +344 | 2 replies | |
| 5/7 | shmem: quota supportDocumentation/ include/ mm/ | +201 | 0 replies | |
| 6/7 | shmem: Add default quota limit mount optionsDocumentation/ include/ mm/ +1 more | +127 | 0 replies | |
| 7/7 | shmem: fix quota lock nesting in huge hole handlingmm/ mm/ mm/ | +20 | 0 replies |
Reviews trailers per patch
All 7 patches have a Reviewed-by or Acked-by.
| Patch | Jan Kara | Carlos Maiolino |
|---|---|---|
| 1/7 | R-b | |
| 2/7 | R-b | |
| 3/7 | R-b | |
| 4/7 | R-b R-b | |
| 5/7 | R-b | |
| 6/7 | R-b | |
| 7/7 | R-b T-b |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
Cover letter [PATCH V6 0/7] shmem: Add user and group quota support for tmpfs
From: Carlos Maiolino <[email protected]>
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
Signature · 1 line
2.39.2