1.1 --- a/libfsserver/lib/mapping/page_mapper.cc Fri May 07 00:31:02 2021 +0200
1.2 +++ b/libfsserver/lib/mapping/page_mapper.cc Sat May 15 17:10:02 2021 +0200
1.3 @@ -184,7 +184,9 @@
1.4 {
1.5 if (flexpage->decrement() || purge)
1.6 {
1.7 - _accessor->flush(flexpage);
1.8 + if (flexpage->modified())
1.9 + _accessor->flush(flexpage);
1.10 +
1.11 ipc_unmap_flexpage(flexpage);
1.12 flexpage->invalidate();
1.13 }
2.1 --- a/libmem/include/mem/flexpage.h Fri May 07 00:31:02 2021 +0200
2.2 +++ b/libmem/include/mem/flexpage.h Sat May 15 17:10:02 2021 +0200
2.3 @@ -67,6 +67,8 @@
2.4
2.5 void upgrade(flags_t flags);
2.6
2.7 + bool modified();
2.8 +
2.9 SendFlexpage to_send(offset_t offset, offset_t hot_spot, flags_t flags,
2.10 offset_t max_offset=0);
2.11
3.1 --- a/libmem/lib/src/flexpage.cc Fri May 07 00:31:02 2021 +0200
3.2 +++ b/libmem/lib/src/flexpage.cc Sat May 15 17:10:02 2021 +0200
3.3 @@ -19,6 +19,8 @@
3.4 * Boston, MA 02110-1301, USA
3.5 */
3.6
3.7 +#include <l4/re/c/dataspace.h>
3.8 +
3.9 #include <algorithm>
3.10
3.11 #include "flexpage.h"
3.12 @@ -113,6 +115,14 @@
3.13 _flags |= flags;
3.14 }
3.15
3.16 +/* Return whether the flexpage has been modified due to write access having been
3.17 + granted for any user of the page. */
3.18 +
3.19 +bool Flexpage::modified()
3.20 +{
3.21 + return _flags & L4RE_DS_MAP_FLAG_RW;
3.22 +}
3.23 +
3.24 /* Return a "send" flexpage for an access to 'offset' by positioning it relative
3.25 to 'hot_spot' for the receive flexpage window. */
3.26