Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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-4588


Reviewed-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
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -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
 */
+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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),
+8 −8
Original line number Diff line number Diff line
@@ -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);
+4 −4
Original line number Diff line number Diff line
@@ -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 @@ static int mgc_fs_setup(struct obd_device *obd, struct super_block *sb)
	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;
}