On Mon, Nov 26, 2018 at 03:21:58PM -0800, Hugh Dickins wrote: > Huge tmpfs testing, on 32-bit kernel with lockdep enabled, showed that > __split_huge_page() was using i_size_read() while holding the irq-safe > lru_lock and page tree lock, but the 32-bit i_size_read() uses an > irq-unsafe seqlock which should not be nested inside them. > > Instead, read the i_size earlier in split_huge_page_to_list(), and pass > the end offset down to __split_huge_page(): all while holding head page > lock, which is enough to prevent truncation of that extent before the > page tree lock has been taken. > > Fixes: baa355fd33142 ("thp: file pages support for split_huge_page()") > Signed-off-by: Hugh Dickins <hughd@xxxxxxxxxx> > Cc: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx # 4.8+ Acked-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> -- Kirill A. Shutemov