From patchwork Thu Sep 7 17:47:04 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Wilcox X-Patchwork-Id: 13376737 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 35743EC8726 for ; Thu, 7 Sep 2023 17:47:36 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id EA2D28E0002; Thu, 7 Sep 2023 13:47:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E01B78E0001; Thu, 7 Sep 2023 13:47:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CA2DD8E0002; Thu, 7 Sep 2023 13:47:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id B0F838E0001 for ; Thu, 7 Sep 2023 13:47:32 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 92E63A101A for ; Thu, 7 Sep 2023 17:47:32 +0000 (UTC) X-FDA: 81210533544.17.F0410D7 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf24.hostedemail.com (Postfix) with ESMTP id D5B2118002F for ; Thu, 7 Sep 2023 17:47:30 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=IUhGTa9X; spf=none (imf24.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1694108851; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=dLYM3HXjdvUc/PUnwBXHfAR8RDp8UcgjgxntIo4zvgo=; b=vpc1YzJj9FtrY2b7sAE0FDySBBx2CyeW0UhiDCqRnQh9tSolzhvsMoEjCO7CNc32YowLB0 U83jsBXZ2OtZ/zuT8T+m7w3PRGMQxC/10rpHvInPcyB9C989NuF/ZqvY3usYTEd66Tfy5Y rrBsnVN8rsprdrjCjlL4Ela3Dx/oDd8= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694108851; a=rsa-sha256; cv=none; b=i6L5Sgqt0foXvtOleTK5yLp2xiK7ATBjpjWehvw+aEQi/Za+syz7832DKAbooCIzXIhNK/ UXE8QBXZxMqKa7z/gfZlgjN5HjYooPffh6H0QWRT4wlReTvG0sBBl2e7nLgdiFUa2yFqLc hg/z3lDhI+GcI/NR9RdKBcF1duBXaNY= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=IUhGTa9X; spf=none (imf24.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=dLYM3HXjdvUc/PUnwBXHfAR8RDp8UcgjgxntIo4zvgo=; b=IUhGTa9XHd7qtXmUgCIBha1owW sumH5DrguJTy94/25NAUDFeNSW5ijVnKvnlor6oG0tTRwRd1f4ddogPx2ZwBXXFsv1MCi4bPfMZ10 BiR9QgJlseF/ssmAd+mjYHXLebY/syL/0CGKCK2CoySItJ2TrMofGj4zYJHDku1zIvAVUcobcr8tG /q1td2ktz4JAqNne9wtQnAJUCEDaVoMqnlLRFetH47IRdETALDmMJ/2MCIOVEMtn77Uxok0/CoPKX J7Lkre49BxeCLfH7i1xc7GKuJK/RTpCXU1Zsg/MbtvaKv62N6naN49nuSeBinoLJhOoUN1Xijm38l gA8JfIzQ==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1qeJ5w-00CUFR-5j; Thu, 07 Sep 2023 17:47:08 +0000 From: "Matthew Wilcox (Oracle)" To: Peter Zijlstra , Ingo Molnar , Will Deacon , Waiman Long Cc: "Matthew Wilcox (Oracle)" , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Chandan Babu R , "Darrick J . Wong" , linux-xfs@vger.kernel.org Subject: [PATCH 4/5] xfs: Remove mrlock wrapper Date: Thu, 7 Sep 2023 18:47:04 +0100 Message-Id: <20230907174705.2976191-5-willy@infradead.org> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20230907174705.2976191-1-willy@infradead.org> References: <20230907174705.2976191-1-willy@infradead.org> MIME-Version: 1.0 X-Stat-Signature: zsrmzz47bqxy8k8mhmjipety5hdj399e X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: D5B2118002F X-Rspam-User: X-HE-Tag: 1694108850-142719 X-HE-Meta: U2FsdGVkX1/UOl0PLA4+VG9AHD5+l+sxCheO85JUzt0HwAiRAA3Jbz4R8dlZtxHf/cJWXci2RNFzKUcvFwHeNLFQfUKvCJoY2fJ9XgWF4PU+cz7hniBZUPTvwPSQznrcQEVCb/yIPzxLer0Srp9gjRMEVq6h5jycDlG7qAc/ugYl1vBa1mJ2u2y2lo7rNq1XtIFbLvnQXAA3UpTQLJZjUKW6nVRW/tVVAEGYTD+9nOPyYkkY2Uu5tcEq/FPo66pZUuhiiNTfeomQhiMGyZrqpZsR0n8DByFGVFekv7oU6WIVAkjt3DVDuV8DQ1OlkDPD6YcCWFXfW9FTi/PoQK+/JGUY0OYU64AOha8wnUhdx89VZl7ZZ1+af2nt1qhF7ugfk4B8MOOP46j+tgcaucFUlef+7KSinTMfcXnPfxmVHZIt5+qBkxCJLDu4MCPOeWT3uXjlsSfN23bifOoyq4AuOPOjnCF/4q2qsYDdM54OSyckrNE3z9AIpIs7PaJzbIsTGAjZLt11jZv8SU6mY5ChcGQBWqNCY7uuOcEoggAUY0NWjNV0r/ED3aION0SLr7v3Ta/MM7KfUuZY9Y/UGPeP1C5kz9x3tTC/95sXfphKH0r/PqEBzuk0D5+xPfA8hdriRSRFj0uIdv/uKHIOsGYuNT0F582FOFM0NOEt0NYjxG2adIjZKJh46fKz7MHyqsGgHfPeA+0NO0cVpGPl29N3pbOMdjrRyqK2PqLOCUzdEzIYZ2IZR2TWiAfsJvSjA/p0akv1ndtny53z8LuchO0kxkxr2U5bAwLJhPCfS+I9WJAbHW4zcNjf/+NVeJrC6KxdNmJmIfMJPfxD0LGi2xH+5j676sTh0ZmeWWEgx6p/HaSY+/aO4wZSN3gYtKEzQ6amQarKZFUbBNg2zyIvDaKV4MgLnKfh2cipmSAOX3+JmaFSE/7hAiLSagmZ1BIOl+J6yGRrOjBJn3SYvLOu86k 5iCM+lSy 7i6Lsc4qdzrd9pWXQMhQ8G/GI7DvdHstQei+ugLWY32L6WJNUG1qlHdAqkUjhpwweQfZfaJ2ByJD1zbEUXVDrG4OCTkKsDnWL+w3ma0lRIx3trd0ga6Pi8az9PBhh85F0J9dulQzW5yHgsrs0ck3Psev5u2CD4e9Cz9NOZqHxB44gKCdvGdiM+kxWRm/P9+KIHImHuBQt/wIth7s= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: mrlock was an rwsem wrapper that also recorded whether the lock was held for read or write. Now that we can ask the generic code whether the lock is held for read or write, we can remove this wrapper and use an rwsem directly. Signed-off-by: Matthew Wilcox (Oracle) --- fs/xfs/mrlock.h | 78 ---------------------------------------------- fs/xfs/xfs_inode.c | 18 +++++------ fs/xfs/xfs_inode.h | 2 +- fs/xfs/xfs_iops.c | 4 +-- fs/xfs/xfs_linux.h | 2 +- fs/xfs/xfs_super.c | 4 +-- 6 files changed, 14 insertions(+), 94 deletions(-) delete mode 100644 fs/xfs/mrlock.h diff --git a/fs/xfs/mrlock.h b/fs/xfs/mrlock.h deleted file mode 100644 index 79155eec341b..000000000000 --- a/fs/xfs/mrlock.h +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Copyright (c) 2000-2006 Silicon Graphics, Inc. - * All Rights Reserved. - */ -#ifndef __XFS_SUPPORT_MRLOCK_H__ -#define __XFS_SUPPORT_MRLOCK_H__ - -#include - -typedef struct { - struct rw_semaphore mr_lock; -#if defined(DEBUG) || defined(XFS_WARN) - int mr_writer; -#endif -} mrlock_t; - -#if defined(DEBUG) || defined(XFS_WARN) -#define mrinit(mrp, name) \ - do { (mrp)->mr_writer = 0; init_rwsem(&(mrp)->mr_lock); } while (0) -#else -#define mrinit(mrp, name) \ - do { init_rwsem(&(mrp)->mr_lock); } while (0) -#endif - -#define mrlock_init(mrp, t,n,s) mrinit(mrp, n) -#define mrfree(mrp) do { } while (0) - -static inline void mraccess_nested(mrlock_t *mrp, int subclass) -{ - down_read_nested(&mrp->mr_lock, subclass); -} - -static inline void mrupdate_nested(mrlock_t *mrp, int subclass) -{ - down_write_nested(&mrp->mr_lock, subclass); -#if defined(DEBUG) || defined(XFS_WARN) - mrp->mr_writer = 1; -#endif -} - -static inline int mrtryaccess(mrlock_t *mrp) -{ - return down_read_trylock(&mrp->mr_lock); -} - -static inline int mrtryupdate(mrlock_t *mrp) -{ - if (!down_write_trylock(&mrp->mr_lock)) - return 0; -#if defined(DEBUG) || defined(XFS_WARN) - mrp->mr_writer = 1; -#endif - return 1; -} - -static inline void mrunlock_excl(mrlock_t *mrp) -{ -#if defined(DEBUG) || defined(XFS_WARN) - mrp->mr_writer = 0; -#endif - up_write(&mrp->mr_lock); -} - -static inline void mrunlock_shared(mrlock_t *mrp) -{ - up_read(&mrp->mr_lock); -} - -static inline void mrdemote(mrlock_t *mrp) -{ -#if defined(DEBUG) || defined(XFS_WARN) - mrp->mr_writer = 0; -#endif - downgrade_write(&mrp->mr_lock); -} - -#endif /* __XFS_SUPPORT_MRLOCK_H__ */ diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index e58d84d23f49..c3cd73c29868 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -208,9 +208,9 @@ xfs_ilock( } if (lock_flags & XFS_ILOCK_EXCL) - mrupdate_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); + down_write_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); else if (lock_flags & XFS_ILOCK_SHARED) - mraccess_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); + down_read_nested(&ip->i_lock, XFS_ILOCK_DEP(lock_flags)); } /* @@ -251,10 +251,10 @@ xfs_ilock_nowait( } if (lock_flags & XFS_ILOCK_EXCL) { - if (!mrtryupdate(&ip->i_lock)) + if (!down_write_trylock(&ip->i_lock)) goto out_undo_mmaplock; } else if (lock_flags & XFS_ILOCK_SHARED) { - if (!mrtryaccess(&ip->i_lock)) + if (!down_read_trylock(&ip->i_lock)) goto out_undo_mmaplock; } return 1; @@ -303,9 +303,9 @@ xfs_iunlock( up_read(&VFS_I(ip)->i_mapping->invalidate_lock); if (lock_flags & XFS_ILOCK_EXCL) - mrunlock_excl(&ip->i_lock); + up_write(&ip->i_lock); else if (lock_flags & XFS_ILOCK_SHARED) - mrunlock_shared(&ip->i_lock); + up_read(&ip->i_lock); trace_xfs_iunlock(ip, lock_flags, _RET_IP_); } @@ -324,7 +324,7 @@ xfs_ilock_demote( ~(XFS_IOLOCK_EXCL|XFS_MMAPLOCK_EXCL|XFS_ILOCK_EXCL)) == 0); if (lock_flags & XFS_ILOCK_EXCL) - mrdemote(&ip->i_lock); + downgrade_write(&ip->i_lock); if (lock_flags & XFS_MMAPLOCK_EXCL) downgrade_write(&VFS_I(ip)->i_mapping->invalidate_lock); if (lock_flags & XFS_IOLOCK_EXCL) @@ -363,9 +363,9 @@ xfs_isilocked( uint lock_flags) { if (lock_flags & XFS_ILOCK_SHARED) - return rwsem_is_locked(&ip->i_lock.mr_lock); + return rwsem_is_locked(&ip->i_lock); if (lock_flags & XFS_ILOCK_EXCL) - return rwsem_is_write_locked(&ip->i_lock.mr_lock); + return rwsem_is_write_locked(&ip->i_lock); if (lock_flags & (XFS_MMAPLOCK_EXCL|XFS_MMAPLOCK_SHARED)) { return __xfs_rwsem_islocked(&VFS_I(ip)->i_mapping->invalidate_lock, (lock_flags & XFS_MMAPLOCK_SHARED)); diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 7547caf2f2ab..18941cd21b81 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -39,7 +39,7 @@ typedef struct xfs_inode { /* Transaction and locking information. */ struct xfs_inode_log_item *i_itemp; /* logging information */ - mrlock_t i_lock; /* inode lock */ + struct rw_semaphore i_lock; /* inode lock */ atomic_t i_pincount; /* inode pin count */ struct llist_node i_gclist; /* deferred inactivation list */ diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c index 2ededd3f6b8c..ba64c9c5d3ab 100644 --- a/fs/xfs/xfs_iops.c +++ b/fs/xfs/xfs_iops.c @@ -1280,9 +1280,9 @@ xfs_setup_inode( */ lockdep_set_class(&inode->i_rwsem, &inode->i_sb->s_type->i_mutex_dir_key); - lockdep_set_class(&ip->i_lock.mr_lock, &xfs_dir_ilock_class); + lockdep_set_class(&ip->i_lock, &xfs_dir_ilock_class); } else { - lockdep_set_class(&ip->i_lock.mr_lock, &xfs_nondir_ilock_class); + lockdep_set_class(&ip->i_lock, &xfs_nondir_ilock_class); } /* diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h index e9d317a3dafe..15fdaef578fe 100644 --- a/fs/xfs/xfs_linux.h +++ b/fs/xfs/xfs_linux.h @@ -22,7 +22,6 @@ typedef __u32 xfs_nlink_t; #include "xfs_types.h" #include "kmem.h" -#include "mrlock.h" #include #include @@ -51,6 +50,7 @@ typedef __u32 xfs_nlink_t; #include #include #include +#include #include #include #include diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 1f77014c6e1a..d190afbcfe04 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -739,9 +739,7 @@ xfs_fs_inode_init_once( /* xfs inode */ atomic_set(&ip->i_pincount, 0); spin_lock_init(&ip->i_flags_lock); - - mrlock_init(&ip->i_lock, MRLOCK_ALLOW_EQUAL_PRI|MRLOCK_BARRIER, - "xfsino", ip->i_ino); + init_rwsem(&ip->i_lock); } /*