• J
    nfs: don't try to migrate pages with active requests · 2da95652
    Jeff Layton 提交于
    nfs_find_and_lock_request will take a reference to the nfs_page and
    will then put it if the req is already locked. It's possible though
    that the reference will be the last one. That put then can kick off
    a whole series of reference puts:
    
    nfs_page
       nfs_open_context
          dentry
              inode
    
    If the inode ends up being deleted, then the VFS will call
    truncate_inode_pages. That function will try to take the page lock, but
    it was already locked when migrate_page was called. The code
    deadlocks.
    
    Fix this by simply refusing the migration request if PagePrivate is
    already set, indicating that the page is already associated with an
    active read or write request.
    
    We've had a customer test a backported version of this patch and
    the preliminary results seem good.
    
    Cc: stable@kernel.org
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Reported-by: NHarshula Jayasuriya <harshula@redhat.com>
    Signed-off-by: NJeff Layton <jlayton@redhat.com>
    Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
    2da95652
write.c 44.1 KB