Signed-off-by: Nick Piggin --- fs/fs-writeback.c | 8 +++++--- fs/inode.c | 5 ++++- 2 files changed, 9 insertions(+), 4 deletions(-) Index: linux-2.6/fs/fs-writeback.c =================================================================== --- linux-2.6.orig/fs/fs-writeback.c 2010-10-19 14:18:59.000000000 +1100 +++ linux-2.6/fs/fs-writeback.c 2010-10-19 14:19:21.000000000 +1100 @@ -375,15 +375,17 @@ spin_lock(&inode->i_lock); dirty = inode->i_state & I_DIRTY; inode->i_state &= ~(I_DIRTY_SYNC | I_DIRTY_DATASYNC); - spin_unlock(&inode->i_lock); /* Don't write the inode if only I_DIRTY_PAGES was set */ if (dirty & (I_DIRTY_SYNC | I_DIRTY_DATASYNC)) { - int err = write_inode(inode, wbc); + int err; + + spin_unlock(&inode->i_lock); + err = write_inode(inode, wbc); if (ret == 0) ret = err; + spin_lock(&inode->i_lock); } - spin_lock(&inode->i_lock); spin_lock(&wb_inode_list_lock); inode->i_state &= ~I_SYNC; if (!(inode->i_state & I_FREEING)) { Index: linux-2.6/fs/inode.c =================================================================== --- linux-2.6.orig/fs/inode.c 2010-10-19 14:18:59.000000000 +1100 +++ linux-2.6/fs/inode.c 2010-10-19 14:19:22.000000000 +1100 @@ -857,9 +857,12 @@ inode = alloc_inode(sb); if (inode) { - spin_lock(&inode->i_lock); inode->i_ino = get_next_ino(); inode->i_state = 0; + /* + * We could init inode locked here, to improve performance. + */ + spin_lock(&inode->i_lock); __inode_add_to_lists(sb, NULL, inode); spin_unlock(&inode->i_lock); } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/