Whamcloud - gitweb
LU-15162 osd: improve OI lookup concurrency 53/45353/27
authorAlex Zhuravlev <bzzz@whamcloud.com>
Mon, 25 Oct 2021 17:27:15 +0000 (20:27 +0300)
committerOleg Drokin <green@whamcloud.com>
Tue, 21 Mar 2023 23:13:04 +0000 (23:13 +0000)
replace inode->i_mutex with i_rwsem in osd_obj_map_lookup()

Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: Id8df20e00ae254ea4dcf4b10415e1927fac6bd44
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/45353
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Artem Blagodarenko <ablagodarenko@ddn.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
config/lustre-build-ldiskfs.m4
lustre/osd-ldiskfs/osd_compat.c

index 029af81..8871eb5 100644 (file)
@@ -553,6 +553,22 @@ ext4_journal_get_write_access, [
 EXTRA_KCFLAGS="$tmp_flags"
 ]) # LB_EXT4_JOURNAL_GET_WRITE_ACCESS_4A
 
+# LB_HAVE_INODE_LOCK_SHARED
+#
+AC_DEFUN([LB_HAVE_INODE_LOCK_SHARED], [
+LB_CHECK_COMPILE([if inode_lock_shared() defined],
+inode_lock_shared, [
+       #include <linux/fs.h>
+],[
+       struct inode i;
+
+       inode_lock_shared(&i);
+],[
+       AC_DEFINE(HAVE_INODE_LOCK_SHARED, 1,
+               [inode_lock_shared() defined])
+])
+]) # LB_HAVE_INODE_LOCK_SHARED
+
 #
 # LB_CONFIG_LDISKFS
 #
@@ -609,6 +625,7 @@ AS_IF([test x$enable_ldiskfs != xno],[
        LB_EXT4_INC_DEC_COUNT_2ARGS
        LB_JBD2_JOURNAL_GET_MAX_TXN_BUFS
        LB_EXT4_JOURNAL_GET_WRITE_ACCESS_4A
+       LB_HAVE_INODE_LOCK_SHARED
        AC_DEFINE(CONFIG_LDISKFS_FS_POSIX_ACL, 1, [posix acls for ldiskfs])
        AC_DEFINE(CONFIG_LDISKFS_FS_SECURITY, 1, [fs security for ldiskfs])
        AC_DEFINE(CONFIG_LDISKFS_FS_XATTR, 1, [extened attributes for ldiskfs])
index a67533e..eb94da2 100644 (file)
 #include "osd_internal.h"
 #include "osd_oi.h"
 
+#ifndef HAVE_INODE_LOCK_SHARED
+#define inode_lock_shared(dir) inode_lock(dir)
+#define inode_unlock_shared(dir) inode_unlock(dir)
+#endif
+
 static void osd_push_ctxt(const struct osd_device *dev,
                          struct lvfs_run_ctxt *newctxt,
                          struct lvfs_run_ctxt *save)
@@ -1087,9 +1092,9 @@ int osd_obj_map_lookup(struct osd_thread_info *info, struct osd_device *dev,
        child->d_name.len = strlen(name);
 
        dir = d_seq->d_inode;
-       inode_lock(dir);
+       inode_lock_shared(dir);
        bh = osd_ldiskfs_find_entry(dir, &child->d_name, &de, NULL, NULL);
-       inode_unlock(dir);
+       inode_unlock_shared(dir);
 
        if (IS_ERR(bh))
                RETURN(PTR_ERR(bh));