1919STATIC void
2020xfs_fill_statvfs_from_dquot (
2121 struct kstatfs * statp ,
22+ struct xfs_inode * ip ,
2223 struct xfs_dquot * dqp )
2324{
25+ struct xfs_dquot_res * blkres = & dqp -> q_blk ;
2426 uint64_t limit ;
2527
26- limit = dqp -> q_blk .softlimit ?
27- dqp -> q_blk .softlimit :
28- dqp -> q_blk .hardlimit ;
29- if (limit && statp -> f_blocks > limit ) {
30- statp -> f_blocks = limit ;
31- statp -> f_bfree = statp -> f_bavail =
32- (statp -> f_blocks > dqp -> q_blk .reserved ) ?
33- (statp -> f_blocks - dqp -> q_blk .reserved ) : 0 ;
28+ if (XFS_IS_REALTIME_MOUNT (ip -> i_mount ) &&
29+ (ip -> i_diflags & (XFS_DIFLAG_RTINHERIT | XFS_DIFLAG_REALTIME )))
30+ blkres = & dqp -> q_rtb ;
31+
32+ limit = blkres -> softlimit ?
33+ blkres -> softlimit :
34+ blkres -> hardlimit ;
35+ if (limit ) {
36+ uint64_t remaining = 0 ;
37+
38+ if (limit > blkres -> reserved )
39+ remaining = limit - blkres -> reserved ;
40+
41+ statp -> f_blocks = min (statp -> f_blocks , limit );
42+ statp -> f_bfree = min (statp -> f_bfree , remaining );
43+ statp -> f_bavail = min (statp -> f_bavail , remaining );
3444 }
3545
3646 limit = dqp -> q_ino .softlimit ?
3747 dqp -> q_ino .softlimit :
3848 dqp -> q_ino .hardlimit ;
39- if (limit && statp -> f_files > limit ) {
40- statp -> f_files = limit ;
41- statp -> f_ffree =
42- (statp -> f_files > dqp -> q_ino .reserved ) ?
43- (statp -> f_files - dqp -> q_ino .reserved ) : 0 ;
49+ if (limit ) {
50+ uint64_t remaining = 0 ;
51+
52+ if (limit > dqp -> q_ino .reserved )
53+ remaining = limit - dqp -> q_ino .reserved ;
54+
55+ statp -> f_files = min (statp -> f_files , limit );
56+ statp -> f_ffree = min (statp -> f_ffree , remaining );
4457 }
4558}
4659
@@ -61,7 +74,7 @@ xfs_qm_statvfs(
6174 struct xfs_dquot * dqp ;
6275
6376 if (!xfs_qm_dqget (mp , ip -> i_projid , XFS_DQTYPE_PROJ , false, & dqp )) {
64- xfs_fill_statvfs_from_dquot (statp , dqp );
77+ xfs_fill_statvfs_from_dquot (statp , ip , dqp );
6578 xfs_qm_dqput (dqp );
6679 }
6780}
0 commit comments