[lkml]   [2012]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [PATCH 4/8] xfs: Move ilock before transaction start in xfs_setattr_size()
    On Tue 24-01-12 17:59:45, Dave Chinner wrote:
    > On Fri, Jan 20, 2012 at 09:34:42PM +0100, Jan Kara wrote:
    > > In xfs we first take ilock and start transaction afterwards.
    > The correct order is to allocate the transaction, reserve the space
    > for it and then take the ilock. We cannot hold the ilock over the
    > transaction reservation because that can deadlock the journal.
    > That is, to make space for the new transaction reservation, we may
    > need to take the ilock to flush the inode and allow the journal tail
    > to move forwards to make space for the new transaction. If we
    > already hold the ilock, then it can't be flushed, we can't make
    > space available in the journal and hence deadlock.
    Thanks for clarification!

    > Maybe you confused the ilock vs the iolock. We can hold the iolock
    > over the trans alloc/reserve because that lock is not required to
    > move the tail of the journal, so the deadlock doesn't exist.
    Ups! I now had a look at what xfs_rw_ilock() does. I always thought it's
    just a plain rw semaphore and now I see it takes several locks depending on
    the argument. Ugh, a bit surprising for XFS newcomer as me ;) But now
    things become clearer so I fix my patches with this new knowledge in mind.
    So just disregard my locking comments. They were likely bogus.

    Jan Kara <>
    SUSE Labs, CR

     \ /
      Last update: 2012-01-24 12:55    [W:0.045 / U:17.840 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site