• Steven Whitehouse's avatar
    [GFS2] Fix DIO deadlock · c7b33834
    Steven Whitehouse authored
    This patch fixes Red Hat bugzilla #212627 in which a deadlock occurs
    due to trying to take the i_mutex while holding a glock. The correct
    locking order is defined as i_mutex -> glock in all cases.
    
    I've left dealing with allocating writes. I know that we need to do
    that, but for now this should do the trick. We don't need to take the
    i_mutex on write, because the VFS has already taken it for us. On read
    we don't need it since the glock is enough protection. The reason that
    I've made some of the checks into a separate function is that we'll need
    to do the checks again in the allocating write case eventually, so this
    is partly in preparation for this. Likewise the return value test of !=
    1 might look a bit odd and thats because we'll need a third return value
    in case of requiring an allocation.
    
    I've made the change to deferred mode on the glock to ensure flushing
    read caches on other nodes. I notice that (using blktrace to look at
    whats going on) we appear to do a better job of large I/Os than ext3
    after this patch (in terms of not splitting up the I/Os).
    Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
    Cc: Wendy Cheng <wcheng@redhat.com>
    c7b33834
ops_address.c 19.3 KB