summaryrefslogtreecommitdiffstats
path: root/sys/ufs/ffs
diff options
context:
space:
mode:
authortegge <tegge@FreeBSD.org>2006-05-05 20:10:04 +0000
committertegge <tegge@FreeBSD.org>2006-05-05 20:10:04 +0000
commitb40c756c61dc2e35b9c86fbaab79c618cbe1288f (patch)
tree0f21b3b1482691a8dde7f3417059aeed7b24b3fc /sys/ufs/ffs
parent70578f430db0cf7d896e18a5c717a092b861b326 (diff)
downloadFreeBSD-src-b40c756c61dc2e35b9c86fbaab79c618cbe1288f.zip
FreeBSD-src-b40c756c61dc2e35b9c86fbaab79c618cbe1288f.tar.gz
Turn off disk quotas for snapshot files.
Diffstat (limited to 'sys/ufs/ffs')
-rw-r--r--sys/ufs/ffs/ffs_snapshot.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/ufs/ffs/ffs_snapshot.c b/sys/ufs/ffs/ffs_snapshot.c
index 66df8d6..78862b5 100644
--- a/sys/ufs/ffs/ffs_snapshot.c
+++ b/sys/ufs/ffs/ffs_snapshot.c
@@ -36,6 +36,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_quota.h"
+
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
@@ -364,6 +366,18 @@ restart:
if (error)
goto out;
}
+#ifdef QUOTA
+ /*
+ * Turn off disk quotas for snapshot file.
+ */
+ (void) chkdq(ip, -DIP(ip, i_blocks), KERNCRED, FORCE);
+ for (i = 0; i < MAXQUOTAS; i++) {
+ if (ip->i_dquot[i] != NODQUOT) {
+ dqrele(vp, ip->i_dquot[i]);
+ ip->i_dquot[i] = NODQUOT;
+ }
+ }
+#endif
/*
* Change inode to snapshot type file.
*/
@@ -1634,6 +1648,13 @@ ffs_snapremove(vp)
ip->i_flags &= ~SF_SNAPSHOT;
DIP_SET(ip, i_flags, ip->i_flags);
ip->i_flag |= IN_CHANGE | IN_UPDATE;
+#ifdef QUOTA
+ /*
+ * Reenable disk quotas for ex-snapshot file.
+ */
+ if (!getinoquota(ip))
+ (void) chkdq(ip, DIP(ip, i_blocks), KERNCRED, FORCE);
+#endif
}
/*
OpenPOWER on IntegriCloud