Creating a file on gfs2 is broken down into several transactions, at least some of which should be merged for greater performance. In addition, it should also be possible to reduce the number of directory lookups which are required further improving the situation.
Due to recent updated to the upstream code, this task is becoming easier. The ACL/xattr updates were a first part of this, and the currently pending changes to eliminate ops_inode.c are another step towards this goal.
As of today, another set of patches have gone into the -nmw git tree which clean up the inode creation code. We are another step closer to this goal now that it is possible to see the wood for the trees in this area.
Created attachment 587836 [details] GFS2: combine functions alloc_dinode and make_dinode This experimental RHEL6 patch combines two of the transactions by combining functions alloc_dinode and make_dinode. Getting the lock ordering was quite tricky. The good news is that it passed the SAS calibration workload, which is a brutal workout. The bad news is that it didn't seem to improve GFS2 performance noticeably. So I don't know if we want to pursue this or not.
An initial patch for this has been posted to cluster-devel today. There is still further work to do, but the initial patch has resolved the ordering issue between creation on the incore inode and the other processes required, so that this should now become much easier to do.
Another step in the right direction: https://git.kernel.org/cgit/linux/kernel/git/steve/gfs2-3.0-nmw.git/commit/fs/gfs2?id=b2c8b3ea871e478ac144f617d015d3aa55fc3aa8