Commit f2d928f9 authored by Quentin Bouget's avatar Quentin Bouget Committed by Greg Kroah-Hartman
Browse files

staging: lustre: lnet: potential deadlock in lnet

parent a1194ad6
Loading
Loading
Loading
Loading
+13 −11
Original line number Diff line number Diff line
@@ -292,11 +292,12 @@ LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd,
		return -ENOMEM;

	rc = lnet_md_build(md, &umd, unlink);
	if (rc)
		goto out_free;

	cpt = lnet_cpt_of_cookie(meh.cookie);

	lnet_res_lock(cpt);
	if (rc)
		goto failed;

	me = lnet_handle2me(&meh);
	if (!me)
@@ -307,7 +308,7 @@ LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd,
		rc = lnet_md_link(md, umd.eq_handle, cpt);

	if (rc)
		goto failed;
		goto out_unlock;

	/*
	 * attach this MD to portal of ME and check if it matches any
@@ -324,10 +325,10 @@ LNetMDAttach(lnet_handle_me_t meh, lnet_md_t umd,

	return 0;

 failed:
	lnet_md_free(md);

out_unlock:
	lnet_res_unlock(cpt);
out_free:
	lnet_md_free(md);
	return rc;
}
EXPORT_SYMBOL(LNetMDAttach);
@@ -370,24 +371,25 @@ LNetMDBind(lnet_md_t umd, lnet_unlink_t unlink, lnet_handle_md_t *handle)
		return -ENOMEM;

	rc = lnet_md_build(md, &umd, unlink);
	if (rc)
		goto out_free;

	cpt = lnet_res_lock_current();
	if (rc)
		goto failed;

	rc = lnet_md_link(md, umd.eq_handle, cpt);
	if (rc)
		goto failed;
		goto out_unlock;

	lnet_md2handle(handle, md);

	lnet_res_unlock(cpt);
	return 0;

 failed:
out_unlock:
	lnet_res_unlock(cpt);
out_free:
	lnet_md_free(md);

	lnet_res_unlock(cpt);
	return rc;
}
EXPORT_SYMBOL(LNetMDBind);