/* * linux/mm/msync.c * * Copyright (C) 1994-1999 Linus Torvalds */ /* * The msync() system call. */ #include #include #include #include #include #include /* * MS_SYNC syncs the entire file - including mappings. * * MS_ASYNC does not start I/O (it used to, up to 2.5.67). * Nor does it marks the relevant pages dirty (it used to up to 2.6.17). * Now it doesn't do anything, since dirty pages are properly tracked. * * The application may now run fsync() to * write out the dirty pages and wait on the writeout and check the result. * Or the application may run fadvise(FADV_DONTNEED) against the fd to start * async writeout immediately. * So by _not_ starting I/O in MS_ASYNC we provide complete flexibility to * applications. */ SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags) { unsigned long end; struct mm_struct *mm = current->mm; struct vm_area_struct *vma; int unmapped_error = 0; int error = -EINVAL; if (flags & ~(MS_ASYNC | MS_INVALIDATE | MS_SYNC)) goto out; if (offset_in_page(start)) goto out; if ((flags & MS_ASYNC) && (flags & MS_SYNC)) goto out; error = -ENOMEM; len = (len + ~PAGE_MASK) & PAGE_MASK; end = start + len; if (end < start) goto out; error = 0; if (end == start) goto out; /* * If the interval [start,end) covers some unmapped address ranges, * just ignore them, but return -ENOMEM at the end. */ down_read(&mm->mmap_sem); vma = find_vma(mm, start); for (;;) { struct file *file; loff_t fstart, fend; /* Still start < end. */ error = -ENOMEM; if (!vma) goto out_unlock; /* Here start < vma->vm_end. */ if (start < vma->vm_start) { start = vma->vm_start; if (start >= end) goto out_unlock; unmapped_error = -ENOMEM; } /* Here vma->vm_start <= start < vma->vm_end. */ if ((flags & MS_INVALIDATE) && (vma->vm_flags & VM_LOCKED)) { error = -EBUSY; goto out_unlock; } file = vma->vm_file; fstart = (start - vma->vm_start) + ((loff_t)vma->vm_pgoff << PAGE_SHIFT); fend = fstart + (min(end, vma->vm_end) - start) - 1; start = vma->vm_end; if ((flags & MS_SYNC) && file && (vma->vm_flags & VM_SHARED)) { get_file(file); up_read(&mm->mmap_sem); error = vfs_fsync_range(file, fstart, fend, 1); fput(file); if (error || start >= end) goto out; down_read(&mm->mmap_sem); vma = find_vma(mm, start); } else { if (start >= end) { error = 0; goto out_unlock; } vma = vma->vm_next; } } out_unlock: up_read(&mm->mmap_sem); out: return error ? : unmapped_error; } value='range'>range
ModeNameSize
-rw-r--r--Build5870logplain
-rwxr-xr-xPERF-VERSION-GEN1010logplain
-rw-r--r--alias.c1471logplain
-rw-r--r--annotate.c44411logplain
-rw-r--r--annotate.h5583logplain
-rw-r--r--auxtrace.c47774logplain
-rw-r--r--auxtrace.h22142logplain
-rw-r--r--block-range.c6948logplain
-rw-r--r--block-range.h1607logplain
-rw-r--r--bpf-loader.c40787logplain
-rw-r--r--bpf-loader.h6215logplain
-rw-r--r--bpf-prologue.c11226logplain
-rw-r--r--bpf-prologue.h847logplain
-rw-r--r--build-id.c19054logplain
-rw-r--r--build-id.h1859logplain
d---------c++184logplain
-rw-r--r--cache.h733logplain
-rw-r--r--call-path.c2893logplain
-rw-r--r--call-path.h2203logplain
-rw-r--r--callchain.c29332logplain
-rw-r--r--callchain.h7881logplain
-rw-r--r--cgroup.c3195logplain
-rw-r--r--cgroup.h359logplain
-rw-r--r--cloexec.c1950logplain
-rw-r--r--cloexec.h251logplain
-rw-r--r--color.c4787logplain
-rw-r--r--color.h1647logplain
-rw-r--r--comm.c2239logplain
-rw-r--r--comm.h561logplain
-rw-r--r--config.c16262logplain
-rw-r--r--config.h2113logplain
-rw-r--r--counts.c1026logplain
-rw-r--r--counts.h790logplain
-rw-r--r--cpumap.c12627logplain
-rw-r--r--cpumap.h1954logplain
-rw-r--r--cs-etm.h2061logplain
-rw-r--r--ctype.c2018logplain
-rw-r--r--data-convert-bt.c36671logplain
-rw-r--r--data-convert-bt.h302logplain
-rw-r--r--data-convert.h141logplain
-rw-r--r--data.c3459logplain
-rw-r--r--data.h1369logplain
-rw-r--r--db-export.c11434logplain
-rw-r--r--db-export.h3816logplain
-rw-r--r--debug.c4417logplain
-rw-r--r--debug.h2023logplain
-rw-r--r--demangle-java.c4219logplain
-rw-r--r--demangle-java.h249logplain
-rw-r--r--demangle-rust.c6602logplain
-rw-r--r--demangle-rust.h170logplain
-rw-r--r--drv_configs.c1834logplain
-rw-r--r--drv_configs.h844logplain
-rw-r--r--dso.c31994logplain
-rw-r--r--dso.h10399logplain
-rw-r--r--dwarf-aux.c33828logplain
-rw-r--r--dwarf-aux.h5101logplain
-rw-r--r--dwarf-regs.c1816logplain
-rw-r--r--env.c1884logplain
-rw-r--r--env.h1268logplain
-rw-r--r--event.c36670logplain
-rw-r--r--event.h15997logplain
-rw-r--r--evlist.c47104logplain
-rw-r--r--evlist.h12584logplain
-rw-r--r--evsel.c63917logplain
-rw-r--r--evsel.h13041logplain
-rw-r--r--evsel_fprintf.c5831logplain
-rw-r--r--find-vdso-map.c581logplain
-rw-r--r--genelf.c11653logplain
-rw-r--r--genelf.h1814logplain
-rw-r--r--genelf_debug.c14374logplain
-rwxr-xr-xgenerate-cmdlist.sh1141logplain
-rw-r--r--group.h122logplain
-rw-r--r--header.c73410logplain
-rw-r--r--header.h4365logplain
-rw-r--r--help-unknown-cmd.c3221logplain