/** mkquota.h * * Interface to the quota library. * * The quota library provides interface for creating and updating the quota * files and the ext4 superblock fields. It supports the new VFS_V1 quota * format. The quota library also provides support for keeping track of quotas * in memory. * The typical way to use the quota library is as follows: * { * quota_ctx_t qctx; * * quota_init_context(&qctx, fs, -1); * { * quota_compute_usage(qctx, -1); * AND/OR * quota_data_add/quota_data_sub/quota_data_inodes(); * } * quota_write_inode(qctx, USRQUOTA); * quota_write_inode(qctx, GRPQUOTA); * quota_release_context(&qctx); * } * * This initial version does not support reading the quota files. This support * will be added in near future. * * Aditya Kali <adityakali@google.com> */ #ifndef __QUOTA_QUOTAIO_H__ #define __QUOTA_QUOTAIO_H__ #include "ext2fs/ext2_fs.h" #include "ext2fs/ext2fs.h" #include "quotaio.h" #include "../e2fsck/dict.h" typedef struct quota_ctx *quota_ctx_t; struct quota_ctx { ext2_filsys fs; dict_t *quota_dict[MAXQUOTAS]; }; /* In mkquota.c */ errcode_t quota_init_context(quota_ctx_t *qctx, ext2_filsys fs, int qtype); void quota_data_inodes(quota_ctx_t qctx, struct ext2_inode *inode, ext2_ino_t ino, int adjust); void quota_data_add(quota_ctx_t qctx, struct ext2_inode *inode, ext2_ino_t ino, qsize_t space); void quota_data_sub(quota_ctx_t qctx, struct ext2_inode *inode, ext2_ino_t ino, qsize_t space); errcode_t quota_write_inode(quota_ctx_t qctx, int qtype); errcode_t quota_update_limits(quota_ctx_t qctx, ext2_ino_t qf_ino, int type); errcode_t quota_compute_usage(quota_ctx_t qctx); void quota_release_context(quota_ctx_t *qctx); errcode_t quota_remove_inode(ext2_filsys fs, int qtype); int quota_file_exists(ext2_filsys fs, int qtype, int fmt); void quota_set_sb_inum(ext2_filsys fs, ext2_ino_t ino, int qtype); errcode_t quota_compare_and_update(quota_ctx_t qctx, int qtype, int *usage_inconsistent); #endif /* __QUOTA_QUOTAIO_H__ */