[AF_UNIX]: scm: better initialization
Instead of doing a memset then initialization of the fields of the scm structure, just initialize all the members explicitly. Prevent reloading of current on x86 and x86-64 by storing the value in a local variable for subsequent dereferences. This is worth a ~7KB/s increase in af_unix bandwidth. Note that we avoid the issues surrounding potentially uninitialized members of the ucred structure by constructing a struct ucred instead of assigning the members individually, which forces the compiler to zero any padding. [ I modified the patch not to use the aggregate assignment since gcc-3.4.x and earlier cannot optimize that properly at all even though gcc-4.0.x and later can -DaveM ] Signed-off-by: Benjamin LaHaise <benjamin.c.lahaise@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e9df7d7f58
commit
1d541ddd74
|
@ -37,10 +37,12 @@ static __inline__ void scm_destroy(struct scm_cookie *scm)
|
|||
static __inline__ int scm_send(struct socket *sock, struct msghdr *msg,
|
||||
struct scm_cookie *scm)
|
||||
{
|
||||
memset(scm, 0, sizeof(*scm));
|
||||
scm->creds.uid = current->uid;
|
||||
scm->creds.gid = current->gid;
|
||||
scm->creds.pid = current->tgid;
|
||||
struct task_struct *p = current;
|
||||
scm->creds.uid = p->uid;
|
||||
scm->creds.gid = p->gid;
|
||||
scm->creds.pid = p->tgid;
|
||||
scm->fp = NULL;
|
||||
scm->seq = 0;
|
||||
if (msg->msg_controllen <= 0)
|
||||
return 0;
|
||||
return __scm_send(sock, msg, scm);
|
||||
|
|
Loading…
Reference in New Issue