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

Commit 748285cc authored by David Teigland's avatar David Teigland
Browse files

dlm: use more NOFS allocation



Change some GFP_KERNEL allocations to use either GFP_NOFS or
ls_allocation (when available) which the fs sets to GFP_NOFS.
The point is to prevent allocations from going back into the
cluster fs in places where that might lead to deadlock.

Signed-off-by: default avatarDavid Teigland <teigland@redhat.com>
parent 391fbdc5
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -49,7 +49,8 @@ static struct dlm_direntry *get_free_de(struct dlm_ls *ls, int len)
	spin_unlock(&ls->ls_recover_list_lock);

	if (!found)
		de = kzalloc(sizeof(struct dlm_direntry) + len, GFP_KERNEL);
		de = kzalloc(sizeof(struct dlm_direntry) + len,
			     ls->ls_allocation);
	return de;
}

@@ -211,7 +212,7 @@ int dlm_recover_directory(struct dlm_ls *ls)

	dlm_dir_clear(ls);

	last_name = kmalloc(DLM_RESNAME_MAXLEN, GFP_KERNEL);
	last_name = kmalloc(DLM_RESNAME_MAXLEN, ls->ls_allocation);
	if (!last_name)
		goto out;

@@ -322,7 +323,7 @@ static int get_entry(struct dlm_ls *ls, int nodeid, char *name,
	if (namelen > DLM_RESNAME_MAXLEN)
		return -EINVAL;

	de = kzalloc(sizeof(struct dlm_direntry) + namelen, GFP_KERNEL);
	de = kzalloc(sizeof(struct dlm_direntry) + namelen, ls->ls_allocation);
	if (!de)
		return -ENOMEM;

+3 −3
Original line number Diff line number Diff line
@@ -500,7 +500,7 @@ static void process_sctp_notification(struct connection *con,
				return;
			}

			new_con = nodeid2con(nodeid, GFP_KERNEL);
			new_con = nodeid2con(nodeid, GFP_NOFS);
			if (!new_con)
				return;

@@ -736,7 +736,7 @@ static int tcp_accept_from_sock(struct connection *con)
	 *  the same time and the connections cross on the wire.
	 *  In this case we store the incoming one in "othercon"
	 */
	newcon = nodeid2con(nodeid, GFP_KERNEL);
	newcon = nodeid2con(nodeid, GFP_NOFS);
	if (!newcon) {
		result = -ENOMEM;
		goto accept_err;
@@ -746,7 +746,7 @@ static int tcp_accept_from_sock(struct connection *con)
		struct connection *othercon = newcon->othercon;

		if (!othercon) {
			othercon = kmem_cache_zalloc(con_cache, GFP_KERNEL);
			othercon = kmem_cache_zalloc(con_cache, GFP_NOFS);
			if (!othercon) {
				log_print("failed to allocate incoming socket");
				mutex_unlock(&newcon->sock_mutex);
+4 −4
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ static int dlm_add_member(struct dlm_ls *ls, int nodeid)
	struct dlm_member *memb;
	int w, error;

	memb = kzalloc(sizeof(struct dlm_member), GFP_KERNEL);
	memb = kzalloc(sizeof(struct dlm_member), ls->ls_allocation);
	if (!memb)
		return -ENOMEM;

@@ -143,7 +143,7 @@ static void make_member_array(struct dlm_ls *ls)

	ls->ls_total_weight = total;

	array = kmalloc(sizeof(int) * total, GFP_KERNEL);
	array = kmalloc(sizeof(int) * total, ls->ls_allocation);
	if (!array)
		return;

@@ -226,7 +226,7 @@ int dlm_recover_members(struct dlm_ls *ls, struct dlm_recover *rv, int *neg_out)
			continue;
		log_debug(ls, "new nodeid %d is a re-added member", rv->new[i]);

		memb = kzalloc(sizeof(struct dlm_member), GFP_KERNEL);
		memb = kzalloc(sizeof(struct dlm_member), ls->ls_allocation);
		if (!memb)
			return -ENOMEM;
		memb->nodeid = rv->new[i];
@@ -341,7 +341,7 @@ int dlm_ls_start(struct dlm_ls *ls)
	int *ids = NULL, *new = NULL;
	int error, ids_count = 0, new_count = 0;

	rv = kzalloc(sizeof(struct dlm_recover), GFP_KERNEL);
	rv = kzalloc(sizeof(struct dlm_recover), ls->ls_allocation);
	if (!rv)
		return -ENOMEM;

+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ void dlm_add_requestqueue(struct dlm_ls *ls, int nodeid, struct dlm_message *ms)
	struct rq_entry *e;
	int length = ms->m_header.h_length - sizeof(struct dlm_message);

	e = kmalloc(sizeof(struct rq_entry) + length, GFP_KERNEL);
	e = kmalloc(sizeof(struct rq_entry) + length, ls->ls_allocation);
	if (!e) {
		log_print("dlm_add_requestqueue: out of memory len %d", length);
		return;