xfs: mmap lock needs to be inside freeze protection
authorDave Chinner <dchinner@redhat.com>
Wed, 3 Jun 2015 23:18:18 +0000 (09:18 +1000)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 15 Jun 2016 20:29:33 +0000 (21:29 +0100)
commita80de2c9dd4c7c129813f9c70853bf97c0372ea0
tree0b45d90b4a65d4816b5ce427f219d43fb45600bb
parent7cafecfabbd7119ca94bd5583411ff245bcbbaec
xfs: mmap lock needs to be inside freeze protection

commit ec56b1f1fdc69599963574ce94cc5693d535dd64 upstream.

Lock ordering for the new mmap lock needs to be:

mmap_sem
  sb_start_pagefault
    i_mmap_lock
      page lock
        <fault processsing>

Right now xfs_vm_page_mkwrite gets this the wrong way around,
While technically it cannot deadlock due to the current freeze
ordering, it's still a landmine that might explode if we change
anything in future. Hence we need to nest the locks correctly.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Cc: Jan Kara <jack@suse.cz>
Cc: xfs@oss.sgi.com
fs/xfs/xfs_file.c