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:
parent
3160862437
commit
2da93c21ec
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=327562
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user