Deleted Added
full compact
uipc_usrreq.c (232152) uipc_usrreq.c (232317)
1/*-
2 * Copyright (c) 1982, 1986, 1989, 1991, 1993
3 * The Regents of the University of California.
4 * Copyright (c) 2004-2009 Robert N. M. Watson
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 43 unchanged lines hidden (view full) ---

52 * TODO:
53 * RDM
54 * distinguish datagram size limits from flow control limits in SEQPACKET
55 * rethink name space problems
56 * need a proper out-of-band
57 */
58
59#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1982, 1986, 1989, 1991, 1993
3 * The Regents of the University of California.
4 * Copyright (c) 2004-2009 Robert N. M. Watson
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 43 unchanged lines hidden (view full) ---

52 * TODO:
53 * RDM
54 * distinguish datagram size limits from flow control limits in SEQPACKET
55 * rethink name space problems
56 * need a proper out-of-band
57 */
58
59#include <sys/cdefs.h>
60__FBSDID("$FreeBSD: head/sys/kern/uipc_usrreq.c 232152 2012-02-25 10:15:41Z trociny $");
60__FBSDID("$FreeBSD: head/sys/kern/uipc_usrreq.c 232317 2012-02-29 21:38:31Z trociny $");
61
62#include "opt_ddb.h"
63
64#include <sys/param.h>
65#include <sys/domain.h>
66#include <sys/fcntl.h>
67#include <sys/malloc.h> /* XXX must be before <sys/file.h> */
68#include <sys/eventhandler.h>

--- 468 unchanged lines hidden (view full) ---

537 goto error;
538 }
539 vp = nd.ni_vp;
540 ASSERT_VOP_ELOCKED(vp, "uipc_bind");
541 soun = (struct sockaddr_un *)sodupsockaddr(nam, M_WAITOK);
542
543 UNP_LINK_WLOCK();
544 UNP_PCB_LOCK(unp);
61
62#include "opt_ddb.h"
63
64#include <sys/param.h>
65#include <sys/domain.h>
66#include <sys/fcntl.h>
67#include <sys/malloc.h> /* XXX must be before <sys/file.h> */
68#include <sys/eventhandler.h>

--- 468 unchanged lines hidden (view full) ---

537 goto error;
538 }
539 vp = nd.ni_vp;
540 ASSERT_VOP_ELOCKED(vp, "uipc_bind");
541 soun = (struct sockaddr_un *)sodupsockaddr(nam, M_WAITOK);
542
543 UNP_LINK_WLOCK();
544 UNP_PCB_LOCK(unp);
545 vp->v_socket = unp->unp_socket;
545 VOP_UNP_BIND(vp, unp->unp_socket);
546 unp->unp_vnode = vp;
547 unp->unp_addr = soun;
548 unp->unp_flags &= ~UNP_BINDING;
549 UNP_PCB_UNLOCK(unp);
550 UNP_LINK_WUNLOCK();
551 VOP_UNLOCK(vp, 0);
552 vn_finished_write(mp);
553 VFS_UNLOCK_GIANT(vfslocked);

--- 79 unchanged lines hidden (view full) ---

633 unp->unp_gencnt = ++unp_gencnt;
634 --unp_count;
635 UNP_LIST_UNLOCK();
636
637 /*
638 * XXXRW: Should assert vp->v_socket == so.
639 */
640 if ((vp = unp->unp_vnode) != NULL) {
546 unp->unp_vnode = vp;
547 unp->unp_addr = soun;
548 unp->unp_flags &= ~UNP_BINDING;
549 UNP_PCB_UNLOCK(unp);
550 UNP_LINK_WUNLOCK();
551 VOP_UNLOCK(vp, 0);
552 vn_finished_write(mp);
553 VFS_UNLOCK_GIANT(vfslocked);

--- 79 unchanged lines hidden (view full) ---

633 unp->unp_gencnt = ++unp_gencnt;
634 --unp_count;
635 UNP_LIST_UNLOCK();
636
637 /*
638 * XXXRW: Should assert vp->v_socket == so.
639 */
640 if ((vp = unp->unp_vnode) != NULL) {
641 unp->unp_vnode->v_socket = NULL;
641 VOP_UNP_DETACH(vp);
642 unp->unp_vnode = NULL;
643 }
644 unp2 = unp->unp_conn;
645 if (unp2 != NULL) {
646 UNP_PCB_LOCK(unp2);
647 unp_disconnect(unp, unp2);
648 UNP_PCB_UNLOCK(unp2);
649 }

--- 653 unchanged lines hidden (view full) ---

1303 unp = sotounpcb(so);
1304 KASSERT(unp != NULL, ("unp_connect: unp == NULL"));
1305
1306 /*
1307 * Lock linkage lock for two reasons: make sure v_socket is stable,
1308 * and to protect simultaneous locking of multiple pcbs.
1309 */
1310 UNP_LINK_WLOCK();
642 unp->unp_vnode = NULL;
643 }
644 unp2 = unp->unp_conn;
645 if (unp2 != NULL) {
646 UNP_PCB_LOCK(unp2);
647 unp_disconnect(unp, unp2);
648 UNP_PCB_UNLOCK(unp2);
649 }

