If we close or sync a hash-based db file, make sure to call fsync to

make sure the changes are on disk. The people at pfSense noticed that
it didn't always make it to the disk soon enough with soft updates.

Differential Revision:	https://reviews.freebsd.org/D5186
Reviewed by:	garga, vangyzen, bapt, se
MFC after:	1 week
This commit is contained in:
David Malone 2016-02-23 15:21:13 +00:00
parent ecc7ce0f3e
commit efb7dae251

View File

@ -422,8 +422,10 @@ hdestroy(HTAB *hashp)
if (hashp->tmp_buf)
free(hashp->tmp_buf);
if (hashp->fp != -1)
if (hashp->fp != -1) {
(void)_fsync(hashp->fp);
(void)_close(hashp->fp);
}
free(hashp);
@ -458,6 +460,8 @@ hash_sync(const DB *dbp, u_int32_t flags)
return (0);
if (__buf_free(hashp, 0, 1) || flush_meta(hashp))
return (ERROR);
if (hashp->fp != -1 && _fsync(hashp->fp) != 0)
return (ERROR);
hashp->new_file = 0;
return (0);
}