~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/xfs/xfs_dquot.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /fs/xfs/xfs_dquot.h (Version linux-6.12-rc7) and /fs/xfs/xfs_dquot.h (Version ccs-tools-1.8.12)


  1 // SPDX-License-Identifier: GPL-2.0                 1 
  2 /*                                                
  3  * Copyright (c) 2000-2005 Silicon Graphics, I    
  4  * All Rights Reserved.                           
  5  */                                               
  6 #ifndef __XFS_DQUOT_H__                           
  7 #define __XFS_DQUOT_H__                           
  8                                                   
  9 /*                                                
 10  * Dquots are structures that hold quota infor    
 11  * much like inodes are for files. In fact, dq    
 12  * with inodes. However, dquots can also be a     
 13  * to a collection of inodes. In this respect,    
 14  * of the superblock.                             
 15  * XFS dquots exploit both those in its algori    
 16  * to not be a bottleneck when quotas are on a    
 17  * when quotas are off.                           
 18  */                                               
 19                                                   
 20 struct xfs_mount;                                 
 21 struct xfs_trans;                                 
 22                                                   
 23 enum {                                            
 24         XFS_QLOWSP_1_PCNT = 0,                    
 25         XFS_QLOWSP_3_PCNT,                        
 26         XFS_QLOWSP_5_PCNT,                        
 27         XFS_QLOWSP_MAX                            
 28 };                                                
 29                                                   
 30 struct xfs_dquot_res {                            
 31         /* Total resources allocated and reser    
 32         xfs_qcnt_t              reserved;         
 33                                                   
 34         /* Total resources allocated. */          
 35         xfs_qcnt_t              count;            
 36                                                   
 37         /* Absolute and preferred limits. */      
 38         xfs_qcnt_t              hardlimit;        
 39         xfs_qcnt_t              softlimit;        
 40                                                   
 41         /*                                        
 42          * For root dquots, this is the defaul    
 43          * Otherwise, this is when the quota g    
 44          * in seconds since the Unix epoch.       
 45          */                                       
 46         time64_t                timer;            
 47 };                                                
 48                                                   
 49 static inline bool                                
 50 xfs_dquot_res_over_limits(                        
 51         const struct xfs_dquot_res      *qres)    
 52 {                                                 
 53         if ((qres->softlimit && qres->softlimi    
 54             (qres->hardlimit && qres->hardlimi    
 55                 return true;                      
 56         return false;                             
 57 }                                                 
 58                                                   
 59 /*                                                
 60  * The incore dquot structure                     
 61  */                                               
 62 struct xfs_dquot {                                
 63         struct list_head        q_lru;            
 64         struct xfs_mount        *q_mount;         
 65         xfs_dqtype_t            q_type;           
 66         uint16_t                q_flags;          
 67         xfs_dqid_t              q_id;             
 68         uint                    q_nrefs;          
 69         int                     q_bufoffset;      
 70         xfs_daddr_t             q_blkno;          
 71         xfs_fileoff_t           q_fileoffset;     
 72                                                   
 73         struct xfs_dquot_res    q_blk;  /* reg    
 74         struct xfs_dquot_res    q_ino;  /* ino    
 75         struct xfs_dquot_res    q_rtb;  /* rea    
 76                                                   
 77         struct xfs_dq_logitem   q_logitem;        
 78                                                   
 79         xfs_qcnt_t              q_prealloc_lo_    
 80         xfs_qcnt_t              q_prealloc_hi_    
 81         int64_t                 q_low_space[XF    
 82         struct mutex            q_qlock;          
 83         struct completion       q_flush;          
 84         atomic_t                q_pincount;       
 85         struct wait_queue_head  q_pinwait;        
 86 };                                                
 87                                                   
 88 /*                                                
 89  * Lock hierarchy for q_qlock:                    
 90  *      XFS_QLOCK_NORMAL is the implicit defau    
 91  *      XFS_QLOCK_NESTED is the dquot with the    
 92  */                                               
 93 enum {                                            
 94         XFS_QLOCK_NORMAL = 0,                     
 95         XFS_QLOCK_NESTED,                         
 96 };                                                
 97                                                   
 98 /*                                                
 99  * Manage the q_flush completion queue embedde    
100  * queue synchronizes processes attempting to     
101  * disk.                                          
102  */                                               
103 static inline void xfs_dqflock(struct xfs_dquo    
104 {                                                 
105         wait_for_completion(&dqp->q_flush);       
106 }                                                 
107                                                   
108 static inline bool xfs_dqflock_nowait(struct x    
109 {                                                 
110         return try_wait_for_completion(&dqp->q    
111 }                                                 
112                                                   
113 static inline void xfs_dqfunlock(struct xfs_dq    
114 {                                                 
115         complete(&dqp->q_flush);                  
116 }                                                 
117                                                   
118 static inline int xfs_dqlock_nowait(struct xfs    
119 {                                                 
120         return mutex_trylock(&dqp->q_qlock);      
121 }                                                 
122                                                   
123 static inline void xfs_dqlock(struct xfs_dquot    
124 {                                                 
125         mutex_lock(&dqp->q_qlock);                
126 }                                                 
127                                                   
128 static inline void xfs_dqunlock(struct xfs_dqu    
129 {                                                 
130         mutex_unlock(&dqp->q_qlock);              
131 }                                                 
132                                                   
133 static inline int                                 
134 xfs_dquot_type(const struct xfs_dquot *dqp)       
135 {                                                 
136         return dqp->q_type & XFS_DQTYPE_REC_MA    
137 }                                                 
138                                                   
139 static inline int xfs_this_quota_on(struct xfs    
140 {                                                 
141         switch (type) {                           
142         case XFS_DQTYPE_USER:                     
143                 return XFS_IS_UQUOTA_ON(mp);      
144         case XFS_DQTYPE_GROUP:                    
145                 return XFS_IS_GQUOTA_ON(mp);      
146         case XFS_DQTYPE_PROJ:                     
147                 return XFS_IS_PQUOTA_ON(mp);      
148         default:                                  
149                 return 0;                         
150         }                                         
151 }                                                 
152                                                   
153 static inline struct xfs_dquot *xfs_inode_dquo    
154         struct xfs_inode        *ip,              
155         xfs_dqtype_t            type)             
156 {                                                 
157         switch (type) {                           
158         case XFS_DQTYPE_USER:                     
159                 return ip->i_udquot;              
160         case XFS_DQTYPE_GROUP:                    
161                 return ip->i_gdquot;              
162         case XFS_DQTYPE_PROJ:                     
163                 return ip->i_pdquot;              
164         default:                                  
165                 return NULL;                      
166         }                                         
167 }                                                 
168                                                   
169 /* Decide if the dquot's limits are actually b    
170 static inline bool                                
171 xfs_dquot_is_enforced(                            
172         const struct xfs_dquot  *dqp)             
173 {                                                 
174         switch (xfs_dquot_type(dqp)) {            
175         case XFS_DQTYPE_USER:                     
176                 return XFS_IS_UQUOTA_ENFORCED(    
177         case XFS_DQTYPE_GROUP:                    
178                 return XFS_IS_GQUOTA_ENFORCED(    
179         case XFS_DQTYPE_PROJ:                     
180                 return XFS_IS_PQUOTA_ENFORCED(    
181         }                                         
182         ASSERT(0);                                
183         return false;                             
184 }                                                 
185                                                   
186 /*                                                
187  * Check whether a dquot is under low free spa    
188  * is enabled and enforced.                       
189  */                                               
190 static inline bool xfs_dquot_lowsp(struct xfs_    
191 {                                                 
192         int64_t freesp;                           
193                                                   
194         freesp = dqp->q_blk.hardlimit - dqp->q    
195         if (freesp < dqp->q_low_space[XFS_QLOW    
196                 return true;                      
197                                                   
198         return false;                             
199 }                                                 
200                                                   
201 void xfs_dquot_to_disk(struct xfs_disk_dquot *    
202                                                   
203 #define XFS_DQ_IS_LOCKED(dqp)   (mutex_is_lock    
204 #define XFS_DQ_IS_DIRTY(dqp)    ((dqp)->q_flag    
205                                                   
206 void            xfs_qm_dqdestroy(struct xfs_dq    
207 int             xfs_qm_dqflush(struct xfs_dquo    
208 void            xfs_qm_dqunpin_wait(struct xfs    
209 void            xfs_qm_adjust_dqtimers(struct     
210 void            xfs_qm_adjust_dqlimits(struct     
211 xfs_dqid_t      xfs_qm_id_for_quotatype(struct    
212                                 xfs_dqtype_t t    
213 int             xfs_qm_dqget(struct xfs_mount     
214                                 xfs_dqtype_t t    
215                                 struct xfs_dqu    
216 int             xfs_qm_dqget_inode(struct xfs_    
217                                 bool can_alloc    
218 int             xfs_qm_dqget_next(struct xfs_m    
219                                 xfs_dqtype_t t    
220 int             xfs_qm_dqget_uncached(struct x    
221                                 xfs_dqid_t id,    
222                                 struct xfs_dqu    
223 void            xfs_qm_dqput(struct xfs_dquot     
224                                                   
225 void            xfs_dqlock2(struct xfs_dquot *    
226 void            xfs_dqlockn(struct xfs_dqtrx *    
227                                                   
228 void            xfs_dquot_set_prealloc_limits(    
229                                                   
230 static inline struct xfs_dquot *xfs_qm_dqhold(    
231 {                                                 
232         xfs_dqlock(dqp);                          
233         dqp->q_nrefs++;                           
234         xfs_dqunlock(dqp);                        
235         return dqp;                               
236 }                                                 
237                                                   
238 time64_t xfs_dquot_set_timeout(struct xfs_moun    
239 time64_t xfs_dquot_set_grace_period(time64_t g    
240                                                   
241 void xfs_qm_init_dquot_blk(struct xfs_trans *t    
242                 type, struct xfs_buf *bp);        
243                                                   
244 #endif /* __XFS_DQUOT_H__ */                      
245                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php