# HG changeset patch # User Paul Boddie # Date 1621091402 -7200 # Node ID ab84389f975e9a0d1132f1ee404d4cd133bbda2d # Parent d3ed5dc0b98dcf5e123a55a20a22b9fc2496cef5 Make page flushing depend on whether flexpages experience write accesses. diff -r d3ed5dc0b98d -r ab84389f975e libfsserver/lib/mapping/page_mapper.cc --- a/libfsserver/lib/mapping/page_mapper.cc Fri May 07 00:31:02 2021 +0200 +++ b/libfsserver/lib/mapping/page_mapper.cc Sat May 15 17:10:02 2021 +0200 @@ -184,7 +184,9 @@ { if (flexpage->decrement() || purge) { - _accessor->flush(flexpage); + if (flexpage->modified()) + _accessor->flush(flexpage); + ipc_unmap_flexpage(flexpage); flexpage->invalidate(); } diff -r d3ed5dc0b98d -r ab84389f975e libmem/include/mem/flexpage.h --- a/libmem/include/mem/flexpage.h Fri May 07 00:31:02 2021 +0200 +++ b/libmem/include/mem/flexpage.h Sat May 15 17:10:02 2021 +0200 @@ -67,6 +67,8 @@ void upgrade(flags_t flags); + bool modified(); + SendFlexpage to_send(offset_t offset, offset_t hot_spot, flags_t flags, offset_t max_offset=0); diff -r d3ed5dc0b98d -r ab84389f975e libmem/lib/src/flexpage.cc --- a/libmem/lib/src/flexpage.cc Fri May 07 00:31:02 2021 +0200 +++ b/libmem/lib/src/flexpage.cc Sat May 15 17:10:02 2021 +0200 @@ -19,6 +19,8 @@ * Boston, MA 02110-1301, USA */ +#include + #include #include "flexpage.h" @@ -113,6 +115,14 @@ _flags |= flags; } +/* Return whether the flexpage has been modified due to write access having been + granted for any user of the page. */ + +bool Flexpage::modified() +{ + return _flags & L4RE_DS_MAP_FLAG_RW; +} + /* Return a "send" flexpage for an access to 'offset' by positioning it relative to 'hot_spot' for the receive flexpage window. */