|
@@ -281,13 +281,15 @@ locked_inode_to_wb_and_lock_list(struct inode *inode)
|
|
wb_get(wb);
|
|
wb_get(wb);
|
|
spin_unlock(&inode->i_lock);
|
|
spin_unlock(&inode->i_lock);
|
|
spin_lock(&wb->list_lock);
|
|
spin_lock(&wb->list_lock);
|
|
- wb_put(wb); /* not gonna deref it anymore */
|
|
|
|
|
|
|
|
/* i_wb may have changed inbetween, can't use inode_to_wb() */
|
|
/* i_wb may have changed inbetween, can't use inode_to_wb() */
|
|
- if (likely(wb == inode->i_wb))
|
|
|
|
- return wb; /* @inode already has ref */
|
|
|
|
|
|
+ if (likely(wb == inode->i_wb)) {
|
|
|
|
+ wb_put(wb); /* @inode already has ref */
|
|
|
|
+ return wb;
|
|
|
|
+ }
|
|
|
|
|
|
spin_unlock(&wb->list_lock);
|
|
spin_unlock(&wb->list_lock);
|
|
|
|
+ wb_put(wb);
|
|
cpu_relax();
|
|
cpu_relax();
|
|
spin_lock(&inode->i_lock);
|
|
spin_lock(&inode->i_lock);
|
|
}
|
|
}
|