Hi, This is version 3 of my patch set to allow rgrp glock sharing, based on feedback I received from Steve Whitehouse and Andreas Gruenbacher. It improves upon version 2 in the following ways:
1. Comments and descriptions are fixed to match the actual intent of the code. They were previously outdated and incorrect. 2. The rwsem has been replaced by a simple semaphore, since there is no non-exclusive access to the locks yet. 3. The newer versions of the patches don't take the rgrp exclusive lock multiple times for a transaction, so there is no longer a need to track who is holding the semaphore. Therefore all that has been eliminated. 4. Some variable and function names have been renamed to make more sense. The first patch introduces the new glock holder flag that allows multiple tasks on a single node to share a glock held in EX mode. The second patch puts the new holder flag into use for rgrp sharing. Exclusive access to the rgrp is implemented through a new rgrp semaphore and supporting functions. Performance tests done on an earlier prototype indicate the overall throughput is 6X the original code when multiple processes are writing, with vastly improved sharing of the block allocator. Bob Peterson (2): GFS2: Introduce LM_FLAG_NODE_EX holder bit: Node Exclusive sharing GFS2: Introduce rgrp sharing fs/gfs2/bmap.c | 2 +- fs/gfs2/dir.c | 2 +- fs/gfs2/glock.c | 23 ++++++++++--- fs/gfs2/glock.h | 6 ++++ fs/gfs2/incore.h | 2 ++ fs/gfs2/inode.c | 7 ++-- fs/gfs2/rgrp.c | 86 ++++++++++++++++++++++++++++++++++++++++-------- fs/gfs2/rgrp.h | 2 +- fs/gfs2/super.c | 8 +++-- fs/gfs2/xattr.c | 8 +++-- 10 files changed, 116 insertions(+), 30 deletions(-) -- 2.17.0