diff options
author | melifaro <melifaro@FreeBSD.org> | 2012-04-22 16:13:23 +0000 |
---|---|---|
committer | melifaro <melifaro@FreeBSD.org> | 2012-04-22 16:13:23 +0000 |
commit | 30081abc9ab6f2dc7f346c691e76be4b1c5b9d73 (patch) | |
tree | c4d9d919a7cf66a6ab61bf3ef43663a50769e6ff | |
parent | b378da045b65724c107c298a068d631553a3beea (diff) | |
download | FreeBSD-src-30081abc9ab6f2dc7f346c691e76be4b1c5b9d73.zip FreeBSD-src-30081abc9ab6f2dc7f346c691e76be4b1c5b9d73.tar.gz |
Do not require radix write lock to be held while dumping route table
via sysctl(4) interface. This permits router not to stop forwarding
packets while route table is being written to user-supplied buffer.
Reported by: Pawel Tyll <ptyll@nitronet.pl>
Approved by: kib(mentor)
MFC after: 1 week
-rw-r--r-- | sys/net/rtsock.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index 43539ba..20f1de8 100644 --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -1884,10 +1884,10 @@ sysctl_rtsock(SYSCTL_HANDLER_ARGS) for (error = 0; error == 0 && i <= lim; i++) { rnh = rt_tables_get_rnh(req->td->td_proc->p_fibnum, i); if (rnh != NULL) { - RADIX_NODE_HEAD_LOCK(rnh); + RADIX_NODE_HEAD_RLOCK(rnh); error = rnh->rnh_walktree(rnh, sysctl_dumpentry, &w); - RADIX_NODE_HEAD_UNLOCK(rnh); + RADIX_NODE_HEAD_RUNLOCK(rnh); } else if (af != 0) error = EAFNOSUPPORT; } |