From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 11/16] GFS2: skip dlm_unlock calls in unmount
Date: Fri, 30 Nov 2012 09:52:16 +0000 [thread overview]
Message-ID: <1354269141-3311-12-git-send-email-swhiteho@redhat.com> (raw)
In-Reply-To: <1354269141-3311-1-git-send-email-swhiteho@redhat.com>
From: David Teigland <teigland@redhat.com>
When unmounting, gfs2 does a full dlm_unlock operation on every
cached lock. This can create a very large amount of work and can
take a long time to complete. However, the vast majority of these
dlm unlock operations are unnecessary because after all the unlocks
are done, gfs2 leaves the dlm lockspace, which automatically clears
the locks of the leaving node, without unlocking each one individually.
So, gfs2 can skip explicit dlm unlocks, and use dlm_release_lockspace to
remove the locks implicitly. The one exception is when the lock's lvb is
being used. In this case, dlm_unlock is called because it may update the
lvb of the resource.
Signed-off-by: David Teigland <teigland@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index 6114571..9d29a51 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -1526,6 +1526,7 @@ static void dump_glock_func(struct gfs2_glock *gl)
void gfs2_gl_hash_clear(struct gfs2_sbd *sdp)
{
+ set_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags);
glock_hash_walk(clear_glock, sdp);
flush_workqueue(glock_workqueue);
wait_event(sdp->sd_glock_wait, atomic_read(&sdp->sd_glock_disposal) == 0);
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
index a46f034..a35ef5c 100644
--- a/fs/gfs2/incore.h
+++ b/fs/gfs2/incore.h
@@ -539,6 +539,7 @@ enum {
SDF_DEMOTE = 5,
SDF_NOJOURNALID = 6,
SDF_RORECOVERY = 7, /* read only recovery */
+ SDF_SKIP_DLM_UNLOCK = 8,
};
#define GFS2_FSNAME_LEN 256
diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c
index 0fb6539..f6504d3 100644
--- a/fs/gfs2/lock_dlm.c
+++ b/fs/gfs2/lock_dlm.c
@@ -289,6 +289,14 @@ static void gdlm_put_lock(struct gfs2_glock *gl)
gfs2_glstats_inc(gl, GFS2_LKS_DCOUNT);
gfs2_sbstats_inc(gl, GFS2_LKS_DCOUNT);
gfs2_update_request_times(gl);
+
+ /* don't want to skip dlm_unlock writing the lvb when lock is ex */
+ if (test_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags) &&
+ gl->gl_state != LM_ST_EXCLUSIVE) {
+ gfs2_glock_free(gl);
+ return;
+ }
+
error = dlm_unlock(ls->ls_dlm, gl->gl_lksb.sb_lkid, DLM_LKF_VALBLK,
NULL, gl);
if (error) {
--
1.7.4
next prev parent reply other threads:[~2012-11-30 9:52 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-30 9:52 [Cluster-devel] GFS2: Pre-pull patch posting (merge window) Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 01/16] GFS2: Review bug traps in glops.c Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 02/16] GFS2: Speed up gfs2_rbm_from_block Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 03/16] GFS2: Rename glops go_xmote_th to go_sync Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 04/16] GFS2: Add test for resource group congestion status Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 05/16] GFS2: Use proper allocation context for new inodes Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 06/16] GFS2: Add Orlov allocator Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 07/16] GFS2: Fix truncation of journaled data files Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 08/16] GFS2: Use dirty_inode in gfs2_dir_add Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 09/16] GFS2: Eliminate redundant buffer_head manipulation in gfs2_unlink_inode Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 10/16] GFS2: Fix one RG corner case Steven Whitehouse
2012-11-30 9:52 ` Steven Whitehouse [this message]
2012-11-30 9:52 ` [Cluster-devel] [PATCH 12/16] GFS2: only use lvb on glocks that need it Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 13/16] GFS2: remove redundant lvb pointer Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 14/16] GFS2: don't reference inode's glock during block allocation trace Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 15/16] GFS2: add error check while allocating new inodes Steven Whitehouse
2012-11-30 9:52 ` [Cluster-devel] [PATCH 16/16] GFS2: Set gl_object during inode create Steven Whitehouse
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1354269141-3311-12-git-send-email-swhiteho@redhat.com \
--to=swhiteho@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).