1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * Copyright (c) 1982, 1986 Regents of the University of California. 3*53ee8cc1Swenshuai.xi * All rights reserved. 4*53ee8cc1Swenshuai.xi * 5*53ee8cc1Swenshuai.xi * This code is derived from software contributed to Berkeley by 6*53ee8cc1Swenshuai.xi * Robert Elz at The University of Melbourne. 7*53ee8cc1Swenshuai.xi * 8*53ee8cc1Swenshuai.xi * Redistribution and use in source and binary forms, with or without 9*53ee8cc1Swenshuai.xi * modification, are permitted provided that the following conditions 10*53ee8cc1Swenshuai.xi * are met: 11*53ee8cc1Swenshuai.xi * 1. Redistributions of source code must retain the above copyright 12*53ee8cc1Swenshuai.xi * notice, this list of conditions and the following disclaimer. 13*53ee8cc1Swenshuai.xi * 2. Redistributions in binary form must reproduce the above copyright 14*53ee8cc1Swenshuai.xi * notice, this list of conditions and the following disclaimer in the 15*53ee8cc1Swenshuai.xi * documentation and/or other materials provided with the distribution. 16*53ee8cc1Swenshuai.xi * 3. Neither the name of the University nor the names of its contributors 17*53ee8cc1Swenshuai.xi * may be used to endorse or promote products derived from this software 18*53ee8cc1Swenshuai.xi * without specific prior written permission. 19*53ee8cc1Swenshuai.xi * 20*53ee8cc1Swenshuai.xi * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21*53ee8cc1Swenshuai.xi * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22*53ee8cc1Swenshuai.xi * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23*53ee8cc1Swenshuai.xi * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24*53ee8cc1Swenshuai.xi * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25*53ee8cc1Swenshuai.xi * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26*53ee8cc1Swenshuai.xi * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27*53ee8cc1Swenshuai.xi * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28*53ee8cc1Swenshuai.xi * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29*53ee8cc1Swenshuai.xi * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30*53ee8cc1Swenshuai.xi * SUCH DAMAGE. 31*53ee8cc1Swenshuai.xi * 32*53ee8cc1Swenshuai.xi * Version: $Id: quota.h,v 2.0 1996/11/17 16:48:14 mvw Exp mvw $ 33*53ee8cc1Swenshuai.xi */ 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi #ifndef _LINUX_QUOTA_ 36*53ee8cc1Swenshuai.xi #define _LINUX_QUOTA_ 37*53ee8cc1Swenshuai.xi 38*53ee8cc1Swenshuai.xi #include <linux/errno.h> 39*53ee8cc1Swenshuai.xi #include <linux/types.h> 40*53ee8cc1Swenshuai.xi 41*53ee8cc1Swenshuai.xi #define __DQUOT_VERSION__ "dquot_6.5.1" 42*53ee8cc1Swenshuai.xi #define __DQUOT_NUM_VERSION__ 6*10000+5*100+1 43*53ee8cc1Swenshuai.xi 44*53ee8cc1Swenshuai.xi typedef __kernel_uid32_t qid_t; /* Type in which we store ids in memory */ 45*53ee8cc1Swenshuai.xi typedef __u64 qsize_t; /* Type in which we store sizes */ 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi /* Size of blocks in which are counted size limits */ 48*53ee8cc1Swenshuai.xi #define QUOTABLOCK_BITS 10 49*53ee8cc1Swenshuai.xi #define QUOTABLOCK_SIZE (1 << QUOTABLOCK_BITS) 50*53ee8cc1Swenshuai.xi 51*53ee8cc1Swenshuai.xi /* Conversion routines from and to quota blocks */ 52*53ee8cc1Swenshuai.xi #define qb2kb(x) ((x) << (QUOTABLOCK_BITS-10)) 53*53ee8cc1Swenshuai.xi #define kb2qb(x) ((x) >> (QUOTABLOCK_BITS-10)) 54*53ee8cc1Swenshuai.xi #define toqb(x) (((x) + QUOTABLOCK_SIZE - 1) >> QUOTABLOCK_BITS) 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi #define MAXQUOTAS 2 57*53ee8cc1Swenshuai.xi #define USRQUOTA 0 /* element used for user quotas */ 58*53ee8cc1Swenshuai.xi #define GRPQUOTA 1 /* element used for group quotas */ 59*53ee8cc1Swenshuai.xi 60*53ee8cc1Swenshuai.xi /* 61*53ee8cc1Swenshuai.xi * Definitions for the default names of the quotas files. 62*53ee8cc1Swenshuai.xi */ 63*53ee8cc1Swenshuai.xi #define INITQFNAMES { \ 64*53ee8cc1Swenshuai.xi "user", /* USRQUOTA */ \ 65*53ee8cc1Swenshuai.xi "group", /* GRPQUOTA */ \ 66*53ee8cc1Swenshuai.xi "undefined", \ 67*53ee8cc1Swenshuai.xi }; 68*53ee8cc1Swenshuai.xi 69*53ee8cc1Swenshuai.xi /* 70*53ee8cc1Swenshuai.xi * Command definitions for the 'quotactl' system call. 71*53ee8cc1Swenshuai.xi * The commands are broken into a main command defined below 72*53ee8cc1Swenshuai.xi * and a subcommand that is used to convey the type of 73*53ee8cc1Swenshuai.xi * quota that is being manipulated (see above). 74*53ee8cc1Swenshuai.xi */ 75*53ee8cc1Swenshuai.xi #define SUBCMDMASK 0x00ff 76*53ee8cc1Swenshuai.xi #define SUBCMDSHIFT 8 77*53ee8cc1Swenshuai.xi #define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK)) 78*53ee8cc1Swenshuai.xi 79*53ee8cc1Swenshuai.xi #define Q_SYNC 0x800001 /* sync disk copy of a filesystems quotas */ 80*53ee8cc1Swenshuai.xi #define Q_QUOTAON 0x800002 /* turn quotas on */ 81*53ee8cc1Swenshuai.xi #define Q_QUOTAOFF 0x800003 /* turn quotas off */ 82*53ee8cc1Swenshuai.xi #define Q_GETFMT 0x800004 /* get quota format used on given filesystem */ 83*53ee8cc1Swenshuai.xi #define Q_GETINFO 0x800005 /* get information about quota files */ 84*53ee8cc1Swenshuai.xi #define Q_SETINFO 0x800006 /* set information about quota files */ 85*53ee8cc1Swenshuai.xi #define Q_GETQUOTA 0x800007 /* get user quota structure */ 86*53ee8cc1Swenshuai.xi #define Q_SETQUOTA 0x800008 /* set user quota structure */ 87*53ee8cc1Swenshuai.xi 88*53ee8cc1Swenshuai.xi /* 89*53ee8cc1Swenshuai.xi * Quota structure used for communication with userspace via quotactl 90*53ee8cc1Swenshuai.xi * Following flags are used to specify which fields are valid 91*53ee8cc1Swenshuai.xi */ 92*53ee8cc1Swenshuai.xi #define QIF_BLIMITS 1 93*53ee8cc1Swenshuai.xi #define QIF_SPACE 2 94*53ee8cc1Swenshuai.xi #define QIF_ILIMITS 4 95*53ee8cc1Swenshuai.xi #define QIF_INODES 8 96*53ee8cc1Swenshuai.xi #define QIF_BTIME 16 97*53ee8cc1Swenshuai.xi #define QIF_ITIME 32 98*53ee8cc1Swenshuai.xi #define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS) 99*53ee8cc1Swenshuai.xi #define QIF_USAGE (QIF_SPACE | QIF_INODES) 100*53ee8cc1Swenshuai.xi #define QIF_TIMES (QIF_BTIME | QIF_ITIME) 101*53ee8cc1Swenshuai.xi #define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES) 102*53ee8cc1Swenshuai.xi 103*53ee8cc1Swenshuai.xi struct if_dqblk { 104*53ee8cc1Swenshuai.xi __u64 dqb_bhardlimit; 105*53ee8cc1Swenshuai.xi __u64 dqb_bsoftlimit; 106*53ee8cc1Swenshuai.xi __u64 dqb_curspace; 107*53ee8cc1Swenshuai.xi __u64 dqb_ihardlimit; 108*53ee8cc1Swenshuai.xi __u64 dqb_isoftlimit; 109*53ee8cc1Swenshuai.xi __u64 dqb_curinodes; 110*53ee8cc1Swenshuai.xi __u64 dqb_btime; 111*53ee8cc1Swenshuai.xi __u64 dqb_itime; 112*53ee8cc1Swenshuai.xi __u32 dqb_valid; 113*53ee8cc1Swenshuai.xi }; 114*53ee8cc1Swenshuai.xi 115*53ee8cc1Swenshuai.xi /* 116*53ee8cc1Swenshuai.xi * Structure used for setting quota information about file via quotactl 117*53ee8cc1Swenshuai.xi * Following flags are used to specify which fields are valid 118*53ee8cc1Swenshuai.xi */ 119*53ee8cc1Swenshuai.xi #define IIF_BGRACE 1 120*53ee8cc1Swenshuai.xi #define IIF_IGRACE 2 121*53ee8cc1Swenshuai.xi #define IIF_FLAGS 4 122*53ee8cc1Swenshuai.xi #define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS) 123*53ee8cc1Swenshuai.xi 124*53ee8cc1Swenshuai.xi struct if_dqinfo { 125*53ee8cc1Swenshuai.xi __u64 dqi_bgrace; 126*53ee8cc1Swenshuai.xi __u64 dqi_igrace; 127*53ee8cc1Swenshuai.xi __u32 dqi_flags; 128*53ee8cc1Swenshuai.xi __u32 dqi_valid; 129*53ee8cc1Swenshuai.xi }; 130*53ee8cc1Swenshuai.xi 131*53ee8cc1Swenshuai.xi /* 132*53ee8cc1Swenshuai.xi * Definitions for quota netlink interface 133*53ee8cc1Swenshuai.xi */ 134*53ee8cc1Swenshuai.xi #define QUOTA_NL_NOWARN 0 135*53ee8cc1Swenshuai.xi #define QUOTA_NL_IHARDWARN 1 /* Inode hardlimit reached */ 136*53ee8cc1Swenshuai.xi #define QUOTA_NL_ISOFTLONGWARN 2 /* Inode grace time expired */ 137*53ee8cc1Swenshuai.xi #define QUOTA_NL_ISOFTWARN 3 /* Inode softlimit reached */ 138*53ee8cc1Swenshuai.xi #define QUOTA_NL_BHARDWARN 4 /* Block hardlimit reached */ 139*53ee8cc1Swenshuai.xi #define QUOTA_NL_BSOFTLONGWARN 5 /* Block grace time expired */ 140*53ee8cc1Swenshuai.xi #define QUOTA_NL_BSOFTWARN 6 /* Block softlimit reached */ 141*53ee8cc1Swenshuai.xi 142*53ee8cc1Swenshuai.xi enum { 143*53ee8cc1Swenshuai.xi QUOTA_NL_C_UNSPEC, 144*53ee8cc1Swenshuai.xi QUOTA_NL_C_WARNING, 145*53ee8cc1Swenshuai.xi __QUOTA_NL_C_MAX, 146*53ee8cc1Swenshuai.xi }; 147*53ee8cc1Swenshuai.xi #define QUOTA_NL_C_MAX (__QUOTA_NL_C_MAX - 1) 148*53ee8cc1Swenshuai.xi 149*53ee8cc1Swenshuai.xi enum { 150*53ee8cc1Swenshuai.xi QUOTA_NL_A_UNSPEC, 151*53ee8cc1Swenshuai.xi QUOTA_NL_A_QTYPE, 152*53ee8cc1Swenshuai.xi QUOTA_NL_A_EXCESS_ID, 153*53ee8cc1Swenshuai.xi QUOTA_NL_A_WARNING, 154*53ee8cc1Swenshuai.xi QUOTA_NL_A_DEV_MAJOR, 155*53ee8cc1Swenshuai.xi QUOTA_NL_A_DEV_MINOR, 156*53ee8cc1Swenshuai.xi QUOTA_NL_A_CAUSED_ID, 157*53ee8cc1Swenshuai.xi __QUOTA_NL_A_MAX, 158*53ee8cc1Swenshuai.xi }; 159*53ee8cc1Swenshuai.xi #define QUOTA_NL_A_MAX (__QUOTA_NL_A_MAX - 1) 160*53ee8cc1Swenshuai.xi 161*53ee8cc1Swenshuai.xi 162*53ee8cc1Swenshuai.xi 163*53ee8cc1Swenshuai.xi # /* nodep */ include <sys/cdefs.h> 164*53ee8cc1Swenshuai.xi 165*53ee8cc1Swenshuai.xi __BEGIN_DECLS 166*53ee8cc1Swenshuai.xi long quotactl __P ((unsigned int, const char *, int, caddr_t)); 167*53ee8cc1Swenshuai.xi __END_DECLS 168*53ee8cc1Swenshuai.xi 169*53ee8cc1Swenshuai.xi #endif /* _QUOTA_ */ 170