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

Commit b39b897c authored by Chuck Lever's avatar Chuck Lever Committed by J. Bruce Fields
Browse files

NSM: Refactor nsm_handle creation into a helper function



Clean up.  Refactor the creation of nsm_handles into a helper.  Fields
are initialized in increasing address order to make efficient use of
CPU caches.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
parent 92fd91b9
Loading
Loading
Loading
Loading
+26 −12
Original line number Diff line number Diff line
@@ -239,6 +239,30 @@ static void nsm_init_private(struct nsm_handle *nsm)
	*p = nsm_addr_in(nsm)->sin_addr.s_addr;
}

static struct nsm_handle *nsm_create_handle(const struct sockaddr *sap,
					    const size_t salen,
					    const char *hostname,
					    const size_t hostname_len)
{
	struct nsm_handle *new;

	new = kzalloc(sizeof(*new) + hostname_len + 1, GFP_KERNEL);
	if (unlikely(new == NULL))
		return NULL;

	atomic_set(&new->sm_count, 1);
	new->sm_name = (char *)(new + 1);
	memcpy(nsm_addr(new), sap, salen);
	new->sm_addrlen = salen;
	nsm_init_private(new);
	nsm_display_address((const struct sockaddr *)&new->sm_addr,
				new->sm_addrbuf, sizeof(new->sm_addrbuf));
	memcpy(new->sm_name, hostname, hostname_len);
	new->sm_name[hostname_len] = '\0';

	return new;
}

/**
 * nsm_get_handle - Find or create a cached nsm_handle
 * @sap: pointer to socket address of handle to find
@@ -295,19 +319,9 @@ struct nsm_handle *nsm_get_handle(const struct sockaddr *sap,
	}
	spin_unlock(&nsm_lock);

	nsm = kzalloc(sizeof(*nsm) + hostname_len + 1, GFP_KERNEL);
	if (nsm == NULL)
	nsm = nsm_create_handle(sap, salen, hostname, hostname_len);
	if (unlikely(nsm == NULL))
		return NULL;

	memcpy(nsm_addr(nsm), sap, salen);
	nsm->sm_addrlen = salen;
	nsm->sm_name = (char *) (nsm + 1);
	memcpy(nsm->sm_name, hostname, hostname_len);
	nsm->sm_name[hostname_len] = '\0';
	nsm_init_private(nsm);
	nsm_display_address((struct sockaddr *)&nsm->sm_addr,
				nsm->sm_addrbuf, sizeof(nsm->sm_addrbuf));
	atomic_set(&nsm->sm_count, 1);
	goto retry;

found: