1e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/** mkquota.h 2e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * 3e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * Interface to the quota library. 4e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * 5e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * The quota library provides interface for creating and updating the quota 6e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * files and the ext4 superblock fields. It supports the new VFS_V1 quota 7e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * format. The quota library also provides support for keeping track of quotas 8e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * in memory. 9e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * The typical way to use the quota library is as follows: 10e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * { 11e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * quota_ctx_t qctx; 12e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * 13e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * quota_init_context(&qctx, fs, -1); 14e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * { 15e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * quota_compute_usage(qctx, -1); 16e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * AND/OR 17e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * quota_data_add/quota_data_sub/quota_data_inodes(); 18e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * } 19e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * quota_write_inode(qctx, USRQUOTA); 20e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * quota_write_inode(qctx, GRPQUOTA); 21e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * quota_release_context(&qctx); 22e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * } 23e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * 24e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * This initial version does not support reading the quota files. This support 25e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * will be added in near future. 26e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * 27e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall * Aditya Kali <adityakali@google.com> 28e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall */ 29e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 30e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#ifndef __QUOTA_QUOTAIO_H__ 31e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#define __QUOTA_QUOTAIO_H__ 32e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 33e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include "ext2fs/ext2_fs.h" 34e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include "ext2fs/ext2fs.h" 35e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include "quotaio.h" 36e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#include "../e2fsck/dict.h" 37e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 38e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgralltypedef struct quota_ctx *quota_ctx_t; 39e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 40e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallstruct quota_ctx { 41e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall ext2_filsys fs; 42e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall dict_t *quota_dict[MAXQUOTAS]; 43e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall}; 44e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 45e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall/* In mkquota.c */ 46e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t quota_init_context(quota_ctx_t *qctx, ext2_filsys fs, int qtype); 47e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallvoid quota_data_inodes(quota_ctx_t qctx, struct ext2_inode *inode, ext2_ino_t ino, 48e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall int adjust); 49e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallvoid quota_data_add(quota_ctx_t qctx, struct ext2_inode *inode, ext2_ino_t ino, 50e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall qsize_t space); 51e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallvoid quota_data_sub(quota_ctx_t qctx, struct ext2_inode *inode, ext2_ino_t ino, 52e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall qsize_t space); 53e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t quota_write_inode(quota_ctx_t qctx, int qtype); 54e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t quota_update_limits(quota_ctx_t qctx, ext2_ino_t qf_ino, int type); 55e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t quota_compute_usage(quota_ctx_t qctx); 56e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallvoid quota_release_context(quota_ctx_t *qctx); 57e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 58e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t quota_remove_inode(ext2_filsys fs, int qtype); 59e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallint quota_file_exists(ext2_filsys fs, int qtype, int fmt); 60e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallvoid quota_set_sb_inum(ext2_filsys fs, ext2_ino_t ino, int qtype); 61e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t quota_compare_and_update(quota_ctx_t qctx, int qtype, 62e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall int *usage_inconsistent); 63e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall 64e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall#endif /* __QUOTA_QUOTAIO_H__ */ 65