From patchwork Tue May 24 19:12:36 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bob Peterson X-Patchwork-Id: 9134163 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id F1010607D7 for ; Tue, 24 May 2016 19:12:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E04B2281FE for ; Tue, 24 May 2016 19:12:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D567C2824F; Tue, 24 May 2016 19:12:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 78C12281FE for ; Tue, 24 May 2016 19:12:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752518AbcEXTMq (ORCPT ); Tue, 24 May 2016 15:12:46 -0400 Received: from mx1.redhat.com ([209.132.183.28]:44926 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751789AbcEXTMn (ORCPT ); Tue, 24 May 2016 15:12:43 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D4954C05D27E; Tue, 24 May 2016 19:12:42 +0000 (UTC) Received: from loki.redhat.com (ovpn-116-126.phx2.redhat.com [10.3.116.126]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u4OJCeLO021530; Tue, 24 May 2016 15:12:42 -0400 From: Bob Peterson To: cluster-devel , Alexander Viro , Subject: [GFS2 PATCH 4/7] GFS2: No need for non-blocking gfs2_ilookup in delete_work_func Date: Tue, 24 May 2016 14:12:36 -0500 Message-Id: <1464117159-17874-5-git-send-email-rpeterso@redhat.com> In-Reply-To: <1464117159-17874-1-git-send-email-rpeterso@redhat.com> References: <1464117159-17874-1-git-send-email-rpeterso@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Tue, 24 May 2016 19:12:42 +0000 (UTC) Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Andreas Gruenbacher In delete_work_func, we are guaranteed not to be holding the glock of the inode we are looking up. If the inode we are looking for is being freed, the lookup is free to block until the inode is gone. (Freeing the inode takes the glock, so we must not already be holding it.) With that, no more non-blocking callers of gfs2_ilookup are left, and the non-block parameter of gfs2_ilookup can be removed. Signed-off-by: Andreas Gruenbacher --- fs/gfs2/export.c | 2 +- fs/gfs2/glock.c | 6 +++--- fs/gfs2/inode.c | 4 ++-- fs/gfs2/inode.h | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fs/gfs2/export.c b/fs/gfs2/export.c index 5d15e94..d5bda85 100644 --- a/fs/gfs2/export.c +++ b/fs/gfs2/export.c @@ -137,7 +137,7 @@ static struct dentry *gfs2_get_dentry(struct super_block *sb, struct gfs2_sbd *sdp = sb->s_fs_info; struct inode *inode; - inode = gfs2_ilookup(sb, inum->no_addr, 0); + inode = gfs2_ilookup(sb, inum->no_addr); if (inode) { if (GFS2_I(inode)->i_no_formal_ino != inum->no_formal_ino) { iput(inode); diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index e648b07..ce46375 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -576,7 +576,7 @@ static void delete_work_func(struct work_struct *work) struct gfs2_glock *gl = container_of(work, struct gfs2_glock, gl_delete); struct gfs2_sbd *sdp = gl->gl_name.ln_sbd; struct gfs2_inode *ip; - struct inode *inode; + struct inode *inode = NULL; u64 no_addr = gl->gl_name.ln_number; /* If someone's using this glock to create a new dinode, the block must @@ -589,8 +589,8 @@ static void delete_work_func(struct work_struct *work) /* Note: Unsafe to dereference ip as we don't hold right refs/locks */ if (ip) - inode = gfs2_ilookup(sdp->sd_vfs, no_addr, 1); - else + inode = gfs2_ilookup(sdp->sd_vfs, no_addr); + if (IS_ERR_OR_NULL(inode)) inode = gfs2_lookup_by_inum(sdp, no_addr, NULL, GFS2_BLKST_UNLINKED); if (inode && !IS_ERR(inode)) { d_prune_aliases(inode); diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index a752110..5dff5da 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c @@ -71,14 +71,14 @@ static int iget_set(struct inode *inode, void *opaque) return 0; } -struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr, int non_block) +struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr) { unsigned long hash = (unsigned long)no_addr; struct gfs2_skip_data data; data.no_addr = no_addr; data.skipped = 0; - data.non_block = non_block; + data.non_block = 0; return ilookup5(sb, hash, iget_test, &data); } diff --git a/fs/gfs2/inode.h b/fs/gfs2/inode.h index ba4d949..22c27a8 100644 --- a/fs/gfs2/inode.h +++ b/fs/gfs2/inode.h @@ -99,7 +99,7 @@ extern struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned type, extern struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr, u64 *no_formal_ino, unsigned int blktype); -extern struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr, int nonblock); +extern struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr); extern int gfs2_inode_refresh(struct gfs2_inode *ip);