/*
- * Copyright (c) 1995, 2001, 2004 Silicon Graphics, Inc. All Rights Reserved.
+ * Copyright (c) 1995, 2001, 2004, 2005 Silicon Graphics, Inc.
+ * All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2.1 of the GNU Lesser General Public License
#define Q_XSETQLIM XQM_CMD(4) /* set disk limits */
#define Q_XGETQSTAT XQM_CMD(5) /* get quota subsystem status */
#define Q_XQUOTARM XQM_CMD(6) /* free disk space used by dquots */
+#define Q_XQUOTASYNC XQM_CMD(7) /* delalloc flush, updates dquots */
/*
* fs_disk_quota structure:
__s32 d_itimer; /* zero if within inode limits */
/* if not, we refuse service */
__s32 d_btimer; /* similar to above; for disk blocks */
- __u16 d_iwarns; /* # warnings issued wrt num inodes */
- __u16 d_bwarns; /* # warnings issued wrt disk blocks */
+ __u16 d_iwarns; /* # warnings issued wrt num inodes */
+ __u16 d_bwarns; /* # warnings issued wrt disk blocks */
__s32 d_padding2; /* padding2 - for future use */
__u64 d_rtb_hardlimit;/* absolute limit on realtime blks */
__u64 d_rtb_softlimit;/* preferred limit on RT disk blks */
__u64 d_rtbcount; /* # realtime blocks owned */
__s32 d_rtbtimer; /* similar to above; for RT disk blks */
- __u16 d_rtbwarns; /* # warnings issued wrt RT disk blks */
- __s16 d_padding3; /* padding3 - for future use */
+ __u16 d_rtbwarns; /* # warnings issued wrt RT disk blks */
+ __s16 d_padding3; /* padding3 - for future use */
char d_padding4[8]; /* yet more padding */
} fs_disk_quota_t;
#define FS_DQ_ISOFT (1<<0)
#define FS_DQ_IHARD (1<<1)
#define FS_DQ_BSOFT (1<<2)
-#define FS_DQ_BHARD (1<<3)
+#define FS_DQ_BHARD (1<<3)
#define FS_DQ_RTBSOFT (1<<4)
#define FS_DQ_RTBHARD (1<<5)
#define FS_DQ_LIMIT_MASK (FS_DQ_ISOFT | FS_DQ_IHARD | FS_DQ_BSOFT | \
* These timers can only be set in super user's dquot. For others, timers are
* automatically started and stopped. Superusers timer values set the limits
* for the rest. In case these values are zero, the DQ_{F,B}TIMELIMIT values
- * defined below are used.
+ * defined below are used.
* These values also apply only to the d_fieldmask field for Q_XSETQLIM.
*/
#define FS_DQ_BTIMER (1<<6)
#define FS_DQ_ITIMER (1<<7)
-#define FS_DQ_RTBTIMER (1<<8)
+#define FS_DQ_RTBTIMER (1<<8)
#define FS_DQ_TIMER_MASK (FS_DQ_BTIMER | FS_DQ_ITIMER | FS_DQ_RTBTIMER)
/*
fs_qfilestat_t qs_uquota; /* user quota storage information */
fs_qfilestat_t qs_gquota; /* group quota storage information */
__u32 qs_incoredqs; /* number of dquots incore */
- __s32 qs_btimelimit; /* limit for blks timer */
- __s32 qs_itimelimit; /* limit for inodes timer */
- __s32 qs_rtbtimelimit;/* limit for rt blks timer */
+ __s32 qs_btimelimit; /* limit for blks timer */
+ __s32 qs_itimelimit; /* limit for inodes timer */
+ __s32 qs_rtbtimelimit;/* limit for rt blks timer */
__u16 qs_bwarnlimit; /* limit for num warnings */
__u16 qs_iwarnlimit; /* limit for num warnings */
} fs_quota_stat_t;
if (type & XFS_USER_QUOTA) {
fs_cursor_initialise(dir, FS_MOUNT_POINT, &cursor);
- while ((mount = fs_cursor_next_entry(&cursor)))
+ while ((mount = fs_cursor_next_entry(&cursor))) {
+ xfsquotactl(XFS_QSYNC, mount->fs_name,
+ XFS_USER_QUOTA, 0, NULL);
report_user_mount(fp, form, mount,
lower, upper, flags);
+ }
}
if (type & XFS_GROUP_QUOTA) {
fs_cursor_initialise(dir, FS_MOUNT_POINT, &cursor);
- while ((mount = fs_cursor_next_entry(&cursor)))
+ while ((mount = fs_cursor_next_entry(&cursor))) {
+ xfsquotactl(XFS_QSYNC, mount->fs_name,
+ XFS_GROUP_QUOTA, 0, NULL);
report_group_mount(fp, form, mount,
lower, upper, flags);
+ }
}
if (type & XFS_PROJ_QUOTA) {
fs_cursor_initialise(dir, FS_MOUNT_POINT, &cursor);
- while ((mount = fs_cursor_next_entry(&cursor)))
+ while ((mount = fs_cursor_next_entry(&cursor))) {
+ xfsquotactl(XFS_QSYNC, mount->fs_name,
+ XFS_PROJ_QUOTA, 0, NULL);
report_project_mount(fp, form, mount,
lower, upper, flags);
+ }
}
}