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.

Signed-off-by: Benjamin LaHaise <[EMAIL PROTECTED]>
diff --git a/include/net/scm.h b/include/net/scm.h
index c3fa3d5..0d90fa2 100644
--- a/include/net/scm.h
+++ b/include/net/scm.h
@@ -37,10 +37,14 @@ static __inline__ void scm_destroy(struc
 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 = (struct ucred) {
+               .uid = p->uid,
+               .gid = p->gid,
+               .pid = p->tgid
+       };
+       scm->fp = NULL;
+       scm->seq = 0;
        if (msg->msg_controllen <= 0)
                return 0;
        return __scm_send(sock, msg, scm);
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to