svn commit: r353930 - head/sys/kern
Konstantin Belousov
kib at FreeBSD.org
Wed Oct 23 16:06:48 UTC 2019
Author: kib
Date: Wed Oct 23 16:06:47 2019
New Revision: 353930
URL: https://svnweb.freebsd.org/changeset/base/353930
Log:
Fix undefined behavior.
Create a sequence point by ending a full expression for call to
vspace() and use of the globals which are modified by vspace().
Reported and reviewed by: imp
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D22126
Modified:
head/sys/kern/vfs_subr.c
Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c Wed Oct 23 16:05:52 2019 (r353929)
+++ head/sys/kern/vfs_subr.c Wed Oct 23 16:06:47 2019 (r353930)
@@ -1273,7 +1273,7 @@ vnlru_proc(void)
{
struct mount *mp, *nmp;
unsigned long onumvnodes;
- int done, force, trigger, usevnodes;
+ int done, force, trigger, usevnodes, vsp;
bool reclaim_nc_src;
EVENTHANDLER_REGISTER(shutdown_pre_sync, kproc_shutdown, vnlruproc,
@@ -1301,7 +1301,8 @@ vnlru_proc(void)
force = 1;
vstir = 0;
}
- if (vspace() >= vlowat && force == 0) {
+ vsp = vspace();
+ if (vsp >= vlowat && force == 0) {
vnlruproc_sig = 0;
wakeup(&vnlruproc_sig);
msleep(vnlruproc, &vnode_free_list_mtx,
@@ -1368,7 +1369,8 @@ vnlru_proc(void)
* After becoming active to expand above low water, keep
* active until above high water.
*/
- force = vspace() < vhiwat;
+ vsp = vspace();
+ force = vsp < vhiwat;
}
}
@@ -1447,8 +1449,10 @@ vtryrecycle(struct vnode *vp)
static void
vcheckspace(void)
{
+ int vsp;
- if (vspace() < vlowat && vnlruproc_sig == 0) {
+ vsp = vspace();
+ if (vsp < vlowat && vnlruproc_sig == 0) {
vnlruproc_sig = 1;
wakeup(vnlruproc);
}
More information about the svn-src-all
mailing list