-
Pavel Emelyanov authored
Previous patch (5a1e1aac) tried to minimize the amount of open()s called when mmap()ing the files. Unfortunatley, there was a mistake and wrong flags were compared which resulted in the whole optimization working randomly (typically not working). Fixing the flags comparison revealed another problem. The patch in question correllated with the 03e8c417 one, which caused some vmas to be opened and mmaped much later than the premap. When hitting the situation when vmas sharing their fds are partially premapped and partially not, the whole vm_open sharing became broken in multiple places -- either needed fd was not opened, or the not needed left un-closed. To fix this the context, that tracks whether the fd should be shared or not, should be moved from collect stage to the real opening loop. In this case we need to explicitly know which vmas _may_ share fds (file private and shared) with each other, so the sharing knowledge becomes spread between open_filemap() and its callers. Oh, well... Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
f0a87835