The userspace change is basically just modifying timer_f so we can specify an id; if it's not id 0, we set the grace time to now() + value, iff the user is over the soft limit (this mirrors what setquota does): + /* + * If id is specified we are extending grace time by value + * Otherwise we are setting the default grace time + */ + if (id) { + time_t now; + + if (xfsquotactl(XFS_GETQUOTA, dev, type, id, (void *)&d) < 0) { + exitcode = 1; + fprintf(stderr, _("%s: cannot get quota: %s\n"), + progname, strerror(errno)); + return; + } + + time(&now); + + if (d.d_blk_hardlimit && d.d_bcount > d.d_blk_hardlimit) + d.d_btimer = now + value; + if (d.d_ino_softlimit && d.d_icount > d.d_ino_softlimit) + d.d_itimer = now + value; + if (d.d_rtb_softlimit && d.d_rtbcount > d.d_rtb_softlimit) + d.d_rtbtimer = now + value; + } else { + d.d_btimer = value; + d.d_itimer = value; + d.d_rtbtimer = value; + } + and then we set the quota via the quotactl as normal.