Im Code von msync.c
kann man sehen:
if ((flags & MS_INVALIDATE) &&
(vma->vm_flags & VM_LOCKED)) {
error = -EBUSY;
goto out_unlock;
}
Grundsätzlich hier, wir wissen, dass MS_INVALIDATE
ausgewertet wird und wenn die aktuelle Zuordnung von vma
gerichtet ist gesperrt, der msync()
Anruf wird mit EBUSY
scheitern.
Dies macht Sinn nach (von Teil der Veröffentlichung 3.74 des Linux-man-pages Projekt, msync(2)
):
MS_INVALIDATE
fragt andere Zuordnungen der gleichen Datei ungültig zu machen (so , dass sie können, mit den gerade geschriebenen frischen Werten aktualisiert werden).
Denn wenn jede Datei Karte zu vma
Liste verknüpft gesperrt ist, kann es nicht für ungültig erklärt werden, so wird der Anruf, wenn sonst nicht (sonst nicht die MS_INVALIDATE
Flag gesetzt ist) wird es nicht.
Also, jetzt Ihre Frage zu beantworten, kann es nicht als ein No-Op betrachtet werden, da es das Verhalten von msync()
beeinflusst, wenn festgelegt.