lkml.org 
[lkml]   [2011]   [Sep]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH, RFC] xip: use i_mutex for xip_file_fault
    On Sun, Sep 11, 2011 at 12:15:04PM +0100, Al Viro wrote:

    > write() grabs ->i_mutex on the file it's going to write to. It uses
    > copy_from_user() while holding ->i_mutex; that can end up calling ->fault().
    > If your data comes from the same file mmapped in your address space, you
    > have xip_write_fault() called while you are in xip_file_write() and *already*
    > are holding ->i_mutex on the same inode. With your patch it will, AFAICS,
    > cheerfully deadlock.

    Oh, wait... You are only doing that to write side of pagefault? That's
    better, but not much:

    thread 1: mmap the file, modify mapping
    thread 2: write() to file

    The former will do xip_write_fault() while holding ->mmap_sem.
    The latter will do copy_from_user() from xip_file_write(), getting
    pagefaults while holding ->i_mutex.

    Note that we are grabbing ->mmap_sem and ->i_mutex in opposite orders.
    I.e. that will deadlock on you - all you need is threads sharing the
    address space.


    \
     
     \ /
      Last update: 2011-09-11 13:29    [W:0.020 / U:2.336 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site