diff options
author | Hugh Dickins <hughd@google.com> | 2014-06-23 13:22:06 -0700 |
---|---|---|
committer | Jiri Slaby <jslaby@suse.cz> | 2014-07-28 09:12:22 +0200 |
commit | 8685789bd8ec12a02b07ea76df4527b055efbf20 (patch) | |
tree | 5648d56f8e479cbb269faac9646a7b6cca049afc /scripts/docproc.c | |
parent | 7b10a5267a7c5e4522b2ba467fb16bb70ac19741 (diff) |
shmem: fix faulting into a hole while it's punched
commit f00cdc6df7d7cfcabb5b740911e6788cb0802bdb upstream.
Trinity finds that mmap access to a hole while it's punched from shmem
can prevent the madvise(MADV_REMOVE) or fallocate(FALLOC_FL_PUNCH_HOLE)
from completing, until the reader chooses to stop; with the puncher's
hold on i_mutex locking out all other writers until it can complete.
It appears that the tmpfs fault path is too light in comparison with its
hole-punching path, lacking an i_data_sem to obstruct it; but we don't
want to slow down the common case.
Extend shmem_fallocate()'s existing range notification mechanism, so
shmem_fault() can refrain from faulting pages into the hole while it's
punched, waiting instead on i_mutex (when safe to sleep; or repeatedly
faulting when not).
[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: Hugh Dickins <hughd@google.com>
Reported-by: Sasha Levin <sasha.levin@oracle.com>
Tested-by: Sasha Levin <sasha.levin@oracle.com>
Cc: Dave Jones <davej@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Diffstat (limited to 'scripts/docproc.c')
0 files changed, 0 insertions, 0 deletions