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: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
This commit is contained in:
committed by
J. Bruce Fields
parent
92fd91b998
commit
b39b897c25
@@ -239,6 +239,30 @@ static void nsm_init_private(struct nsm_handle *nsm)
|
|||||||
*p = nsm_addr_in(nsm)->sin_addr.s_addr;
|
*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
|
* nsm_get_handle - Find or create a cached nsm_handle
|
||||||
* @sap: pointer to socket address of handle to find
|
* @sap: pointer to socket address of handle to find
|
||||||
@@ -295,19 +319,9 @@ retry:
|
|||||||
}
|
}
|
||||||
spin_unlock(&nsm_lock);
|
spin_unlock(&nsm_lock);
|
||||||
|
|
||||||
nsm = kzalloc(sizeof(*nsm) + hostname_len + 1, GFP_KERNEL);
|
nsm = nsm_create_handle(sap, salen, hostname, hostname_len);
|
||||||
if (nsm == NULL)
|
if (unlikely(nsm == NULL))
|
||||||
return 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;
|
goto retry;
|
||||||
|
|
||||||
found:
|
found:
|
||||||
|
Reference in New Issue
Block a user