Commit 6246dab1 authored by Dmitry Eremin's avatar Dmitry Eremin Committed by Greg Kroah-Hartman

staging/lustre: replace semaphores with mutexes

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: default avatarDmitry Eremin <dmitry.eremin@intel.com>
Reviewed-on: http://review.whamcloud.com/9294
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4588Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Reviewed-by: default avatarJohn L. Hammond <john.hammond@intel.com>
Reviewed-by: default avatarJames Simmons <uja.ornl@gmail.com>
Reviewed-by: default avatarAlex Zhuravlev <alexey.zhuravlev@intel.com>
Signed-off-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5426ba66
...@@ -94,19 +94,6 @@ struct obd_client_handle { ...@@ -94,19 +94,6 @@ struct obd_client_handle {
void statfs_pack(struct obd_statfs *osfs, struct kstatfs *sfs); void statfs_pack(struct obd_statfs *osfs, struct kstatfs *sfs);
void statfs_unpack(struct kstatfs *sfs, struct obd_statfs *osfs); 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 * For md echo client
*/ */
......
...@@ -406,7 +406,7 @@ struct client_obd { ...@@ -406,7 +406,7 @@ struct client_obd {
struct mdc_rpc_lock *cl_close_lock; struct mdc_rpc_lock *cl_close_lock;
/* mgc datastruct */ /* mgc datastruct */
struct semaphore cl_mgc_sem; struct mutex cl_mgc_mutex;
struct local_oid_storage *cl_mgc_los; struct local_oid_storage *cl_mgc_los;
struct dt_object *cl_mgc_configs_dir; struct dt_object *cl_mgc_configs_dir;
atomic_t cl_mgc_refcount; atomic_t cl_mgc_refcount;
......
...@@ -325,7 +325,7 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg) ...@@ -325,7 +325,7 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg)
} }
init_rwsem(&cli->cl_sem); init_rwsem(&cli->cl_sem);
sema_init(&cli->cl_mgc_sem, 1); mutex_init(&cli->cl_mgc_mutex);
cli->cl_conn_count = 0; cli->cl_conn_count = 0;
memcpy(server_uuid.uuid, lustre_cfg_buf(lcfg, 2), memcpy(server_uuid.uuid, lustre_cfg_buf(lcfg, 2),
min_t(unsigned int, LUSTRE_CFG_BUFLEN(lcfg, 2), min_t(unsigned int, LUSTRE_CFG_BUFLEN(lcfg, 2),
......
...@@ -71,7 +71,7 @@ struct cfs_cpt_data { ...@@ -71,7 +71,7 @@ struct cfs_cpt_data {
/* reserved for hotplug */ /* reserved for hotplug */
unsigned long cpt_version; unsigned long cpt_version;
/* mutex to protect cpt_cpumask */ /* mutex to protect cpt_cpumask */
struct semaphore cpt_mutex; struct mutex cpt_mutex;
/* scratch buffer for set/unset_node */ /* scratch buffer for set/unset_node */
cpumask_t *cpt_cpumask; cpumask_t *cpt_cpumask;
}; };
...@@ -420,14 +420,14 @@ cfs_cpt_set_node(struct cfs_cpt_table *cptab, int cpt, int node) ...@@ -420,14 +420,14 @@ cfs_cpt_set_node(struct cfs_cpt_table *cptab, int cpt, int node)
return 0; return 0;
} }
down(&cpt_data.cpt_mutex); mutex_lock(&cpt_data.cpt_mutex);
mask = cpt_data.cpt_cpumask; mask = cpt_data.cpt_cpumask;
cfs_node_to_cpumask(node, mask); cfs_node_to_cpumask(node, mask);
rc = cfs_cpt_set_cpumask(cptab, cpt, mask); rc = cfs_cpt_set_cpumask(cptab, cpt, mask);
up(&cpt_data.cpt_mutex); mutex_unlock(&cpt_data.cpt_mutex);
return rc; return rc;
} }
...@@ -444,14 +444,14 @@ cfs_cpt_unset_node(struct cfs_cpt_table *cptab, int cpt, int node) ...@@ -444,14 +444,14 @@ cfs_cpt_unset_node(struct cfs_cpt_table *cptab, int cpt, int node)
return; return;
} }
down(&cpt_data.cpt_mutex); mutex_lock(&cpt_data.cpt_mutex);
mask = cpt_data.cpt_cpumask; mask = cpt_data.cpt_cpumask;
cfs_node_to_cpumask(node, mask); cfs_node_to_cpumask(node, mask);
cfs_cpt_unset_cpumask(cptab, cpt, 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); EXPORT_SYMBOL(cfs_cpt_unset_node);
...@@ -969,11 +969,11 @@ cfs_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu) ...@@ -969,11 +969,11 @@ cfs_cpu_notify(struct notifier_block *self, unsigned long action, void *hcpu)
break; break;
} }
down(&cpt_data.cpt_mutex); mutex_lock(&cpt_data.cpt_mutex);
/* if all HTs in a core are offline, it may break affinity */ /* if all HTs in a core are offline, it may break affinity */
cfs_cpu_ht_siblings(cpu, cpt_data.cpt_cpumask); cfs_cpu_ht_siblings(cpu, cpt_data.cpt_cpumask);
warn = any_online_cpu(*cpt_data.cpt_cpumask) >= nr_cpu_ids; 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, CDEBUG(warn ? D_WARNING : D_INFO,
"Lustre: can't support CPU plug-out well now, " "Lustre: can't support CPU plug-out well now, "
"performance and stability could be impacted " "performance and stability could be impacted "
...@@ -1017,7 +1017,7 @@ cfs_cpu_init(void) ...@@ -1017,7 +1017,7 @@ cfs_cpu_init(void)
} }
spin_lock_init(&cpt_data.cpt_lock); spin_lock_init(&cpt_data.cpt_lock);
sema_init(&cpt_data.cpt_mutex, 1); mutex_init(&cpt_data.cpt_mutex);
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
register_hotcpu_notifier(&cfs_cpu_notifier); register_hotcpu_notifier(&cfs_cpu_notifier);
......
...@@ -672,8 +672,8 @@ static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb) ...@@ -672,8 +672,8 @@ static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb)
if (env == NULL) if (env == NULL)
return -ENOMEM; return -ENOMEM;
/* The mgc fs exclusion sem. Only one fs can be setup at a time. */ /* The mgc fs exclusion mutex. Only one fs can be setup at a time. */
down(&cli->cl_mgc_sem); mutex_lock(&cli->cl_mgc_mutex);
cfs_cleanup_group_info(); cfs_cleanup_group_info();
...@@ -727,7 +727,7 @@ static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb) ...@@ -727,7 +727,7 @@ static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb)
if (rc < 0) { if (rc < 0) {
local_oid_storage_fini(env, cli->cl_mgc_los); local_oid_storage_fini(env, cli->cl_mgc_los);
cli->cl_mgc_los = NULL; cli->cl_mgc_los = NULL;
up(&cli->cl_mgc_sem); mutex_unlock(&cli->cl_mgc_mutex);
} }
out_env: out_env:
lu_env_fini(env); lu_env_fini(env);
...@@ -759,7 +759,7 @@ static int mgc_fs_cleanup(struct obd_device *obd) ...@@ -759,7 +759,7 @@ static int mgc_fs_cleanup(struct obd_device *obd)
unlock: unlock:
class_decref(obd, "mgc_fs", obd); class_decref(obd, "mgc_fs", obd);
up(&cli->cl_mgc_sem); mutex_unlock(&cli->cl_mgc_mutex);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment