Rework JFS's inode locking
In order for JFS to be able to quiesce the current activity, while blocking new transactions, the locking needed some rework. New transactions are stopped in the functions txBegin or txBeginAnon, where the rdwrlock (IREAD_LOCK/IWRITE_LOCK) may be held. Dirty inodes may need to be committed while new transactions are blocked here, so another lock is introduced (commit_sem) which is taken after txBegin/txBeginAnon is called. This ensures that the proper serialization takes place, without the write_inode method needing to grab the rdwrlock. In addition, the use of IWRITE_LOCK and IREAD_LOCK has been removed from directory inodes. The serialization done by the VFS using i_sem is sufficient to avoid races. This patch removes JFS's dependency on down_write_trylock.
Showing
Please register or sign in to comment