JFS: Fix race in txLock
TxAnchor.anon_list is protected by jfsTxnLock (TXN_LOCK), but there was a place in txLock() that was removing an entry from the list without holding the spinlock. Signed-off-by: Dave Kleikamp <shaggy@austin.ibm.com>
This commit is contained in:
parent
a5c96cab8f
commit
8a9cd6d676
@ -657,7 +657,9 @@ struct tlock *txLock(tid_t tid, struct inode *ip, struct metapage * mp,
|
|||||||
/* only anonymous txn.
|
/* only anonymous txn.
|
||||||
* Remove from anon_list
|
* Remove from anon_list
|
||||||
*/
|
*/
|
||||||
|
TXN_LOCK();
|
||||||
list_del_init(&jfs_ip->anon_inode_list);
|
list_del_init(&jfs_ip->anon_inode_list);
|
||||||
|
TXN_UNLOCK();
|
||||||
}
|
}
|
||||||
jfs_ip->atlhead = tlck->next;
|
jfs_ip->atlhead = tlck->next;
|
||||||
} else {
|
} else {
|
||||||
|
@ -114,6 +114,8 @@ static void jfs_destroy_inode(struct inode *inode)
|
|||||||
{
|
{
|
||||||
struct jfs_inode_info *ji = JFS_IP(inode);
|
struct jfs_inode_info *ji = JFS_IP(inode);
|
||||||
|
|
||||||
|
BUG_ON(!list_empty(&ji->anon_inode_list));
|
||||||
|
|
||||||
spin_lock_irq(&ji->ag_lock);
|
spin_lock_irq(&ji->ag_lock);
|
||||||
if (ji->active_ag != -1) {
|
if (ji->active_ag != -1) {
|
||||||
struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap;
|
struct bmap *bmap = JFS_SBI(inode->i_sb)->bmap;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user