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 --- |