From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Fri, 30 Oct 2015 11:14:51 +0000 Subject: [Cluster-devel] [GFS2 PATCH v3 04/14] GFS2: Wait for iopen glock dequeues In-Reply-To: <1445542222-30672-5-git-send-email-rpeterso@redhat.com> References: <1445542222-30672-1-git-send-email-rpeterso@redhat.com> <1445542222-30672-5-git-send-email-rpeterso@redhat.com> Message-ID: <5633512B.7000409@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Acked-by: Steven Whitehouse Steve. On 22/10/15 20:30, Bob Peterson wrote: > This patch changes every glock_dq for iopen glocks into a dq_wait. > This makes sure that iopen glocks do not outlive the inode itself. > In turn, that ensures that anyone trying to unlink the glock will > be able to find the inode when it receives a remote iopen callback. > > Signed-off-by: Bob Peterson > --- > fs/gfs2/inode.c | 3 ++- > fs/gfs2/super.c | 8 +++++--- > 2 files changed, 7 insertions(+), 4 deletions(-) > > diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c > index c56edb8..ce4b793 100644 > --- a/fs/gfs2/inode.c > +++ b/fs/gfs2/inode.c > @@ -191,7 +191,8 @@ struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type, > fail_refresh: > ip->i_iopen_gh.gh_flags |= GL_NOCACHE; > ip->i_iopen_gh.gh_gl->gl_object = NULL; > - gfs2_glock_dq_uninit(&ip->i_iopen_gh); > + gfs2_glock_dq_wait(&ip->i_iopen_gh); > + gfs2_holder_uninit(&ip->i_iopen_gh); > fail_iopen: > if (io_gl) > gfs2_glock_put(io_gl); > diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c > index a691725..555fea0 100644 > --- a/fs/gfs2/super.c > +++ b/fs/gfs2/super.c > @@ -1525,7 +1525,8 @@ static void gfs2_evict_inode(struct inode *inode) > error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, &gh); > if (unlikely(error)) { > ip->i_iopen_gh.gh_flags |= GL_NOCACHE; > - gfs2_glock_dq_uninit(&ip->i_iopen_gh); > + gfs2_glock_dq_wait(&ip->i_iopen_gh); > + gfs2_holder_uninit(&ip->i_iopen_gh); > goto out; > } > > @@ -1597,7 +1598,7 @@ out_unlock: > > if (test_bit(HIF_HOLDER, &ip->i_iopen_gh.gh_iflags)) { > ip->i_iopen_gh.gh_flags |= GL_NOCACHE; > - gfs2_glock_dq(&ip->i_iopen_gh); > + gfs2_glock_dq_wait(&ip->i_iopen_gh); > } > gfs2_holder_uninit(&ip->i_iopen_gh); > gfs2_glock_dq_uninit(&gh); > @@ -1618,7 +1619,8 @@ out: > if (ip->i_iopen_gh.gh_gl) { > ip->i_iopen_gh.gh_gl->gl_object = NULL; > ip->i_iopen_gh.gh_flags |= GL_NOCACHE; > - gfs2_glock_dq_uninit(&ip->i_iopen_gh); > + gfs2_glock_dq_wait(&ip->i_iopen_gh); > + gfs2_holder_uninit(&ip->i_iopen_gh); > } > } >