ext4: optimize orphan_list handling for ext4_setattr
authorDmitry Monakhov <dmonakhov@openvz.org>
Thu, 28 Oct 2010 02:08:46 +0000 (22:08 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 28 Oct 2010 02:08:46 +0000 (22:08 -0400)
commit3d287de3b828226e5a450c7fd5bf4283792dc2b0
tree4adcc534e2042aed924750df3ef2433bd2f14fd8
parentbeed5ecbaa377fa8bb6a54a6608e8725a21efdbc
ext4: optimize orphan_list handling for ext4_setattr

Surprisingly chown() on ext4 is not SMP scalable operation.
Due to unconditional orphan_del(NULL, inode) in ext4_setattr()
result in significant performance overhead because of global orphan
mutex, especially in no-journal mode (where orphan_add() is noop).
It is possible to skip explicit orphan_del if possible.
Results of fchown() micro-benchmark in no-journal mode
while (1) {
   iteration++;
   fchown(fd, uid, gid);
   fchown(fd, uid + 1, gid + 1)
}
measured: iterations per millisecond
| nr_tasks | w/o patch | with patch |
|        1 |       142 |        185 |
|        4 |       109 |        642 |

Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/inode.c