svn commit: r207211 - in user/kmacy/head_page_lock_2: bin/ln bin/sh
contrib/top lib/libc/gen lib/libc/sys lib/libkvm
share/man/man1 sys/amd64/amd64 sys/amd64/conf sys/geom/part
sys/i386/i386 sys/ne...
Kip Macy
kmacy at FreeBSD.org
Sun Apr 25 23:42:23 UTC 2010
Author: kmacy
Date: Sun Apr 25 23:42:23 2010
New Revision: 207211
URL: http://svn.freebsd.org/changeset/base/207211
Log:
IFC 207179:207210
Modified:
user/kmacy/head_page_lock_2/bin/ln/symlink.7
user/kmacy/head_page_lock_2/bin/sh/arith.y
user/kmacy/head_page_lock_2/bin/sh/arith_lex.l
user/kmacy/head_page_lock_2/bin/sh/expand.c
user/kmacy/head_page_lock_2/lib/libc/gen/sysctl.3
user/kmacy/head_page_lock_2/lib/libc/sys/unlink.2
user/kmacy/head_page_lock_2/lib/libkvm/kvm.3
user/kmacy/head_page_lock_2/share/man/man1/builtin.1
user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c
user/kmacy/head_page_lock_2/sys/amd64/conf/GENERIC
user/kmacy/head_page_lock_2/sys/geom/part/g_part.c
user/kmacy/head_page_lock_2/sys/i386/i386/pmap.c
user/kmacy/head_page_lock_2/sys/net/bpf.c
user/kmacy/head_page_lock_2/sys/net/bpfdesc.h
user/kmacy/head_page_lock_2/sys/net/rtsock.c
user/kmacy/head_page_lock_2/sys/netinet/sctp_indata.c
user/kmacy/head_page_lock_2/sys/netinet/sctp_output.c
user/kmacy/head_page_lock_2/usr.bin/alias/Makefile
Directory Properties:
user/kmacy/head_page_lock_2/ (props changed)
user/kmacy/head_page_lock_2/cddl/contrib/opensolaris/ (props changed)
user/kmacy/head_page_lock_2/contrib/bind9/ (props changed)
user/kmacy/head_page_lock_2/contrib/ee/ (props changed)
user/kmacy/head_page_lock_2/contrib/expat/ (props changed)
user/kmacy/head_page_lock_2/contrib/file/ (props changed)
user/kmacy/head_page_lock_2/contrib/gdb/ (props changed)
user/kmacy/head_page_lock_2/contrib/gdtoa/ (props changed)
user/kmacy/head_page_lock_2/contrib/gnu-sort/ (props changed)
user/kmacy/head_page_lock_2/contrib/groff/ (props changed)
user/kmacy/head_page_lock_2/contrib/less/ (props changed)
user/kmacy/head_page_lock_2/contrib/libpcap/ (props changed)
user/kmacy/head_page_lock_2/contrib/ncurses/ (props changed)
user/kmacy/head_page_lock_2/contrib/netcat/ (props changed)
user/kmacy/head_page_lock_2/contrib/ntp/ (props changed)
user/kmacy/head_page_lock_2/contrib/one-true-awk/ (props changed)
user/kmacy/head_page_lock_2/contrib/openbsm/ (props changed)
user/kmacy/head_page_lock_2/contrib/openpam/ (props changed)
user/kmacy/head_page_lock_2/contrib/pf/ (props changed)
user/kmacy/head_page_lock_2/contrib/sendmail/ (props changed)
user/kmacy/head_page_lock_2/contrib/tcpdump/ (props changed)
user/kmacy/head_page_lock_2/contrib/tcsh/ (props changed)
user/kmacy/head_page_lock_2/contrib/top/ (props changed)
user/kmacy/head_page_lock_2/contrib/top/install-sh (props changed)
user/kmacy/head_page_lock_2/contrib/tzcode/stdtime/ (props changed)
user/kmacy/head_page_lock_2/contrib/tzcode/zic/ (props changed)
user/kmacy/head_page_lock_2/contrib/tzdata/ (props changed)
user/kmacy/head_page_lock_2/contrib/wpa/ (props changed)
user/kmacy/head_page_lock_2/crypto/openssh/ (props changed)
user/kmacy/head_page_lock_2/crypto/openssl/ (props changed)
user/kmacy/head_page_lock_2/lib/libc/ (props changed)
user/kmacy/head_page_lock_2/lib/libc/stdtime/ (props changed)
user/kmacy/head_page_lock_2/lib/libutil/ (props changed)
user/kmacy/head_page_lock_2/lib/libz/ (props changed)
user/kmacy/head_page_lock_2/sbin/ (props changed)
user/kmacy/head_page_lock_2/sbin/ipfw/ (props changed)
user/kmacy/head_page_lock_2/share/zoneinfo/ (props changed)
user/kmacy/head_page_lock_2/sys/ (props changed)
user/kmacy/head_page_lock_2/sys/amd64/include/xen/ (props changed)
user/kmacy/head_page_lock_2/sys/cddl/contrib/opensolaris/ (props changed)
user/kmacy/head_page_lock_2/sys/contrib/dev/acpica/ (props changed)
user/kmacy/head_page_lock_2/sys/contrib/pf/ (props changed)
user/kmacy/head_page_lock_2/sys/contrib/x86emu/ (props changed)
user/kmacy/head_page_lock_2/sys/dev/xen/xenpci/ (props changed)
user/kmacy/head_page_lock_2/usr.bin/csup/ (props changed)
user/kmacy/head_page_lock_2/usr.bin/procstat/ (props changed)
user/kmacy/head_page_lock_2/usr.sbin/zic/ (props changed)
Modified: user/kmacy/head_page_lock_2/bin/ln/symlink.7
==============================================================================
--- user/kmacy/head_page_lock_2/bin/ln/symlink.7 Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/bin/ln/symlink.7 Sun Apr 25 23:42:23 2010 (r207211)
@@ -29,7 +29,7 @@
.\" @(#)symlink.7 8.3 (Berkeley) 3/31/94
.\" $FreeBSD$
.\"
-.Dd March 31, 1994
+.Dd April 25, 2010
.Dt SYMLINK 7
.Os
.Sh NAME
@@ -103,19 +103,23 @@ the system call
would return a file descriptor to the file
.Dq afile .
.Pp
-There are nine system calls that do not follow links, and which operate
+There are thirteen system calls that do not follow links, and which operate
on the symbolic link itself.
They are:
.Xr lchflags 2 ,
.Xr lchmod 2 ,
.Xr lchown 2 ,
+.Xr lpathconf 2 ,
.Xr lstat 2 ,
.Xr lutimes 2 ,
.Xr readlink 2 ,
+.Xr readlinkat 2 ,
.Xr rename 2 ,
+.Xr renameat 2 ,
.Xr rmdir 2 ,
+.Xr unlink 2 ,
and
-.Xr unlink 2 .
+.Xr unlinkat 2 .
Because
.Xr remove 3
is an alias for
@@ -123,9 +127,30 @@ is an alias for
it also does not follow symbolic links.
When
.Xr rmdir 2
+or
+.Xr unlinkat 2
+with the
+.Dv AT_REMOVEDIR
+flag
is applied to a symbolic link, it fails with the error
.Er ENOTDIR .
.Pp
+The
+.Xr linkat 2
+system call does not follow symbolic links
+unless given the
+.Dv AT_SYMLINK_FOLLOW
+flag.
+.Pp
+The following system calls follow symbolic links
+unless given the
+.Dv AT_SYMLINK_NOFOLLOW
+flag:
+.Xr fchmodat 2 ,
+.Xr fchownat 2
+and
+.Xr fstatat 2 .
+.Pp
The owner and group of an existing symbolic link can be changed by
means of the
.Xr lchown 2
@@ -138,8 +163,8 @@ an existing symbolic link can be changed
and
.Xr lutimes 2
system calls, respectively.
-Of these, only the flags are used by the system;
-the access permissions and ownership are ignored.
+Of these, only the flags and ownership are used by the system;
+the access permissions are ignored.
.Pp
The
.Bx 4.4
Modified: user/kmacy/head_page_lock_2/bin/sh/arith.y
==============================================================================
--- user/kmacy/head_page_lock_2/bin/sh/arith.y Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/bin/sh/arith.y Sun Apr 25 23:42:23 2010 (r207211)
@@ -287,7 +287,9 @@ arith_t
arith(const char *s)
{
arith_t result;
+ struct stackmark smark;
+ setstackmark(&smark);
arith_buf = arith_startbuf = s;
INTOFF;
@@ -295,6 +297,8 @@ arith(const char *s)
arith_lex_reset(); /* Reprime lex. */
INTON;
+ popstackmark(&smark);
+
return result;
}
Modified: user/kmacy/head_page_lock_2/bin/sh/arith_lex.l
==============================================================================
--- user/kmacy/head_page_lock_2/bin/sh/arith_lex.l Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/bin/sh/arith_lex.l Sun Apr 25 23:42:23 2010 (r207211)
@@ -51,13 +51,6 @@ __FBSDID("$FreeBSD$");
int yylex(void);
-struct varname
-{
- struct varname *next;
- char name[1];
-};
-static struct varname *varnames;
-
#undef YY_INPUT
#define YY_INPUT(buf,result,max) \
result = (*buf = *arith_buf++) ? 1 : YY_NULL;
@@ -87,14 +80,11 @@ static struct varname *varnames;
* If variable doesn't exist, we should initialize
* it to zero.
*/
- struct varname *temp;
+ char *temp;
if (lookupvar(yytext) == NULL)
setvarsafe(yytext, "0", 0);
- temp = ckmalloc(sizeof(struct varname) +
- strlen(yytext));
- temp->next = varnames;
- varnames = temp;
- yylval.s_value = strcpy(temp->name, yytext);
+ temp = stalloc(strlen(yytext) + 1);
+ yylval.s_value = strcpy(temp, yytext);
return ARITH_VAR;
}
@@ -140,15 +130,5 @@ static struct varname *varnames;
void
arith_lex_reset(void)
{
- struct varname *name, *next;
-
YY_NEW_FILE;
-
- name = varnames;
- while (name != NULL) {
- next = name->next;
- ckfree(name);
- name = next;
- }
- varnames = NULL;
}
Modified: user/kmacy/head_page_lock_2/bin/sh/expand.c
==============================================================================
--- user/kmacy/head_page_lock_2/bin/sh/expand.c Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/bin/sh/expand.c Sun Apr 25 23:42:23 2010 (r207211)
@@ -360,7 +360,7 @@ removerecordregions(int endoff)
void
expari(int flag)
{
- char *p, *start;
+ char *p, *q, *start;
arith_t result;
int begoff;
int quotes = flag & (EXP_FULL | EXP_CASE | EXP_REDIR);
@@ -398,7 +398,9 @@ expari(int flag)
removerecordregions(begoff);
if (quotes)
rmescapes(p+2);
+ q = grabstackstr(expdest);
result = arith(p+2);
+ ungrabstackstr(q, expdest);
fmtstr(p, DIGITS(result), ARITH_FORMAT_STR, result);
while (*p++)
;
Modified: user/kmacy/head_page_lock_2/lib/libc/gen/sysctl.3
==============================================================================
--- user/kmacy/head_page_lock_2/lib/libc/gen/sysctl.3 Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/lib/libc/gen/sysctl.3 Sun Apr 25 23:42:23 2010 (r207211)
@@ -28,7 +28,7 @@
.\" @(#)sysctl.3 8.4 (Berkeley) 5/9/95
.\" $FreeBSD$
.\"
-.Dd February 21, 2010
+.Dd April 25, 2010
.Dt SYSCTL 3
.Os
.Sh NAME
@@ -325,7 +325,7 @@ information.
.It "KERN_BOOTFILE string yes"
.It "KERN_BOOTTIME struct timeval no"
.It "KERN_CLOCKRATE struct clockinfo no"
-.It "KERN_FILE struct file no"
+.It "KERN_FILE struct xfile no"
.It "KERN_HOSTID integer yes"
.It "KERN_HOSTUUID string yes"
.It "KERN_HOSTNAME string yes"
@@ -342,14 +342,14 @@ information.
.It "KERN_OSREV integer no"
.It "KERN_OSTYPE string no"
.It "KERN_POSIX1 integer no"
-.It "KERN_PROC struct proc no"
+.It "KERN_PROC node not applicable"
.It "KERN_PROF node not applicable"
.It "KERN_QUANTUM integer yes"
.It "KERN_SAVED_IDS integer no"
.It "KERN_SECURELVL integer raise only"
.It "KERN_UPDATEINTERVAL integer no"
.It "KERN_VERSION string no"
-.It "KERN_VNODE struct vnode no"
+.It "KERN_VNODE struct xvnode no"
.El
.Bl -tag -width 6n
.It Li KERN_ARGMAX
@@ -370,10 +370,8 @@ This structure contains the clock, stati
frequencies, the number of micro-seconds per hz tick and the skew rate.
.It Li KERN_FILE
Return the entire file table.
-The returned data consists of a single
-.Va struct filehead
-followed by an array of
-.Va struct file ,
+The returned data consists of an array of
+.Va struct xfile ,
whose size depends on the current number of such objects in the system.
.It Li KERN_HOSTID
Get or set the host ID.
@@ -525,10 +523,8 @@ Note, the vnode table is not necessarily
the system.
The returned data consists of an array whose size depends on the
current number of such objects in the system.
-Each element of the array contains the kernel address of a vnode
-.Va struct vnode *
-followed by the vnode itself
-.Va struct vnode .
+Each element of the array consists of a
+.Va struct xvnode .
.El
.Ss CTL_NET
The string and integer information available for the CTL_NET level
@@ -854,6 +850,8 @@ An attempt is made to set a read-only va
A process without appropriate privilege attempts to set a value.
.El
.Sh SEE ALSO
+.Xr confstr 3 ,
+.Xr kvm 3 ,
.Xr sysconf 3 ,
.Xr sysctl 8
.Sh HISTORY
Modified: user/kmacy/head_page_lock_2/lib/libc/sys/unlink.2
==============================================================================
--- user/kmacy/head_page_lock_2/lib/libc/sys/unlink.2 Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/lib/libc/sys/unlink.2 Sun Apr 25 23:42:23 2010 (r207211)
@@ -28,7 +28,7 @@
.\" @(#)unlink.2 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
-.Dd April 10, 2008
+.Dd April 25, 2010
.Dt UNLINK 2
.Os
.Sh NAME
@@ -167,7 +167,7 @@ argument does not specify an absolute pa
argument is neither
.Dv AT_FDCWD
nor a valid file descriptor open for searching.
-.It Bq Er EEXIST
+.It Bq Er ENOTEMPTY
The
.Fa flag
parameter has the
Modified: user/kmacy/head_page_lock_2/lib/libkvm/kvm.3
==============================================================================
--- user/kmacy/head_page_lock_2/lib/libkvm/kvm.3 Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/lib/libkvm/kvm.3 Sun Apr 25 23:42:23 2010 (r207211)
@@ -32,7 +32,7 @@
.\" @(#)kvm.3 8.1 (Berkeley) 6/4/93
.\" $FreeBSD$
.\"
-.Dd January 29, 2004
+.Dd April 25, 2010
.Dt KVM 3
.Os
.Sh NAME
@@ -46,12 +46,15 @@ The
library provides a uniform interface for accessing kernel virtual memory
images, including live systems and crash dumps.
Access to live systems is via
+.Xr sysctl 3
+for some functions, and
.Xr mem 4
and
.Xr kmem 4
+for other functions,
while crash dumps can be examined via the core file generated by
.Xr savecore 8 .
-The interface behaves identically in both cases.
+The interface behaves similarly in both cases.
Memory can be read and written, kernel symbol addresses can be
looked up efficiently, and information about user processes can
be gathered.
@@ -112,5 +115,6 @@ given descriptor.
.Xr kvm_openfiles 3 ,
.Xr kvm_read 3 ,
.Xr kvm_write 3 ,
+.Xr sysctl 3 ,
.Xr kmem 4 ,
.Xr mem 4
Modified: user/kmacy/head_page_lock_2/share/man/man1/builtin.1
==============================================================================
--- user/kmacy/head_page_lock_2/share/man/man1/builtin.1 Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/share/man/man1/builtin.1 Sun Apr 25 23:42:23 2010 (r207211)
@@ -245,7 +245,7 @@ but are implemented as scripts using a b
.It Ic getopts Ta No** Ta \&No Ta Yes
.It Ic glob Ta \&No Ta Yes Ta \&No
.It Ic goto Ta \&No Ta Yes Ta \&No
-.It Ic hash Ta \&No Ta \&No Ta Yes
+.It Ic hash Ta No** Ta \&No Ta Yes
.It Ic hashstat Ta \&No Ta Yes Ta \&No
.It Ic history Ta \&No Ta Yes Ta \&No
.It Ic hup Ta \&No Ta Yes Ta \&No
@@ -290,8 +290,8 @@ but are implemented as scripts using a b
.It Ic times Ta \&No Ta \&No Ta Yes
.It Ic trap Ta \&No Ta \&No Ta Yes
.It Ic true Ta Yes Ta \&No Ta Yes
-.It Ic type Ta \&No Ta \&No Ta Yes
-.It Ic ulimit Ta \&No Ta \&No Ta Yes
+.It Ic type Ta No** Ta \&No Ta Yes
+.It Ic ulimit Ta No** Ta \&No Ta Yes
.It Ic umask Ta No** Ta Yes Ta Yes
.It Ic unalias Ta No** Ta Yes Ta Yes
.It Ic uncomplete Ta \&No Ta Yes Ta \&No
Modified: user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c
==============================================================================
--- user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/sys/amd64/amd64/pmap.c Sun Apr 25 23:42:23 2010 (r207211)
@@ -3035,7 +3035,6 @@ pmap_remove_all(vm_page_t m)
*
*/
pmap_unuse_pt(pmap, pv->pv_va, *pde, &free);
-
pmap_invalidate_page(pmap, pv->pv_va);
pmap_free_zero_pages(free);
TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
@@ -3179,22 +3178,17 @@ retry:
obits = pbits = *pte;
if ((pbits & PG_V) == 0)
continue;
- if ((pbits & PG_MANAGED) &&
- (pbits & (PG_M | PG_A))) {
- if (pa_tryrelock(pmap, pbits & PG_FRAME, &pa))
- goto restart;
- m = PHYS_TO_VM_PAGE(pbits & PG_FRAME);
- if (pbits & PG_A) {
- vm_page_flag_set(m, PG_REFERENCED);
- pbits &= ~PG_A;
- }
- if ((pbits & (PG_M | PG_RW)) == (PG_M | PG_RW))
+ if ((prot & VM_PROT_WRITE) == 0) {
+ if ((pbits & (PG_MANAGED | PG_M | PG_RW)) ==
+ (PG_MANAGED | PG_M | PG_RW)) {
+ m = PHYS_TO_VM_PAGE(pbits & PG_FRAME);
+ if (pa_tryrelock(pmap, pbits & PG_FRAME, &pa))
+ goto restart;
vm_page_dirty(m);
- }
-
- if ((prot & VM_PROT_WRITE) == 0)
+ }
pbits &= ~(PG_RW | PG_M);
+ }
if ((prot & VM_PROT_EXECUTE) == 0)
pbits |= pg_nx;
Modified: user/kmacy/head_page_lock_2/sys/amd64/conf/GENERIC
==============================================================================
--- user/kmacy/head_page_lock_2/sys/amd64/conf/GENERIC Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/sys/amd64/conf/GENERIC Sun Apr 25 23:42:23 2010 (r207211)
@@ -281,7 +281,7 @@ device firmware # firmware assist modul
device bpf # Berkeley packet filter
# USB support
-#options USB_DEBUG # enable debug msgs
+options USB_DEBUG # enable debug msgs
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device ehci # EHCI PCI->USB interface (USB 2.0)
Modified: user/kmacy/head_page_lock_2/sys/geom/part/g_part.c
==============================================================================
--- user/kmacy/head_page_lock_2/sys/geom/part/g_part.c Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/sys/geom/part/g_part.c Sun Apr 25 23:42:23 2010 (r207211)
@@ -1166,6 +1166,15 @@ g_part_ctl_undo(struct gctl_req *req, st
return (0);
}
table = gp->softc;
+
+ /*
+ * Synthesize a disk geometry. Some partitioning schemes
+ * depend on it and since some file systems need it even
+ * when the partitition scheme doesn't, we do it here in
+ * scheme-independent code.
+ */
+ pp = cp->provider;
+ g_part_geometry(table, cp, pp->mediasize / pp->sectorsize);
}
error = G_PART_READ(table, cp);
Modified: user/kmacy/head_page_lock_2/sys/i386/i386/pmap.c
==============================================================================
--- user/kmacy/head_page_lock_2/sys/i386/i386/pmap.c Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/sys/i386/i386/pmap.c Sun Apr 25 23:42:23 2010 (r207211)
@@ -2955,18 +2955,9 @@ retry:
if (oldpde & PG_MANAGED) {
eva = sva + NBPDR;
for (va = sva, m = PHYS_TO_VM_PAGE(oldpde & PG_PS_FRAME);
- va < eva; va += PAGE_SIZE, m++) {
- /*
- * In contrast to the analogous operation on a 4KB page
- * mapping, the mapping's PG_A flag is not cleared and
- * the page's PG_REFERENCED flag is not set. The
- * reason is that pmap_demote_pde() expects that a 2/4MB
- * page mapping with a stored page table page has PG_A
- * set.
- */
+ va < eva; va += PAGE_SIZE, m++)
if ((oldpde & (PG_M | PG_RW)) == (PG_M | PG_RW))
vm_page_dirty(m);
- }
}
if ((prot & VM_PROT_WRITE) == 0)
newpde &= ~(PG_RW | PG_M);
@@ -3074,22 +3065,15 @@ retry:
obits = pbits = *pte;
if ((pbits & PG_V) == 0)
continue;
- if (pbits & PG_MANAGED) {
- m = NULL;
- if (pbits & PG_A) {
+
+ if ((prot & VM_PROT_WRITE) == 0) {
+ if ((pbits & (PG_MANAGED | PG_M | PG_RW)) ==
+ (PG_MANAGED | PG_M | PG_RW)) {
m = PHYS_TO_VM_PAGE(pbits & PG_FRAME);
- vm_page_flag_set(m, PG_REFERENCED);
- pbits &= ~PG_A;
- }
- if ((pbits & (PG_M | PG_RW)) == (PG_M | PG_RW)) {
- if (m == NULL)
- m = PHYS_TO_VM_PAGE(pbits & PG_FRAME);
vm_page_dirty(m);
}
- }
-
- if ((prot & VM_PROT_WRITE) == 0)
pbits &= ~(PG_RW | PG_M);
+ }
#ifdef PAE
if ((prot & VM_PROT_EXECUTE) == 0)
pbits |= pg_nx;
Modified: user/kmacy/head_page_lock_2/sys/net/bpf.c
==============================================================================
--- user/kmacy/head_page_lock_2/sys/net/bpf.c Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/sys/net/bpf.c Sun Apr 25 23:42:23 2010 (r207211)
@@ -38,6 +38,7 @@
__FBSDID("$FreeBSD$");
#include "opt_bpf.h"
+#include "opt_compat.h"
#include "opt_netgraph.h"
#include <sys/types.h>
@@ -89,6 +90,43 @@ MALLOC_DEFINE(M_BPF, "BPF", "BPF data");
#define PRINET 26 /* interruptible */
+#ifdef COMPAT_FREEBSD32
+#include <sys/mount.h>
+#include <compat/freebsd32/freebsd32.h>
+#define BPF_ALIGNMENT32 sizeof(int32_t)
+#define BPF_WORDALIGN32(x) (((x)+(BPF_ALIGNMENT32-1))&~(BPF_ALIGNMENT32-1))
+
+/*
+ * 32-bit version of structure prepended to each packet. We use this header
+ * instead of the standard one for 32-bit streams. We mark the a stream as
+ * 32-bit the first time we see a 32-bit compat ioctl request.
+ */
+struct bpf_hdr32 {
+ struct timeval32 bh_tstamp; /* time stamp */
+ uint32_t bh_caplen; /* length of captured portion */
+ uint32_t bh_datalen; /* original length of packet */
+ uint16_t bh_hdrlen; /* length of bpf header (this struct
+ plus alignment padding) */
+};
+
+struct bpf_program32 {
+ u_int bf_len;
+ uint32_t bf_insns;
+};
+
+struct bpf_dltlist32 {
+ u_int bfl_len;
+ u_int bfl_list;
+};
+
+#define BIOCSETF32 _IOW('B', 103, struct bpf_program32)
+#define BIOCSRTIMEOUT32 _IOW('B',109, struct timeval32)
+#define BIOCGRTIMEOUT32 _IOR('B',110, struct timeval32)
+#define BIOCGDLTLIST32 _IOWR('B',121, struct bpf_dltlist32)
+#define BIOCSETWF32 _IOW('B',123, struct bpf_program32)
+#define BIOCSETFNR32 _IOW('B',130, struct bpf_program32)
+#endif
+
/*
* bpf_iflist is a list of BPF interface structures, each corresponding to a
* specific DLT. The same network interface might have several BPF interface
@@ -1005,8 +1043,14 @@ bpfioctl(struct cdev *dev, u_long cmd, c
case BIOCFLUSH:
case BIOCGDLT:
case BIOCGDLTLIST:
+#ifdef COMPAT_FREEBSD32
+ case BIOCGDLTLIST32:
+#endif
case BIOCGETIF:
case BIOCGRTIMEOUT:
+#ifdef COMPAT_FREEBSD32
+ case BIOCGRTIMEOUT32:
+#endif
case BIOCGSTATS:
case BIOCVERSION:
case BIOCGRSIG:
@@ -1015,6 +1059,9 @@ bpfioctl(struct cdev *dev, u_long cmd, c
case FIONREAD:
case BIOCLOCK:
case BIOCSRTIMEOUT:
+#ifdef COMPAT_FREEBSD32
+ case BIOCSRTIMEOUT32:
+#endif
case BIOCIMMEDIATE:
case TIOCGPGRP:
case BIOCROTZBUF:
@@ -1023,6 +1070,22 @@ bpfioctl(struct cdev *dev, u_long cmd, c
return (EPERM);
}
}
+#ifdef COMPAT_FREEBSD32
+ /*
+ * If we see a 32-bit compat ioctl, mark the stream as 32-bit so
+ * that it will get 32-bit packet headers.
+ */
+ switch (cmd) {
+ case BIOCSETF32:
+ case BIOCSETFNR32:
+ case BIOCSETWF32:
+ case BIOCGDLTLIST32:
+ case BIOCGRTIMEOUT32:
+ case BIOCSRTIMEOUT32:
+ d->bd_compat32 = 1;
+ }
+#endif
+
CURVNET_SET(TD_TO_VNET(td));
switch (cmd) {
@@ -1080,6 +1143,11 @@ bpfioctl(struct cdev *dev, u_long cmd, c
case BIOCSETF:
case BIOCSETFNR:
case BIOCSETWF:
+#ifdef COMPAT_FREEBSD32
+ case BIOCSETF32:
+ case BIOCSETFNR32:
+ case BIOCSETWF32:
+#endif
error = bpf_setf(d, (struct bpf_program *)addr, cmd);
break;
@@ -1123,6 +1191,26 @@ bpfioctl(struct cdev *dev, u_long cmd, c
/*
* Get a list of supported data link types.
*/
+#ifdef COMPAT_FREEBSD32
+ case BIOCGDLTLIST32:
+ {
+ struct bpf_dltlist32 *list32;
+ struct bpf_dltlist dltlist;
+
+ list32 = (struct bpf_dltlist32 *)addr;
+ dltlist.bfl_len = list32->bfl_len;
+ dltlist.bfl_list = PTRIN(list32->bfl_list);
+ if (d->bd_bif == NULL)
+ error = EINVAL;
+ else {
+ error = bpf_getdltlist(d, &dltlist);
+ if (error == 0)
+ list32->bfl_len = dltlist.bfl_len;
+ }
+ break;
+ }
+#endif
+
case BIOCGDLTLIST:
if (d->bd_bif == NULL)
error = EINVAL;
@@ -1166,8 +1254,23 @@ bpfioctl(struct cdev *dev, u_long cmd, c
* Set read timeout.
*/
case BIOCSRTIMEOUT:
+#ifdef COMPAT_FREEBSD32
+ case BIOCSRTIMEOUT32:
+#endif
{
struct timeval *tv = (struct timeval *)addr;
+#ifdef COMPAT_FREEBSD32
+ struct timeval32 *tv32;
+ struct timeval tv64;
+
+ if (cmd == BIOCSRTIMEOUT32) {
+ tv32 = (struct timeval32 *)addr;
+ tv = &tv64;
+ tv->tv_sec = tv32->tv_sec;
+ tv->tv_usec = tv32->tv_usec;
+ } else
+#endif
+ tv = (struct timeval *)addr;
/*
* Subtract 1 tick from tvtohz() since this isn't
@@ -1182,11 +1285,31 @@ bpfioctl(struct cdev *dev, u_long cmd, c
* Get read timeout.
*/
case BIOCGRTIMEOUT:
+#ifdef COMPAT_FREEBSD32
+ case BIOCGRTIMEOUT32:
+#endif
{
- struct timeval *tv = (struct timeval *)addr;
+ struct timeval *tv;
+#ifdef COMPAT_FREEBSD32
+ struct timeval32 *tv32;
+ struct timeval tv64;
+
+ if (cmd == BIOCGRTIMEOUT32)
+ tv = &tv64;
+ else
+#endif
+ tv = (struct timeval *)addr;
tv->tv_sec = d->bd_rtout / hz;
tv->tv_usec = (d->bd_rtout % hz) * tick;
+#ifdef COMPAT_FREEBSD32
+ if (cmd == BIOCGRTIMEOUT32) {
+ tv32 = (struct timeval32 *)addr;
+ tv32->tv_sec = tv->tv_sec;
+ tv32->tv_usec = tv->tv_usec;
+ }
+#endif
+
break;
}
@@ -1369,7 +1492,19 @@ bpf_setf(struct bpf_d *d, struct bpf_pro
#ifdef BPF_JITTER
bpf_jit_filter *ofunc;
#endif
-
+#ifdef COMPAT_FREEBSD32
+ struct bpf_program32 *fp32;
+ struct bpf_program fp_swab;
+
+ if (cmd == BIOCSETWF32 || cmd == BIOCSETF32 || cmd == BIOCSETFNR32) {
+ fp32 = (struct bpf_program32 *)fp;
+ fp_swab.bf_len = fp32->bf_len;
+ fp_swab.bf_insns = (struct bpf_insn *)(uintptr_t)fp32->bf_insns;
+ fp = &fp_swab;
+ if (cmd == BIOCSETWF32)
+ cmd = BIOCSETWF;
+ }
+#endif
if (cmd == BIOCSETWF) {
old = d->bd_wfilter;
wfilter = 1;
@@ -1771,6 +1906,9 @@ catchpacket(struct bpf_d *d, u_char *pkt
struct timeval *tv)
{
struct bpf_hdr hdr;
+#ifdef COMPAT_FREEBSD32
+ struct bpf_hdr32 hdr32;
+#endif
int totlen, curlen;
int hdrlen = d->bd_bif->bif_hdrlen;
int do_wakeup = 0;
@@ -1809,7 +1947,12 @@ catchpacket(struct bpf_d *d, u_char *pkt
* buffer is considered immutable by the buffer model, try to rotate
* the buffer and wakeup pending processes.
*/
- curlen = BPF_WORDALIGN(d->bd_slen);
+#ifdef COMPAT_FREEBSD32
+ if (d->bd_compat32)
+ curlen = BPF_WORDALIGN32(d->bd_slen);
+ else
+#endif
+ curlen = BPF_WORDALIGN(d->bd_slen);
if (curlen + totlen > d->bd_bufsize || !bpf_canwritebuf(d)) {
if (d->bd_fbuf == NULL) {
/*
@@ -1831,6 +1974,22 @@ catchpacket(struct bpf_d *d, u_char *pkt
* reader should be woken up.
*/
do_wakeup = 1;
+#ifdef COMPAT_FREEBSD32
+ /*
+ * If this is a 32-bit stream, then stick a 32-bit header at the
+ * front and copy the data into the buffer.
+ */
+ if (d->bd_compat32) {
+ bzero(&hdr32, sizeof(hdr32));
+ hdr32.bh_tstamp.tv_sec = tv->tv_sec;
+ hdr32.bh_tstamp.tv_usec = tv->tv_usec;
+ hdr32.bh_datalen = pktlen;
+ hdr32.bh_hdrlen = hdrlen;
+ hdr.bh_caplen = hdr32.bh_caplen = totlen - hdrlen;
+ bpf_append_bytes(d, d->bd_sbuf, curlen, &hdr32, sizeof(hdr32));
+ goto copy;
+ }
+#endif
/*
* Append the bpf header. Note we append the actual header size, but
@@ -1846,6 +2005,9 @@ catchpacket(struct bpf_d *d, u_char *pkt
/*
* Copy the packet data into the store buffer and update its length.
*/
+#ifdef COMPAT_FREEBSD32
+ copy:
+#endif
(*cpfn)(d, d->bd_sbuf, curlen + hdrlen, pkt, hdr.bh_caplen);
d->bd_slen = curlen + totlen;
Modified: user/kmacy/head_page_lock_2/sys/net/bpfdesc.h
==============================================================================
--- user/kmacy/head_page_lock_2/sys/net/bpfdesc.h Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/sys/net/bpfdesc.h Sun Apr 25 23:42:23 2010 (r207211)
@@ -97,6 +97,7 @@ struct bpf_d {
u_int64_t bd_wfcount; /* number of packets that matched write filter */
u_int64_t bd_wdcount; /* number of packets dropped during a write */
u_int64_t bd_zcopy; /* number of zero copy operations */
+ u_char bd_compat32; /* 32-bit stream on LP64 system */
};
/* Values for bd_state */
Modified: user/kmacy/head_page_lock_2/sys/net/rtsock.c
==============================================================================
--- user/kmacy/head_page_lock_2/sys/net/rtsock.c Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/sys/net/rtsock.c Sun Apr 25 23:42:23 2010 (r207211)
@@ -29,6 +29,7 @@
* @(#)rtsock.c 8.7 (Berkeley) 10/12/95
* $FreeBSD$
*/
+#include "opt_compat.h"
#include "opt_sctp.h"
#include "opt_mpath.h"
#include "opt_inet.h"
@@ -71,6 +72,49 @@ extern void sctp_addr_change(struct ifad
#endif /* SCTP */
#endif
+#ifdef COMPAT_FREEBSD32
+#include <sys/mount.h>
+#include <compat/freebsd32/freebsd32.h>
+
+struct if_data32 {
+ uint8_t ifi_type;
+ uint8_t ifi_physical;
+ uint8_t ifi_addrlen;
+ uint8_t ifi_hdrlen;
+ uint8_t ifi_link_state;
+ uint8_t ifi_spare_char1;
+ uint8_t ifi_spare_char2;
+ uint8_t ifi_datalen;
+ uint32_t ifi_mtu;
+ uint32_t ifi_metric;
+ uint32_t ifi_baudrate;
+ uint32_t ifi_ipackets;
+ uint32_t ifi_ierrors;
+ uint32_t ifi_opackets;
+ uint32_t ifi_oerrors;
+ uint32_t ifi_collisions;
+ uint32_t ifi_ibytes;
+ uint32_t ifi_obytes;
+ uint32_t ifi_imcasts;
+ uint32_t ifi_omcasts;
+ uint32_t ifi_iqdrops;
+ uint32_t ifi_noproto;
+ uint32_t ifi_hwassist;
+ int32_t ifi_epoch;
+ struct timeval32 ifi_lastchange;
+};
+
+struct if_msghdr32 {
+ uint16_t ifm_msglen;
+ uint8_t ifm_version;
+ uint8_t ifm_type;
+ int32_t ifm_addrs;
+ int32_t ifm_flags;
+ uint16_t ifm_index;
+ struct if_data32 ifm_data;
+};
+#endif
+
MALLOC_DEFINE(M_RTABLE, "routetbl", "routing tables");
/* NB: these are not modified */
@@ -1001,6 +1045,12 @@ again:
break;
case RTM_IFINFO:
+#ifdef COMPAT_FREEBSD32
+ if (w != NULL && w->w_req->flags & SCTL_MASK32) {
+ len = sizeof(struct if_msghdr32);
+ break;
+ }
+#endif
len = sizeof(struct if_msghdr);
break;
@@ -1367,6 +1417,38 @@ sysctl_dumpentry(struct radix_node *rn,
return (error);
}
+#ifdef COMPAT_FREEBSD32
+static void
+copy_ifdata32(struct if_data *src, struct if_data32 *dst)
+{
+
+ bzero(dst, sizeof(*dst));
+ CP(*src, *dst, ifi_type);
+ CP(*src, *dst, ifi_physical);
+ CP(*src, *dst, ifi_addrlen);
+ CP(*src, *dst, ifi_hdrlen);
+ CP(*src, *dst, ifi_link_state);
+ CP(*src, *dst, ifi_datalen);
+ CP(*src, *dst, ifi_mtu);
+ CP(*src, *dst, ifi_metric);
+ CP(*src, *dst, ifi_baudrate);
+ CP(*src, *dst, ifi_ipackets);
+ CP(*src, *dst, ifi_ierrors);
+ CP(*src, *dst, ifi_opackets);
+ CP(*src, *dst, ifi_oerrors);
+ CP(*src, *dst, ifi_collisions);
+ CP(*src, *dst, ifi_ibytes);
+ CP(*src, *dst, ifi_obytes);
+ CP(*src, *dst, ifi_imcasts);
+ CP(*src, *dst, ifi_omcasts);
+ CP(*src, *dst, ifi_iqdrops);
+ CP(*src, *dst, ifi_noproto);
+ CP(*src, *dst, ifi_hwassist);
+ CP(*src, *dst, ifi_epoch);
+ TV_CP(*src, *dst, ifi_lastchange);
+}
+#endif
+
static int
sysctl_iflist(int af, struct walkarg *w)
{
@@ -1387,12 +1469,30 @@ sysctl_iflist(int af, struct walkarg *w)
if (w->w_req && w->w_tmem) {
struct if_msghdr *ifm;
+#ifdef COMPAT_FREEBSD32
+ if (w->w_req->flags & SCTL_MASK32) {
+ struct if_msghdr32 *ifm32;
+
+ ifm32 = (struct if_msghdr32 *)w->w_tmem;
+ ifm32->ifm_index = ifp->if_index;
+ ifm32->ifm_flags = ifp->if_flags |
+ ifp->if_drv_flags;
+ copy_ifdata32(&ifp->if_data, &ifm32->ifm_data);
+ ifm32->ifm_addrs = info.rti_addrs;
+ error = SYSCTL_OUT(w->w_req, (caddr_t)ifm32,
+ len);
+ goto sysctl_out;
+ }
+#endif
ifm = (struct if_msghdr *)w->w_tmem;
ifm->ifm_index = ifp->if_index;
ifm->ifm_flags = ifp->if_flags | ifp->if_drv_flags;
ifm->ifm_data = ifp->if_data;
ifm->ifm_addrs = info.rti_addrs;
- error = SYSCTL_OUT(w->w_req,(caddr_t)ifm, len);
+ error = SYSCTL_OUT(w->w_req, (caddr_t)ifm, len);
+#ifdef COMPAT_FREEBSD32
+ sysctl_out:
+#endif
if (error)
goto done;
}
Modified: user/kmacy/head_page_lock_2/sys/netinet/sctp_indata.c
==============================================================================
--- user/kmacy/head_page_lock_2/sys/netinet/sctp_indata.c Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/sys/netinet/sctp_indata.c Sun Apr 25 23:42:23 2010 (r207211)
@@ -3514,25 +3514,6 @@ sctp_strike_gap_ack_chunks(struct sctp_t
if (tp1->sent == SCTP_DATAGRAM_RESEND) {
struct sctp_nets *alt;
- if ((stcb->asoc.peer_supports_prsctp) &&
- (PR_SCTP_RTX_ENABLED(tp1->flags))) {
- /*
- * Has it been retransmitted tv_sec times? -
- * we store the retran count there.
- */
- if (tp1->snd_count > tp1->rec.data.timetodrop.tv_sec) {
- /* Yes, so drop it */
- if (tp1->data != NULL) {
- (void)sctp_release_pr_sctp_chunk(stcb, tp1,
- (SCTP_RESPONSE_TO_USER_REQ | SCTP_NOTIFY_DATAGRAM_SENT),
- SCTP_SO_NOT_LOCKED);
- }
- /* Make sure to flag we had a FR */
- tp1->whoTo->net_ack++;
- tp1 = TAILQ_NEXT(tp1, sctp_next);
- continue;
- }
- }
/* fix counts and things */
if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_FLIGHT_LOGGING_ENABLE) {
sctp_misc_ints(SCTP_FLIGHT_LOG_DOWN_RSND,
@@ -3555,6 +3536,25 @@ sctp_strike_gap_ack_chunks(struct sctp_t
/* remove from the total flight */
sctp_total_flight_decrease(stcb, tp1);
+ if ((stcb->asoc.peer_supports_prsctp) &&
+ (PR_SCTP_RTX_ENABLED(tp1->flags))) {
+ /*
+ * Has it been retransmitted tv_sec times? -
+ * we store the retran count there.
+ */
+ if (tp1->snd_count > tp1->rec.data.timetodrop.tv_sec) {
+ /* Yes, so drop it */
+ if (tp1->data != NULL) {
+ (void)sctp_release_pr_sctp_chunk(stcb, tp1,
+ (SCTP_RESPONSE_TO_USER_REQ | SCTP_NOTIFY_DATAGRAM_SENT),
+ SCTP_SO_NOT_LOCKED);
+ }
+ /* Make sure to flag we had a FR */
+ tp1->whoTo->net_ack++;
+ tp1 = TAILQ_NEXT(tp1, sctp_next);
+ continue;
+ }
+ }
/* printf("OK, we are now ready to FR this guy\n"); */
if (SCTP_BASE_SYSCTL(sctp_logging_level) & SCTP_FR_LOGGING_ENABLE) {
sctp_log_fr(tp1->rec.data.TSN_seq, tp1->snd_count,
Modified: user/kmacy/head_page_lock_2/sys/netinet/sctp_output.c
==============================================================================
--- user/kmacy/head_page_lock_2/sys/netinet/sctp_output.c Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/sys/netinet/sctp_output.c Sun Apr 25 23:42:23 2010 (r207211)
@@ -8973,7 +8973,7 @@ sctp_chunk_retransmission(struct sctp_in
/* (void)SCTP_GETTIME_TIMEVAL(&chk->whoTo->last_sent_time); */
*cnt_out += 1;
chk->sent = SCTP_DATAGRAM_SENT;
- sctp_ucount_decr(asoc->sent_queue_retran_cnt);
+ /* sctp_ucount_decr(asoc->sent_queue_retran_cnt); */
if (fwd_tsn == 0) {
return (0);
} else {
Modified: user/kmacy/head_page_lock_2/usr.bin/alias/Makefile
==============================================================================
--- user/kmacy/head_page_lock_2/usr.bin/alias/Makefile Sun Apr 25 23:18:02 2010 (r207210)
+++ user/kmacy/head_page_lock_2/usr.bin/alias/Makefile Sun Apr 25 23:42:23 2010 (r207211)
@@ -10,8 +10,11 @@ LINKS= ${BINDIR}/alias ${BINDIR}/bg \
${BINDIR}/alias ${BINDIR}/fc \
${BINDIR}/alias ${BINDIR}/fg \
${BINDIR}/alias ${BINDIR}/getopts \
+ ${BINDIR}/alias ${BINDIR}/hash \
${BINDIR}/alias ${BINDIR}/jobs \
${BINDIR}/alias ${BINDIR}/read \
+ ${BINDIR}/alias ${BINDIR}/type \
+ ${BINDIR}/alias ${BINDIR}/ulimit \
${BINDIR}/alias ${BINDIR}/umask \
${BINDIR}/alias ${BINDIR}/unalias \
${BINDIR}/alias ${BINDIR}/wait
More information about the svn-src-user
mailing list