From owner-p4-projects@FreeBSD.ORG Thu Jul 20 18:05:26 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 29CB916A4EB; Thu, 20 Jul 2006 18:05:26 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id E18A416A4E9 for ; Thu, 20 Jul 2006 18:05:25 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8FCC743D5D for ; Thu, 20 Jul 2006 18:05:25 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.6/8.13.6) with ESMTP id k6KI5Phq033012 for ; Thu, 20 Jul 2006 18:05:25 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.6/8.13.4/Submit) id k6KI5PFA033008 for perforce@freebsd.org; Thu, 20 Jul 2006 18:05:25 GMT (envelope-from jhb@freebsd.org) Date: Thu, 20 Jul 2006 18:05:25 GMT Message-Id: <200607201805.k6KI5PFA033008@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Cc: Subject: PERFORCE change 102012 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 20 Jul 2006 18:05:26 -0000 http://perforce.freebsd.org/chv.cgi?CH=102012 Change 102012 by jhb@jhb_mutex on 2006/07/20 18:05:24 Avoid locking pain and suffering by copying the sockaddr_un found in svr4_find_socket() to a caller supplied sockaddr_un. Affected files ... .. //depot/projects/smpng/sys/compat/svr4/svr4_socket.c#14 edit .. //depot/projects/smpng/sys/compat/svr4/svr4_socket.h#8 edit .. //depot/projects/smpng/sys/compat/svr4/svr4_stream.c#36 edit .. //depot/projects/smpng/sys/notes#84 edit Differences ... ==== //depot/projects/smpng/sys/compat/svr4/svr4_socket.c#14 (text+ko) ==== @@ -80,12 +80,13 @@ static struct mtx svr4_head_lock; MTX_SYSINIT(svr4_head_lock, &svr4_head_lock, "svr4_head", MTX_DEF); -struct sockaddr_un * -svr4_find_socket(td, fp, dev, ino) +int +svr4_find_socket(td, fp, dev, ino, saun) struct thread *td; struct file *fp; dev_t dev; ino_t ino; + struct sockaddr_un *saun; { struct svr4_sockcache_entry *e; void *cookie = ((struct socket *)fp->f_data)->so_emuldata; @@ -100,13 +101,14 @@ #endif e->cookie = cookie; DPRINTF(("%s\n", e->sock.sun_path)); + *saun = e->sock; mtx_unlock(&svr4_head_lock); - return &e->sock; + return (0); } mtx_unlock(&svr4_head_lock); DPRINTF(("not found\n")); - return NULL; + return (ENOENT); } int ==== //depot/projects/smpng/sys/compat/svr4/svr4_socket.h#8 (text+ko) ==== @@ -48,9 +48,9 @@ u_char sin_zero[8]; }; -struct sockaddr_un *svr4_find_socket(struct thread *, struct file *, - dev_t, ino_t); -void svr4_delete_socket(struct proc *, struct file *); -int svr4_add_socket(struct thread *, const char *, struct stat *); +int svr4_find_socket(struct thread *, struct file *, dev_t, ino_t, + struct sockaddr_un *); +void svr4_delete_socket(struct proc *, struct file *); +int svr4_add_socket(struct thread *, const char *, struct stat *); #endif /* _SVR4_SOCKET_H_ */ ==== //depot/projects/smpng/sys/compat/svr4/svr4_stream.c#36 (text+ko) ==== @@ -1554,13 +1554,11 @@ /* Maybe we've been given a device/inode pair */ dev_t *dev = SVR4_ADDROF(&sc); ino_t *ino = (ino_t *) &dev[1]; - sa = (struct sockaddr *) - svr4_find_socket(td, fp, *dev, *ino); - if (sa == NULL) { - sa = (struct sockaddr *)&saun; + if (svr4_find_socket(td, fp, *dev, *ino, &saun) != 0) { /* I guess we have it by name */ netaddr_to_sockaddr_un(&saun, &sc); } + sa = (struct sockaddr *)&saun; sasize = sizeof(saun); } break; ==== //depot/projects/smpng/sys/notes#84 (text+ko) ==== @@ -89,7 +89,7 @@ should already have f_ops set correctly and if we can just allocate so_emuldata directly in streamsopen() - XXX: svr4_add_socket() can add duplicates? - - change svr4_find_socket() to copy the sockaddr out to a + + change svr4_find_socket() to copy the sockaddr out to a passed in sockaddr_un and return bool - svr4_sys_ioctl() - svr4_sys_getmsg()