Module Name: src Committed By: bouyer Date: Thu Feb 3 15:56:16 UTC 2011
Modified Files: src/sys/ufs/ufs [bouyer-quota2]: quota2.h quota2_subr.c ufs_quota2.c src/tests/fs/ffs/clients [bouyer-quota2]: Makefile src/usr.bin/quota [bouyer-quota2]: Makefile quota.c src/usr.sbin/repquota [bouyer-quota2]: Makefile repquota.c Log Message: factor out code to chech a quota against its limits. To generate a diff of this commit: cvs rdiff -u -r1.1.2.5 -r1.1.2.6 src/sys/ufs/ufs/quota2.h cvs rdiff -u -r1.1.2.4 -r1.1.2.5 src/sys/ufs/ufs/quota2_subr.c cvs rdiff -u -r1.1.2.6 -r1.1.2.7 src/sys/ufs/ufs/ufs_quota2.c cvs rdiff -u -r1.1.2.4 -r1.1.2.5 src/tests/fs/ffs/clients/Makefile cvs rdiff -u -r1.6.64.3 -r1.6.64.4 src/usr.bin/quota/Makefile cvs rdiff -u -r1.33.2.6 -r1.33.2.7 src/usr.bin/quota/quota.c cvs rdiff -u -r1.5.64.2 -r1.5.64.3 src/usr.sbin/repquota/Makefile cvs rdiff -u -r1.25.2.5 -r1.25.2.6 src/usr.sbin/repquota/repquota.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/ufs/ufs/quota2.h diff -u src/sys/ufs/ufs/quota2.h:1.1.2.5 src/sys/ufs/ufs/quota2.h:1.1.2.6 --- src/sys/ufs/ufs/quota2.h:1.1.2.5 Mon Jan 31 15:19:21 2011 +++ src/sys/ufs/ufs/quota2.h Thu Feb 3 15:56:16 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: quota2.h,v 1.1.2.5 2011/01/31 15:19:21 bouyer Exp $ */ +/* $NetBSD: quota2.h,v 1.1.2.6 2011/02/03 15:56:16 bouyer Exp $ */ /*- * Copyright (c) 2010 Manuel Bouyer * All rights reserved. @@ -57,7 +57,7 @@ }; /* - * Description of a user or group quota + * On-disk description of a user or group quota * These entries are keept as linked list, either in one of the hash HEAD, * or in the free list. */ @@ -100,4 +100,16 @@ void quota2_create_blk0(uint64_t, void *bp, int, int, int); void quota2_ufs_rwq2v(const struct quota2_val *, struct quota2_val *, int); void quota2_ufs_rwq2e(const struct quota2_entry *, struct quota2_entry *, int); + +int quota2_check_limit(struct quota2_val *, uint64_t, time_t); +#define QL_S_ALLOW_OK 0x00 /* below soft limit */ +#define QL_S_ALLOW_SOFT 0x01 /* over soft limit */ +#define QL_S_DENY_GRACE 0x02 /* over soft limit, grace time expired */ +#define QL_S_DENY_HARD 0x03 /* over hard limit */ + +#define QL_F_CROSS 0x80 /* crossing soft limit */ + +#define QL_STATUS(x) ((x) & 0x0f) +#define QL_FLAGS(x) ((x) & 0xf0) + #endif /* _UFS_UFS_QUOTA2_H_ */ Index: src/sys/ufs/ufs/quota2_subr.c diff -u src/sys/ufs/ufs/quota2_subr.c:1.1.2.4 src/sys/ufs/ufs/quota2_subr.c:1.1.2.5 --- src/sys/ufs/ufs/quota2_subr.c:1.1.2.4 Mon Jan 31 15:24:10 2011 +++ src/sys/ufs/ufs/quota2_subr.c Thu Feb 3 15:56:16 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: quota2_subr.c,v 1.1.2.4 2011/01/31 15:24:10 bouyer Exp $ */ +/* $NetBSD: quota2_subr.c,v 1.1.2.5 2011/02/03 15:56:16 bouyer Exp $ */ /*- * Copyright (c) 2010 Manuel Bouyer * All rights reserved. @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: quota2_subr.c,v 1.1.2.4 2011/01/31 15:24:10 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: quota2_subr.c,v 1.1.2.5 2011/02/03 15:56:16 bouyer Exp $"); #include <sys/param.h> #include <sys/time.h> @@ -108,3 +108,21 @@ needswap); d->q2e_uid = ufs_rw32(s->q2e_uid, needswap); } + +int +quota2_check_limit(struct quota2_val *q2v, uint64_t change, time_t now) +{ + if (q2v->q2v_cur + change >= q2v->q2v_hardlimit) { + if (q2v->q2v_cur < q2v->q2v_softlimit) + return (QL_F_CROSS | QL_S_DENY_HARD); + return QL_S_DENY_HARD; + } else if (q2v->q2v_cur + change >= q2v->q2v_softlimit) { + if (q2v->q2v_cur < q2v->q2v_softlimit) + return (QL_F_CROSS | QL_S_ALLOW_SOFT); + if (now > q2v->q2v_time) { + return QL_S_DENY_GRACE; + } + return QL_S_ALLOW_SOFT; + } + return QL_S_ALLOW_OK; +} Index: src/sys/ufs/ufs/ufs_quota2.c diff -u src/sys/ufs/ufs/ufs_quota2.c:1.1.2.6 src/sys/ufs/ufs/ufs_quota2.c:1.1.2.7 --- src/sys/ufs/ufs/ufs_quota2.c:1.1.2.6 Mon Jan 31 15:24:11 2011 +++ src/sys/ufs/ufs/ufs_quota2.c Thu Feb 3 15:56:16 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ufs_quota2.c,v 1.1.2.6 2011/01/31 15:24:11 bouyer Exp $ */ +/* $NetBSD: ufs_quota2.c,v 1.1.2.7 2011/02/03 15:56:16 bouyer Exp $ */ /*- * Copyright (c) 2010 Manuel Bouyer * All rights reserved. @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ufs_quota2.c,v 1.1.2.6 2011/01/31 15:24:11 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ufs_quota2.c,v 1.1.2.7 2011/02/03 15:56:16 bouyer Exp $"); #include <sys/buf.h> #include <sys/param.h> @@ -357,10 +357,11 @@ int error; struct buf *bp[MAXQUOTAS]; struct quota2_entry *q2e[MAXQUOTAS]; - struct quota2_val *q2v; + struct quota2_val *q2vp; struct dquot *dq; - uint64_t ncurblks, soft, hard; + uint64_t ncurblks; struct ufsmount *ump = ip->i_ump; + struct mount *mp = ump->um_mountp; const int needswap = UFS_MPNEEDSWAP(ump); int i; @@ -386,13 +387,13 @@ mutex_exit(&dq->dq_interlock); continue; } - q2v = &q2e[i]->q2e_val[vtype]; - ncurblks = ufs_rw64(q2v->q2v_cur, needswap); + q2vp = &q2e[i]->q2e_val[vtype]; + ncurblks = ufs_rw64(q2vp->q2v_cur, needswap); if (ncurblks < -change) ncurblks = 0; else ncurblks += change; - q2v->q2v_cur = ufs_rw64(ncurblks, needswap); + q2vp->q2v_cur = ufs_rw64(ncurblks, needswap); VOP_BWRITE(bp[i]); mutex_exit(&dq->dq_interlock); } @@ -400,40 +401,61 @@ } /* see if the allocation is allowed */ for (i = 0; i < MAXQUOTAS; i++) { - if ((flags & FORCE) != 0 || - kauth_authorize_system(cred, KAUTH_SYSTEM_FS_QUOTA, - KAUTH_REQ_SYSTEM_FS_QUOTA_NOLIMIT, - KAUTH_ARG(i), KAUTH_ARG(vtype), NULL) == 0) { - /* don't check this limit */ - continue; - } + struct quota2_val q2v; + int ql_stat; dq = ip->i_dquot[i]; if (dq == NODQUOT) continue; KASSERT(q2e[i] != NULL); - q2v = &q2e[i]->q2e_val[vtype]; - ncurblks = ufs_rw64(q2v->q2v_cur, needswap); - soft = ufs_rw64(q2v->q2v_softlimit, needswap); - hard = ufs_rw64(q2v->q2v_hardlimit, needswap); - if (ncurblks + change >= hard) { - if ((dq->dq_flags & DQ_WARN(vtype)) == 0) { - uprintf("\n%s: write failed, %s %s limit " - "reached\n", - ITOV(ip)->v_mount->mnt_stat.f_mntonname, - quotatypes[i], valtypes[vtype]); - dq->dq_flags |= DQ_WARN(vtype); - } - error = EDQUOT; - } else if (ncurblks >= soft && - time_second > ufs_rw64(q2v->q2v_time, needswap)) { - if ((dq->dq_flags & DQ_WARN(vtype)) == 0) { - uprintf("\n%s: write failed, %s %s " - "limit reached\n", - ump->um_mountp->mnt_stat.f_mntonname, - quotatypes[i], valtypes[vtype]); - dq->dq_flags |= DQ_WARN(vtype); + quota2_ufs_rwq2v(&q2e[i]->q2e_val[vtype], &q2v, needswap); + ql_stat = quota2_check_limit(&q2v, change, time_second); + + if ((flags & FORCE) == 0 && + kauth_authorize_system(cred, KAUTH_SYSTEM_FS_QUOTA, + KAUTH_REQ_SYSTEM_FS_QUOTA_NOLIMIT, + KAUTH_ARG(i), KAUTH_ARG(vtype), NULL) != 0) { + /* enforce this limit */ + switch(QL_STATUS(ql_stat)) { + case QL_S_DENY_HARD: + if ((dq->dq_flags & DQ_WARN(vtype)) == 0) { + uprintf("\n%s: write failed, %s %s " + "limit reached\n", + mp->mnt_stat.f_mntonname, + quotatypes[i], valtypes[vtype]); + dq->dq_flags |= DQ_WARN(vtype); + } + error = EDQUOT; + break; + case QL_S_DENY_GRACE: + if ((dq->dq_flags & DQ_WARN(vtype)) == 0) { + uprintf("\n%s: write failed, %s %s " + "limit reached\n", + mp->mnt_stat.f_mntonname, + quotatypes[i], valtypes[vtype]); + dq->dq_flags |= DQ_WARN(vtype); + } + error = EDQUOT; + break; + case QL_S_ALLOW_SOFT: + if ((dq->dq_flags & DQ_WARN(vtype)) == 0) { + uprintf("\n%s: warning, %s %s " + "quota exceeded\n", + mp->mnt_stat.f_mntonname, + quotatypes[i], valtypes[vtype]); + dq->dq_flags |= DQ_WARN(vtype); + } + break; } - error = EDQUOT; + } + /* + * always do this; we don't know if the allocation will + * succed or not in the end. if we don't do the allocation + * q2v_time will be ignored anyway + */ + if (ql_stat & QL_F_CROSS) { + q2v.q2v_time = time_second + q2v.q2v_grace; + quota2_ufs_rwq2v(&q2v, &q2e[i]->q2e_val[vtype], + needswap); } } @@ -444,18 +466,9 @@ continue; KASSERT(q2e[i] != NULL); if (error == 0) { - q2v = &q2e[i]->q2e_val[vtype]; - ncurblks = ufs_rw64(q2v->q2v_cur, needswap); - soft = ufs_rw64(q2v->q2v_softlimit, needswap); - if (ncurblks < soft && (ncurblks + change) >= soft) { - q2v->q2v_time = ufs_rw64(time_second + - ufs_rw64(q2v->q2v_grace, needswap), - needswap); - uprintf("\n%s: warning, %s %s quota exceeded\n", - ump->um_mountp->mnt_stat.f_mntonname, - quotatypes[i], valtypes[vtype]); - } - q2v->q2v_cur = ufs_rw64(ncurblks + change, needswap); + q2vp = &q2e[i]->q2e_val[vtype]; + ncurblks = ufs_rw64(q2vp->q2v_cur, needswap); + q2vp->q2v_cur = ufs_rw64(ncurblks + change, needswap); VOP_BWRITE(bp[i]); } else brelse(bp[i], 0); Index: src/tests/fs/ffs/clients/Makefile diff -u src/tests/fs/ffs/clients/Makefile:1.1.2.4 src/tests/fs/ffs/clients/Makefile:1.1.2.5 --- src/tests/fs/ffs/clients/Makefile:1.1.2.4 Wed Feb 2 19:17:09 2011 +++ src/tests/fs/ffs/clients/Makefile Thu Feb 3 15:56:16 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1.2.4 2011/02/02 19:17:09 bouyer Exp $ +# $NetBSD: Makefile,v 1.1.2.5 2011/02/03 15:56:16 bouyer Exp $ # .include <bsd.own.mk> @@ -9,7 +9,7 @@ PROGS= rump_quota rump_repquota rump_edquota rump_quotactl .PATH: ${NETBSDSRCDIR}/usr.bin/quota -SRCS.rump_quota= quota.c printquota.c getvfsquota.c quota_rumpops.c +SRCS.rump_quota= quota.c printquota.c getvfsquota.c quota_rumpops.c SRCS.rump_repquota= printquota.c quota_rumpops.c SRCS.rump_edquota= printquota.c getvfsquota.c quota_rumpops.c CPPFLAGS.quota.c+= -I${NETBSDSRCDIR}/usr.bin/quota @@ -29,12 +29,13 @@ CPPFLAGS.quotactl.c+= -I${NETBSDSRCDIR}/sys .PATH: ${NETBSDSRCDIR}/sys/ufs/ufs -SRCS.rump_quota+= quota2_prop.c -SRCS.rump_repquota+= quota2_prop.c quota1_subr.c +SRCS.rump_quota+= quota2_prop.c quota2_subr.c +SRCS.rump_repquota+= quota2_prop.c quota2_subr.c quota1_subr.c SRCS.rump_edquota+= quota2_prop.c quota1_subr.c SRCS.rump_quotactl+= quota2_prop.c CPPFLAGS.quota2_prop.c+=-I${NETBSDSRCDIR}/sys CPPFLAGS.quota1_subr.c+=-I${NETBSDSRCDIR}/sys +CPPFLAGS.quota2_subr.c+=-I${NETBSDSRCDIR}/sys DPADD.rump_quota= ${LIBRPCSVC} ${LIBPROP} ${LIBRUMPCLIENT} LDADD.rump_quota= -lrpcsvc -lprop -lrumpclient Index: src/usr.bin/quota/Makefile diff -u src/usr.bin/quota/Makefile:1.6.64.3 src/usr.bin/quota/Makefile:1.6.64.4 --- src/usr.bin/quota/Makefile:1.6.64.3 Fri Jan 28 22:15:36 2011 +++ src/usr.bin/quota/Makefile Thu Feb 3 15:56:15 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.6.64.3 2011/01/28 22:15:36 bouyer Exp $ +# $NetBSD: Makefile,v 1.6.64.4 2011/02/03 15:56:15 bouyer Exp $ # from: @(#)Makefile 8.1 (Berkeley) 6/6/93 .include <bsd.own.mk> @@ -10,5 +10,5 @@ LDADD= -lrpcsvc -lprop .PATH: ${NETBSDSRCDIR}/sys/ufs/ufs -SRCS+= quota2_prop.c +SRCS+= quota2_prop.c quota2_subr.c .include <bsd.prog.mk> Index: src/usr.bin/quota/quota.c diff -u src/usr.bin/quota/quota.c:1.33.2.6 src/usr.bin/quota/quota.c:1.33.2.7 --- src/usr.bin/quota/quota.c:1.33.2.6 Mon Jan 31 15:26:31 2011 +++ src/usr.bin/quota/quota.c Thu Feb 3 15:56:15 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: quota.c,v 1.33.2.6 2011/01/31 15:26:31 bouyer Exp $ */ +/* $NetBSD: quota.c,v 1.33.2.7 2011/02/03 15:56:15 bouyer Exp $ */ /* * Copyright (c) 1980, 1990, 1993 @@ -42,7 +42,7 @@ #if 0 static char sccsid[] = "@(#)quota.c 8.4 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: quota.c,v 1.33.2.6 2011/01/31 15:26:31 bouyer Exp $"); +__RCSID("$NetBSD: quota.c,v 1.33.2.7 2011/02/03 15:56:15 bouyer Exp $"); #endif #endif /* not lint */ @@ -345,37 +345,42 @@ time(&now); quplist = getprivs(id, type); for (qup = quplist; qup; qup = qup->next) { + int ql_stat; if (!vflag && qup->q2e.q2e_val[QL_BLOCK].q2v_softlimit == UQUAD_MAX && qup->q2e.q2e_val[QL_BLOCK].q2v_hardlimit == UQUAD_MAX && qup->q2e.q2e_val[QL_FILE].q2v_softlimit == UQUAD_MAX && qup->q2e.q2e_val[QL_FILE].q2v_hardlimit == UQUAD_MAX) continue; - msgi = NULL; - if (qup->q2e.q2e_val[QL_FILE].q2v_hardlimit && - qup->q2e.q2e_val[QL_FILE].q2v_cur >= - qup->q2e.q2e_val[QL_FILE].q2v_hardlimit) + ql_stat = quota2_check_limit(&qup->q2e.q2e_val[QL_FILE], + 1, now); + switch(QL_STATUS(ql_stat)) { + case QL_S_DENY_HARD: msgi = "File limit reached on"; - else if (qup->q2e.q2e_val[QL_FILE].q2v_softlimit && - qup->q2e.q2e_val[QL_FILE].q2v_cur >= - qup->q2e.q2e_val[QL_FILE].q2v_softlimit) { - if (qup->q2e.q2e_val[QL_FILE].q2v_time > now) - msgi = "In file grace period on"; - else - msgi = "Over file quota on"; + break; + case QL_S_DENY_GRACE: + msgi = "Over file quota on"; + break; + case QL_S_ALLOW_SOFT: + msgi = "In file grace period on"; + break; + default: + msgi = NULL; } - msgb = NULL; - if (qup->q2e.q2e_val[QL_BLOCK].q2v_hardlimit && - qup->q2e.q2e_val[QL_BLOCK].q2v_cur >= - qup->q2e.q2e_val[QL_BLOCK].q2v_hardlimit) + ql_stat = quota2_check_limit(&qup->q2e.q2e_val[QL_BLOCK], + 1, now); + switch(QL_STATUS(ql_stat)) { + case QL_S_DENY_HARD: msgb = "Block limit reached on"; - else if (qup->q2e.q2e_val[QL_BLOCK].q2v_softlimit && - qup->q2e.q2e_val[QL_BLOCK].q2v_cur >= - qup->q2e.q2e_val[QL_BLOCK].q2v_softlimit) { - if (qup->q2e.q2e_val[QL_BLOCK].q2v_time > now) - msgb = "In block grace period on"; - else - msgb = "Over block quota on"; + break; + case QL_S_DENY_GRACE: + msgb = "Over block quota on"; + break; + case QL_S_ALLOW_SOFT: + msgb = "In block grace period on"; + break; + default: + msgb = NULL; } if (qflag) { if ((msgi != NULL || msgb != NULL) && Index: src/usr.sbin/repquota/Makefile diff -u src/usr.sbin/repquota/Makefile:1.5.64.2 src/usr.sbin/repquota/Makefile:1.5.64.3 --- src/usr.sbin/repquota/Makefile:1.5.64.2 Sat Jan 29 11:04:43 2011 +++ src/usr.sbin/repquota/Makefile Thu Feb 3 15:56:16 2011 @@ -1,5 +1,5 @@ # from: @(#)Makefile 8.1 (Berkeley) 6/6/93 -# $NetBSD: Makefile,v 1.5.64.2 2011/01/29 11:04:43 bouyer Exp $ +# $NetBSD: Makefile,v 1.5.64.3 2011/02/03 15:56:16 bouyer Exp $ .include <bsd.own.mk> PROG= repquota @@ -13,6 +13,6 @@ .PATH: ${NETBSDSRCDIR}/usr.bin/quota SRCS+= printquota.c .PATH: ${NETBSDSRCDIR}/sys/ufs/ufs -SRCS+= quota2_prop.c quota1_subr.c +SRCS+= quota2_prop.c quota2_subr.c quota1_subr.c .include <bsd.prog.mk> Index: src/usr.sbin/repquota/repquota.c diff -u src/usr.sbin/repquota/repquota.c:1.25.2.5 src/usr.sbin/repquota/repquota.c:1.25.2.6 --- src/usr.sbin/repquota/repquota.c:1.25.2.5 Mon Jan 31 15:26:32 2011 +++ src/usr.sbin/repquota/repquota.c Thu Feb 3 15:56:16 2011 @@ -40,7 +40,7 @@ #if 0 static char sccsid[] = "@(#)repquota.c 8.2 (Berkeley) 11/22/94"; #else -__RCSID("$NetBSD: repquota.c,v 1.25.2.5 2011/01/31 15:26:32 bouyer Exp $"); +__RCSID("$NetBSD: repquota.c,v 1.25.2.6 2011/02/03 15:56:16 bouyer Exp $"); #endif #endif /* not lint */ @@ -382,8 +382,10 @@ { static int multiple = 0; u_long id; + int i; struct fileusage *fup; - const char *timemsg; + const char *timemsg[N_QL]; + char overchar[N_QL]; static time_t now; if (now == 0) @@ -410,44 +412,35 @@ printf("%s ", fup->fu_name); else printf("%-10s", fup->fu_name); - - if (fup->fu_q2e.q2e_val[QL_BLOCK].q2v_softlimit && - fup->fu_q2e.q2e_val[QL_BLOCK].q2v_cur >= - fup->fu_q2e.q2e_val[QL_BLOCK].q2v_softlimit) - timemsg = timeprt(now, - fup->fu_q2e.q2e_val[QL_BLOCK].q2v_time, 7); - else if (vflag && version == 2) - timemsg = timeprt(0, - fup->fu_q2e.q2e_val[QL_BLOCK].q2v_grace, 7); - else - timemsg = ""; + for (i = 0; i < N_QL; i++) { + switch (QL_STATUS(quota2_check_limit( + &fup->fu_q2e.q2e_val[i], 1, now))) { + case QL_S_DENY_HARD: + case QL_S_DENY_GRACE: + case QL_S_ALLOW_SOFT: + timemsg[i] = timeprt(now, + fup->fu_q2e.q2e_val[i].q2v_time, 7); + overchar[i] = '+'; + break; + default: + timemsg[i] = (vflag && version == 2) ? + timeprt(0, + fup->fu_q2e.q2e_val[i].q2v_grace, 7): + ""; + overchar[i] = '-'; + break; + } + } printf("%c%c%9s%9s%9s%7s", - fup->fu_q2e.q2e_val[QL_BLOCK].q2v_softlimit && - fup->fu_q2e.q2e_val[QL_BLOCK].q2v_cur >= - fup->fu_q2e.q2e_val[QL_BLOCK].q2v_softlimit ? - '+' : '-', - fup->fu_q2e.q2e_val[QL_FILE].q2v_softlimit && - fup->fu_q2e.q2e_val[QL_FILE].q2v_cur >= - fup->fu_q2e.q2e_val[QL_FILE].q2v_softlimit ? - '+' : '-', + overchar[QL_BLOCK], overchar[QL_FILE], intprt(fup->fu_q2e.q2e_val[QL_BLOCK].q2v_cur, HN_B, hflag, 9), intprt(fup->fu_q2e.q2e_val[QL_BLOCK].q2v_softlimit, HN_B, hflag, 9), intprt(fup->fu_q2e.q2e_val[QL_BLOCK].q2v_hardlimit, HN_B, hflag, 9), - timemsg); - if (fup->fu_q2e.q2e_val[QL_FILE].q2v_softlimit && - fup->fu_q2e.q2e_val[QL_FILE].q2v_cur >= - fup->fu_q2e.q2e_val[QL_FILE].q2v_softlimit) - timemsg = timeprt(now, - fup->fu_q2e.q2e_val[QL_FILE].q2v_time, 7); - else if (vflag && version == 2) - timemsg = timeprt(0, - fup->fu_q2e.q2e_val[QL_FILE].q2v_grace, 7); - else - timemsg = ""; + timemsg[QL_BLOCK]); printf(" %8s%8s%8s%7s\n", intprt(fup->fu_q2e.q2e_val[QL_FILE].q2v_cur, 0, hflag, 8), @@ -455,7 +448,7 @@ 0, hflag, 8), intprt(fup->fu_q2e.q2e_val[QL_FILE].q2v_hardlimit, 0, hflag, 8), - timemsg); + timemsg[QL_FILE]); memset(&fup->fu_q2e, 0, sizeof(fup->fu_q2e)); } }