staging/lustre: replace semaphores with mutexes
authorDmitry Eremin <dmitry.eremin@intel.com>
Sun, 27 Apr 2014 17:06:59 +0000 (13:06 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 27 Apr 2014 17:30:59 +0000 (10:30 -0700)
It's just optimization. The mutex subsystem is slightly faster
and has better scalability for contended workloads.

Remove the lustre_lock and it's accessor functions l_lock(),
l_unlock(), l_lock_init(), and l_has_lock() since they have
not been used by the code since Lustre 1.6.

Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
Reviewed-on: http://review.whamcloud.com/9294
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4588
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Signed-off-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lustre/include/lustre_lib.h
drivers/staging/lustre/lustre/include/obd.h
drivers/staging/lustre/lustre/ldlm/ldlm_lib.c
drivers/staging/lustre/lustre/libcfs/linux/linux-cpu.c
drivers/staging/lustre/lustre/mgc/mgc_request.c

index 0368ca6ffcc1cdee96f3899c5b8e431e5b98db9f..bdc981214805eddc8e3beb32ff01c727c362796c 100644 (file)
@@ -94,19 +94,6 @@ struct obd_client_handle {
 void statfs_pack(struct obd_statfs *osfs, struct kstatfs *sfs);
 void statfs_unpack(struct kstatfs *sfs, struct obd_statfs *osfs);
 
-/* l_lock.c */
-struct lustre_lock {
-       int                     l_depth;
-       struct task_struct      *l_owner;
-       struct semaphore        l_sem;
-       spinlock_t              l_spin;
-};
-
-void l_lock_init(struct lustre_lock *);
-void l_lock(struct lustre_lock *);
-void l_unlock(struct lustre_lock *);
-int l_has_lock(struct lustre_lock *);
-
 /*
  * For md echo client
  */
index 7ed5fcd7f86dbf51cf3fae6893b318e947a495a3..d5c4613f182d934f282c685502bf0ffa61fa2219 100644 (file)
@@ -406,7 +406,7 @@ struct client_obd {
        struct mdc_rpc_lock     *cl_close_lock;
 
        /* mgc datastruct */
-       struct semaphore         cl_mgc_sem;
+       struct mutex             cl_mgc_mutex;
        struct local_oid_storage *cl_mgc_los;
        struct dt_object        *cl_mgc_configs_dir;
        atomic_t             cl_mgc_refcount;
index 42f5f1e54fcc149f07f013a7bd9a48ae1770c20b..8bb59155968f9e8991ba32075ecc1f3161a3d69d 100644 (file)
@@ -325,7 +325,7 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg)
        }
 
        init_rwsem(&cli->cl_sem);
-       sema_init(&cli->cl_mgc_sem, 1);
+       mutex_init(&cli->cl_mgc_mutex);
        cli->cl_conn_count = 0;
        memcpy(server_uuid.uuid, lustre_cfg_buf(lcfg, 2),
               min_t(unsigned int, LUSTRE_CFG_BUFLEN(lcfg, 2),
index d169374eb98dd0504ddb0662930d8a177241335e..fc21210d77ec9a32955fb894f5d045cb125842f6 100644 (file)
@@ -71,7 +71,7 @@ struct cfs_cpt_data {
        /* reserved for hotplug */
        unsigned long           cpt_version;
        /* mutex to protect cpt_cpumask */
-       struct semaphore        cpt_mutex;
+       struct mutex            cpt_mutex;
        /* scratch buffer for set/unset_node */
        cpumask_t               *cpt_cpumask;
 };
@@ -420,14 +420,14 @@ cfs_cpt_set_node(struct cfs_cpt_table *cptab, int cpt, int node)
                return 0;
        }
 
-       down(&cpt_data.cpt_mutex);
+       mutex_lock(&cpt_data.cpt_mutex);
 
        mask = cpt_data.cpt_cpumask;
        cfs_node_to_cpumask(node, mask);
 
        rc = cfs_cpt_set_cpumask(cptab, cpt, mask);
 
-       up(&cpt_data.cpt_mutex);
+       mutex_unlock(&cpt_data.cpt_mutex);
 
        return rc;
 }
@@ -444,14 +444,14 @@ cfs_cpt_unset_node(struct cfs_cpt_table *cptab, int cpt, int node)
                return;
        }
 
-       down(&cpt_data.cpt_mutex);
+       mutex_lock(&cpt_data.cpt_mutex);
 
        mask = cpt_data.cpt_cpumask;
        cfs_node_to_cpumask(node, mask);
 
        cfs_cpt_unset_cpumask(cptab, cpt, mask);
 
-       up(&cpt_data.cpt_mutex);
+       mutex_unlock(&cpt_data.cpt_mutex);
 }
 EXPORT_SYMBOL(cfs_cpt_unset_node);
 
@@ -969,11 +969,11 @@ cfs_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu)
                        break;
                }
 
-               down(&cpt_data.cpt_mutex);
+               mutex_lock(&cpt_data.cpt_mutex);
                /* if all HTs in a core are offline, it may break affinity */
                cfs_cpu_ht_siblings(cpu, cpt_data.cpt_cpumask);
                warn = any_online_cpu(*cpt_data.cpt_cpumask) >= nr_cpu_ids;
-               up(&cpt_data.cpt_mutex);
+               mutex_unlock(&cpt_data.cpt_mutex);
                CDEBUG(warn ? D_WARNING : D_INFO,
                       "Lustre: can't support CPU plug-out well now, "
                       "performance and stability could be impacted "
@@ -1017,7 +1017,7 @@ cfs_cpu_init(void)
        }
 
        spin_lock_init(&cpt_data.cpt_lock);
-       sema_init(&cpt_data.cpt_mutex, 1);
+       mutex_init(&cpt_data.cpt_mutex);
 
 #ifdef CONFIG_HOTPLUG_CPU
        register_hotcpu_notifier(&cfs_cpu_notifier);
index de9fb1433eddf7ea7d02e3d33256dd45f2cf18f5..a806aeffe026188962db81911f4ee39d442273a4 100644 (file)
@@ -672,8 +672,8 @@ static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb)
        if (env == NULL)
                return -ENOMEM;
 
-       /* The mgc fs exclusion sem. Only one fs can be setup at a time. */
-       down(&cli->cl_mgc_sem);
+       /* The mgc fs exclusion mutex. Only one fs can be setup at a time. */
+       mutex_lock(&cli->cl_mgc_mutex);
 
        cfs_cleanup_group_info();
 
@@ -727,7 +727,7 @@ out_los:
        if (rc < 0) {
                local_oid_storage_fini(env, cli->cl_mgc_los);
                cli->cl_mgc_los = NULL;
-               up(&cli->cl_mgc_sem);
+               mutex_unlock(&cli->cl_mgc_mutex);
        }
 out_env:
        lu_env_fini(env);
@@ -759,7 +759,7 @@ static int mgc_fs_cleanup(struct obd_device *obd)
 
 unlock:
        class_decref(obd, "mgc_fs", obd);
-       up(&cli->cl_mgc_sem);
+       mutex_unlock(&cli->cl_mgc_mutex);
 
        return 0;
 }