--- 653 unchanged lines hidden (view full) ---

1303 unp = sotounpcb(so);
1304 KASSERT(unp != NULL, ("unp_connect: unp == NULL"));
1305
1306 /*
1307 * Lock linkage lock for two reasons: make sure v_socket is stable,
1308 * and to protect simultaneous locking of multiple pcbs.
1309 */
1310 UNP_LINK_WLOCK();
1311 so2 = vp->v_socket;
1311 VOP_UNP_CONNECT(vp, &so2);
1312 if (so2 == NULL) {
1313 error = ECONNREFUSED;
1314 goto bad2;
1315 }
1316 if (so->so_type != so2->so_type) {
1317 error = EPROTOTYPE;
1318 goto bad2;
1319 }

--- 993 unchanged lines hidden (view full) ---

2313 int active;
2314
2315 ASSERT_VOP_ELOCKED(vp, "vfs_unp_reclaim");
2316 KASSERT(vp->v_type == VSOCK,
2317 ("vfs_unp_reclaim: vp->v_type != VSOCK"));
2318
2319 active = 0;
2320 UNP_LINK_WLOCK();
1312 if (so2 == NULL) {
1313 error = ECONNREFUSED;
1314 goto bad2;
1315 }
1316 if (so->so_type != so2->so_type) {
1317 error = EPROTOTYPE;
1318 goto bad2;
1319 }

--- 993 unchanged lines hidden (view full) ---

2313 int active;
2314
2315 ASSERT_VOP_ELOCKED(vp, "vfs_unp_reclaim");
2316 KASSERT(vp->v_type == VSOCK,
2317 ("vfs_unp_reclaim: vp->v_type != VSOCK"));
2318
2319 active = 0;
2320 UNP_LINK_WLOCK();
2321 so = vp->v_socket;
2321 VOP_UNP_CONNECT(vp, &so);
2322 if (so == NULL)
2323 goto done;
2324 unp = sotounpcb(so);
2325 if (unp == NULL)
2326 goto done;
2327 UNP_PCB_LOCK(unp);
2322 if (so == NULL)
2323 goto done;
2324 unp = sotounpcb(so);
2325 if (unp == NULL)
2326 goto done;
2327 UNP_PCB_LOCK(unp);
2328 if (unp->unp_vnode != NULL) {
2329 KASSERT(unp->unp_vnode == vp,
2330 ("vfs_unp_reclaim: vp != unp->unp_vnode"));
2331 vp->v_socket = NULL;
2328 if (unp->unp_vnode == vp) {
2329 VOP_UNP_DETACH(vp);
2332 unp->unp_vnode = NULL;
2333 active = 1;
2334 }
2335 UNP_PCB_UNLOCK(unp);
2336done:
2337 UNP_LINK_WUNLOCK();
2338 if (active)
2339 vunref(vp);

--- 117 unchanged lines hidden ---
2330 unp->unp_vnode = NULL;
2331 active = 1;
2332 }
2333 UNP_PCB_UNLOCK(unp);
2334done:
2335 UNP_LINK_WUNLOCK();
2336 if (active)
2337 vunref(vp);

--- 117 unchanged lines hidden ---