]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
xfs: Remove mrlock wrapper mrlock
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 6 Sep 2023 18:58:32 +0000 (14:58 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 6 Sep 2023 20:57:50 +0000 (16:57 -0400)
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) <willy@infradead.org>
fs/xfs/mrlock.h [deleted file]
fs/xfs/xfs_inode.c
fs/xfs/xfs_inode.h
fs/xfs/xfs_iops.c
fs/xfs/xfs_linux.h
fs/xfs/xfs_super.c

diff --git a/fs/xfs/mrlock.h b/fs/xfs/mrlock.h
deleted file mode 100644 (file)
index 79155ee..0000000
+++ /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 <linux/rwsem.h>
-
-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__ */
index 3f1aa367f45af883ed0157c6c592e3f2109e273e..48a926df6306da7ea46f276ead8d58dc52eaea71 100644 (file)
@@ -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,7 +363,7 @@ xfs_isilocked(
        uint                    lock_flags)
 {
        if (lock_flags & (XFS_ILOCK_EXCL|XFS_ILOCK_SHARED)) {
-               return __xfs_rwsem_islocked(&ip->i_lock.mr_lock,
+               return __xfs_rwsem_islocked(&ip->i_lock,
                                (lock_flags & XFS_ILOCK_SHARED));
        }
 
index 7547caf2f2abd525010aa046d8b1e93e29d599dd..18941cd21b810151e23be37af642ed144378e2be 100644 (file)
@@ -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 */
 
index 24718adb3c16db9db2daaeba3158427ade065a27..cc35cf01acf64614d6ff2b266192e0e0b76c49ce 100644 (file)
@@ -1275,9 +1275,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);
        }
 
        /*
index 74dcb05069e89b5058b020883b30d740f51d7986..afb5dba18a0aa0e9f719933ad86ed32d454d3326 100644 (file)
@@ -22,7 +22,6 @@ typedef __u32                 xfs_nlink_t;
 #include "xfs_types.h"
 
 #include "kmem.h"
-#include "mrlock.h"
 
 #include <linux/semaphore.h>
 #include <linux/mm.h>
@@ -51,6 +50,7 @@ typedef __u32                 xfs_nlink_t;
 #include <linux/notifier.h>
 #include <linux/delay.h>
 #include <linux/log2.h>
+#include <linux/rwsem.h>
 #include <linux/spinlock.h>
 #include <linux/random.h>
 #include <linux/ctype.h>
index 8185102431301dd25d5e32de167597c0be809717..b4d091b273996f4c8d316eb541fcf371c6bc5d75 100644 (file)
@@ -723,9 +723,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);
 }
 
 /*