]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
holepunch: fix shmem_truncate_range punch locking
authorHugh Dickins <hugh@veritas.com>
Thu, 3 May 2007 22:52:56 +0000 (00:52 +0200)
committerAdrian Bunk <bunk@stusta.de>
Thu, 3 May 2007 22:52:56 +0000 (00:52 +0200)
commitffd0472d4ece96766eec98ebb0ad649dc76248b8
treea8ec4a0f6693462e56b882f31aa9225e67eafb5f
parent0e846d67dd67e4b22a4889768f7982363e44ed26
holepunch: fix shmem_truncate_range punch locking

Miklos Szeredi observes that during truncation of shmem page directories,
info->lock is released to improve latency (after lowering i_size and
next_index to exclude races); but this is quite wrong for holepunching,
which receives no such protection from i_size or next_index, and is left
vulnerable to races with shmem_unuse, shmem_getpage and shmem_writepage.

Hold info->lock throughout when holepunching?  No, any user could prevent
rescheduling for far too long.  Instead take info->lock just when needed:
in shmem_free_swp when removing the swap entries, and whenever removing
a directory page from the level above.  But so long as we remove before
scanning, we can safely skip taking the lock at the lower levels, except
at misaligned start and end of the hole.

Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
mm/shmem.c