Whamcloud - gitweb
re-committing on b_devel:
authorphil <phil>
Thu, 25 Sep 2003 04:54:45 +0000 (04:54 +0000)
committerphil <phil>
Thu, 25 Sep 2003 04:54:45 +0000 (04:54 +0000)
commite26872131ae44b3758ade1ffdc41b97f6e5a1289
treeeefae13cb403fc259f5a05b0aa04f84170877182
parent86252a29efa9a6eedc1f792b3d9992aadd44343e
re-committing on b_devel:
b=1997
r=alex
My previous fix for truncate/write lock inversion was close, but badly
flawed. I failed to remember that truncate will internally restart
the transaction -- start a new one, for all intents and purposes -- so
the ordering was backwards. "i_sem before transaction" is the
cardinal rule.

I tried to avoid that because I didn't want to hold the i_sem across
the entire disk I/O in filter_commitrw_write. After some discussion
with Alex, however, we decided that the i_sem need only be held for
the block allocation, and that the BKL suffices for updating i_size.
So the ordering in the write path is now: take i_sem, start transaction,
call filter_direct_io, f_d_io does block alloc, drops i_sem, does I/O.
lustre/obdfilter/filter_io.c