Always use atomic_fetchadd() when updating per-user accounting values.

This avoids re-reading a variable after it has been updated via an
atomic op.  It is just a cosmetic cleanup as the read value was only
used to control a diagnostic printf that should rarely occur (if ever).

Reviewed by:	kib
Differential Revision:	https://reviews.freebsd.org/D13768
This commit is contained in:
John Baldwin 2018-01-04 22:07:58 +00:00
parent 3160862437
commit 2da93c21ec
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=327562

View File

@ -1384,18 +1384,17 @@ ui_racct_foreach(void (*callback)(struct racct *racct,
static inline int
chglimit(struct uidinfo *uip, long *limit, int diff, rlim_t max, const char *name)
{
long new;
/* Don't allow them to exceed max, but allow subtraction. */
new = atomic_fetchadd_long(limit, (long)diff) + diff;
if (diff > 0 && max != 0) {
if (atomic_fetchadd_long(limit, (long)diff) + diff > max) {
if (new < 0 || new > max) {
atomic_subtract_long(limit, (long)diff);
return (0);
}
} else {
atomic_add_long(limit, (long)diff);
if (*limit < 0)
printf("negative %s for uid = %d\n", name, uip->ui_uid);
}
} else if (new < 0)
printf("negative %s for uid = %d\n", name, uip->ui_uid);
return (1);
}