svn commit: r350850 - in stable/12/sys/ufs: ffs ufs
Kirk McKusick
mckusick at FreeBSD.org
Sat Aug 10 23:03:25 UTC 2019
Author: mckusick
Date: Sat Aug 10 23:03:23 2019
New Revision: 350850
URL: https://svnweb.freebsd.org/changeset/base/350850
Log:
MFC of 350490
Set FORCE in chk[id]q when returning inodes and blocks.
Modified:
stable/12/sys/ufs/ffs/ffs_inode.c
stable/12/sys/ufs/ffs/ffs_softdep.c
stable/12/sys/ufs/ufs/ufs_quota.c
stable/12/sys/ufs/ufs/ufs_vnops.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/ufs/ffs/ffs_inode.c
==============================================================================
--- stable/12/sys/ufs/ffs/ffs_inode.c Sat Aug 10 20:08:37 2019 (r350849)
+++ stable/12/sys/ufs/ffs/ffs_inode.c Sat Aug 10 23:03:23 2019 (r350850)
@@ -256,7 +256,7 @@ ffs_truncate(vp, length, flags, cred)
if ((error = ffs_syncvnode(vp, MNT_WAIT, 0)) != 0)
return (error);
#ifdef QUOTA
- (void) chkdq(ip, -extblocks, NOCRED, 0);
+ (void) chkdq(ip, -extblocks, NOCRED, FORCE);
#endif
vinvalbuf(vp, V_ALT, 0, 0);
vn_pages_remove(vp,
@@ -609,7 +609,7 @@ done:
DIP_SET(ip, i_blocks, 0);
ip->i_flag |= IN_CHANGE;
#ifdef QUOTA
- (void) chkdq(ip, -blocksreleased, NOCRED, 0);
+ (void) chkdq(ip, -blocksreleased, NOCRED, FORCE);
#endif
return (allerror);
Modified: stable/12/sys/ufs/ffs/ffs_softdep.c
==============================================================================
--- stable/12/sys/ufs/ffs/ffs_softdep.c Sat Aug 10 20:08:37 2019 (r350849)
+++ stable/12/sys/ufs/ffs/ffs_softdep.c Sat Aug 10 23:03:23 2019 (r350850)
@@ -6670,7 +6670,7 @@ softdep_journal_freeblocks(ip, cred, length, flags)
#ifdef QUOTA
/* Reference the quotas in case the block count is wrong in the end. */
quotaref(vp, freeblks->fb_quota);
- (void) chkdq(ip, -datablocks, NOCRED, 0);
+ (void) chkdq(ip, -datablocks, NOCRED, FORCE);
#endif
freeblks->fb_chkcnt = -datablocks;
UFS_LOCK(ump);
@@ -6932,7 +6932,7 @@ softdep_setup_freeblocks(ip, length, flags)
#ifdef QUOTA
/* Reference the quotas in case the block count is wrong in the end. */
quotaref(ITOV(ip), freeblks->fb_quota);
- (void) chkdq(ip, -datablocks, NOCRED, 0);
+ (void) chkdq(ip, -datablocks, NOCRED, FORCE);
#endif
freeblks->fb_chkcnt = -datablocks;
UFS_LOCK(ump);
Modified: stable/12/sys/ufs/ufs/ufs_quota.c
==============================================================================
--- stable/12/sys/ufs/ufs/ufs_quota.c Sat Aug 10 20:08:37 2019 (r350849)
+++ stable/12/sys/ufs/ufs/ufs_quota.c Sat Aug 10 23:03:23 2019 (r350850)
@@ -159,6 +159,7 @@ chkdq(struct inode *ip, ufs2_daddr_t change, struct uc
struct vnode *vp = ITOV(ip);
int i, error, warn, do_check;
+ MPASS(cred != NOCRED || (flags & FORCE) != 0);
/*
* Disk quotas must be turned off for system files. Currently
* snapshot and quota files.
@@ -311,6 +312,7 @@ chkiq(struct inode *ip, int change, struct ucred *cred
struct dquot *dq;
int i, error, warn, do_check;
+ MPASS(cred != NOCRED || (flags & FORCE) != 0);
#ifdef DIAGNOSTIC
if ((flags & CHOWN) == 0)
chkdquot(ip);
Modified: stable/12/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- stable/12/sys/ufs/ufs/ufs_vnops.c Sat Aug 10 20:08:37 2019 (r350849)
+++ stable/12/sys/ufs/ufs/ufs_vnops.c Sat Aug 10 23:03:23 2019 (r350850)
@@ -811,8 +811,8 @@ ufs_chown(vp, uid, gid, cred, td)
ip->i_dquot[GRPQUOTA] = NODQUOT;
}
change = DIP(ip, i_blocks);
- (void) chkdq(ip, -change, cred, CHOWN);
- (void) chkiq(ip, -1, cred, CHOWN);
+ (void) chkdq(ip, -change, cred, CHOWN|FORCE);
+ (void) chkiq(ip, -1, cred, CHOWN|FORCE);
for (i = 0; i < MAXQUOTAS; i++) {
dqrele(vp, ip->i_dquot[i]);
ip->i_dquot[i] = NODQUOT;
More information about the svn-src-stable-12
mailing list