From owner-p4-projects@FreeBSD.ORG Sun May 25 21:12:09 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9E6211065672; Sun, 25 May 2008 21:12:09 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5F45B106566B for ; Sun, 25 May 2008 21:12:09 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 439CD8FC18 for ; Sun, 25 May 2008 21:12:09 +0000 (UTC) (envelope-from jb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m4PLC9tA048092 for ; Sun, 25 May 2008 21:12:09 GMT (envelope-from jb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m4PLC8PQ048088 for perforce@freebsd.org; Sun, 25 May 2008 21:12:08 GMT (envelope-from jb@freebsd.org) Date: Sun, 25 May 2008 21:12:08 GMT Message-Id: <200805252112.m4PLC8PQ048088@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jb@freebsd.org using -f From: John Birrell To: Perforce Change Reviews Cc: Subject: PERFORCE change 142275 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: Sun, 25 May 2008 21:12:10 -0000 http://perforce.freebsd.org/chv.cgi?CH=142275 Change 142275 by jb@freebsd3 on 2008/05/25 21:11:35 IF6 Affected files ... .. //depot/projects/dtrace6/src/etc/rc.d/dhclient#3 integrate .. //depot/projects/dtrace6/src/etc/rc.d/ntpd#2 integrate .. //depot/projects/dtrace6/src/etc/rc.subr#3 integrate .. //depot/projects/dtrace6/src/include/protocols/dumprestore.h#2 integrate .. //depot/projects/dtrace6/src/include/readpassphrase.h#2 integrate .. //depot/projects/dtrace6/src/lib/libc/gen/readdir.c#2 integrate .. //depot/projects/dtrace6/src/lib/libc/gen/telldir.c#2 integrate .. //depot/projects/dtrace6/src/lib/libc/gen/telldir.h#2 integrate .. //depot/projects/dtrace6/src/sbin/dhclient/bpf.c#2 integrate .. //depot/projects/dtrace6/src/sbin/dump/dump.h#2 integrate .. //depot/projects/dtrace6/src/sbin/dump/traverse.c#2 integrate .. //depot/projects/dtrace6/src/sbin/ipfw/ipfw.8#5 integrate .. //depot/projects/dtrace6/src/sbin/ipfw/ipfw2.c#5 integrate .. //depot/projects/dtrace6/src/sbin/restore/dirs.c#2 integrate .. //depot/projects/dtrace6/src/sbin/restore/extern.h#2 integrate .. //depot/projects/dtrace6/src/sbin/restore/restore.h#2 integrate .. //depot/projects/dtrace6/src/sbin/restore/tape.c#2 integrate .. //depot/projects/dtrace6/src/share/man/man4/termios.4#2 integrate .. //depot/projects/dtrace6/src/share/man/man5/fs.5#2 integrate .. //depot/projects/dtrace6/src/sys/cam/scsi/scsi_da.c#3 integrate .. //depot/projects/dtrace6/src/sys/compat/linux/linux_file.c#3 integrate .. //depot/projects/dtrace6/src/sys/dev/bge/if_bge.c#4 integrate .. //depot/projects/dtrace6/src/sys/dev/ciss/ciss.c#2 integrate .. //depot/projects/dtrace6/src/sys/dev/coretemp/coretemp.c#3 integrate .. //depot/projects/dtrace6/src/sys/dev/fdc/fdc.c#2 integrate .. //depot/projects/dtrace6/src/sys/dev/mpt/mpt_pci.c#2 integrate .. //depot/projects/dtrace6/src/sys/fs/devfs/devfs_rule.c#2 integrate .. //depot/projects/dtrace6/src/sys/geom/vinum/geom_vinum_share.c#2 integrate .. //depot/projects/dtrace6/src/sys/kern/kern_conf.c#3 integrate .. //depot/projects/dtrace6/src/sys/kern/kern_lockf.c#3 integrate .. //depot/projects/dtrace6/src/sys/kern/kern_switch.c#2 integrate .. //depot/projects/dtrace6/src/sys/kern/vfs_syscalls.c#2 integrate .. //depot/projects/dtrace6/src/sys/net/bpf.c#4 integrate .. //depot/projects/dtrace6/src/sys/net/ethernet.h#2 integrate .. //depot/projects/dtrace6/src/sys/netgraph/ng_base.c#7 integrate .. //depot/projects/dtrace6/src/sys/netinet/ip_dummynet.c#3 integrate .. //depot/projects/dtrace6/src/sys/netinet/ip_fw2.c#2 integrate .. //depot/projects/dtrace6/src/sys/sparc64/include/bus_common.h#2 integrate .. //depot/projects/dtrace6/src/sys/sparc64/include/iommuvar.h#2 integrate .. //depot/projects/dtrace6/src/sys/sparc64/pci/psycho.c#3 integrate .. //depot/projects/dtrace6/src/sys/sparc64/sbus/sbus.c#3 integrate .. //depot/projects/dtrace6/src/sys/sparc64/sparc64/counter.c#2 integrate .. //depot/projects/dtrace6/src/sys/sparc64/sparc64/iommu.c#2 integrate .. //depot/projects/dtrace6/src/sys/sys/extattr.h#2 integrate .. //depot/projects/dtrace6/src/sys/ufs/ffs/ffs_softdep.c#3 integrate .. //depot/projects/dtrace6/src/sys/ufs/ffs/ffs_vfsops.c#3 integrate .. //depot/projects/dtrace6/src/sys/ufs/ufs/extattr.h#2 integrate .. //depot/projects/dtrace6/src/sys/ufs/ufs/quota.h#3 integrate .. //depot/projects/dtrace6/src/sys/ufs/ufs/ufs_lookup.c#3 integrate .. //depot/projects/dtrace6/src/sys/ufs/ufs/ufs_quota.c#3 integrate .. //depot/projects/dtrace6/src/sys/ufs/ufs/ufs_vnops.c#4 integrate .. //depot/projects/dtrace6/src/sys/vm/vm_mmap.c#2 integrate .. //depot/projects/dtrace6/src/sys/vm/vm_pageout.c#2 integrate .. //depot/projects/dtrace6/src/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.1#3 integrate .. //depot/projects/dtrace6/src/usr.bin/bluetooth/rfcomm_sppd/rfcomm_sppd.c#3 integrate .. //depot/projects/dtrace6/src/usr.bin/fstat/fstat.c#2 integrate .. //depot/projects/dtrace6/src/usr.bin/getopt/README#2 delete .. //depot/projects/dtrace6/src/usr.bin/getopt/getopt.c#2 integrate .. //depot/projects/dtrace6/src/usr.bin/truss/Makefile#2 integrate .. //depot/projects/dtrace6/src/usr.bin/truss/amd64-fbsd32.c#1 branch .. //depot/projects/dtrace6/src/usr.bin/truss/amd64-linux32.c#1 branch .. //depot/projects/dtrace6/src/usr.bin/truss/amd64linux32.conf#1 branch .. //depot/projects/dtrace6/src/usr.bin/truss/extern.h#2 integrate .. //depot/projects/dtrace6/src/usr.bin/truss/fbsd32.conf#1 branch .. //depot/projects/dtrace6/src/usr.bin/truss/main.c#2 integrate .. //depot/projects/dtrace6/src/usr.bin/truss/setup.c#2 integrate .. //depot/projects/dtrace6/src/usr.sbin/moused/moused.8#2 integrate .. //depot/projects/dtrace6/src/usr.sbin/moused/moused.c#3 integrate .. //depot/projects/dtrace6/src/usr.sbin/sade/disks.c#2 integrate .. //depot/projects/dtrace6/src/usr.sbin/sade/label.c#2 integrate .. //depot/projects/dtrace6/src/usr.sbin/traceroute6/Makefile#2 integrate .. //depot/projects/dtrace6/src/usr.sbin/traceroute6/traceroute6.8#2 integrate .. //depot/projects/dtrace6/src/usr.sbin/traceroute6/traceroute6.c#2 integrate Differences ... ==== //depot/projects/dtrace6/src/etc/rc.d/dhclient#3 (text+ko) ==== @@ -1,6 +1,6 @@ #!/bin/sh # -# $FreeBSD: src/etc/rc.d/dhclient,v 1.20.2.6 2008/03/12 17:41:37 brooks Exp $ +# $FreeBSD: src/etc/rc.d/dhclient,v 1.20.2.7 2008/05/15 01:53:46 brooks Exp $ # # PROVIDE: dhclient @@ -26,6 +26,10 @@ if [ -n "$pids" ]; then exit 0 fi + elif [ -e /var/run/dhclient.pid ]; then + if [ -n "`pgrep -F /var/run/dhclient.pid`" ]; then + exit 0 + fi fi fi ==== //depot/projects/dtrace6/src/etc/rc.d/ntpd#2 (text+ko) ==== @@ -1,6 +1,6 @@ #!/bin/sh # -# $FreeBSD: src/etc/rc.d/ntpd,v 1.11.2.2 2006/06/06 11:17:08 flz Exp $ +# $FreeBSD: src/etc/rc.d/ntpd,v 1.11.2.3 2008/05/19 09:21:24 flz Exp $ # # PROVIDE: ntpd @@ -18,8 +18,6 @@ load_rc_config $name -required_files="${ntpd_config}" - ntpd_precmd() { rc_flags="-c ${ntpd_config} ${ntpd_flags}" ==== //depot/projects/dtrace6/src/etc/rc.subr#3 (text+ko) ==== @@ -1,5 +1,5 @@ # $NetBSD: rc.subr,v 1.67 2006/10/07 11:25:15 elad Exp $ -# $FreeBSD: src/etc/rc.subr,v 1.34.2.23 2007/10/25 14:04:18 mtm Exp $ +# $FreeBSD: src/etc/rc.subr,v 1.34.2.24 2008/05/12 07:28:03 mtm Exp $ # # Copyright (c) 1997-2004 The NetBSD Foundation, Inc. # All rights reserved. @@ -171,11 +171,15 @@ { local always - if [ -n "$1" ] && checkyesno $1; then + case $1 in + # "yes", "true", "on", or "1" + [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) always=true - else + ;; + *) always=false - fi + ;; + esac if [ "$autoboot" = yes -o "$always" = true ]; then echo "ERROR: ABORTING BOOT (sending SIGTERM to parent)!" kill -TERM ${RC_PID} ==== //depot/projects/dtrace6/src/include/protocols/dumprestore.h#2 (text+ko) ==== @@ -37,7 +37,7 @@ * * @(#)dumprestore.h 8.2 (Berkeley) 1/21/94 * - * $FreeBSD: src/include/protocols/dumprestore.h,v 1.10 2002/07/17 02:03:19 mckusick Exp $ + * $FreeBSD: src/include/protocols/dumprestore.h,v 1.10.14.1 2008/05/23 18:08:31 mckusick Exp $ */ #ifndef _PROTOCOLS_DUMPRESTORE_H_ @@ -97,7 +97,8 @@ int64_t c_birthtime; /* creation time, seconds */ int64_t c_atime; /* last access time, seconds */ int64_t c_mtime; /* last modified time, seconds */ - int32_t c_spare4[7]; /* old block pointers */ + int32_t c_extsize; /* external attribute size */ + int32_t c_spare4[6]; /* old block pointers */ u_int32_t c_file_flags; /* status flags (chflags) */ int32_t c_spare5[2]; /* old blocks, generation number */ u_int32_t c_uid; /* file owner */ ==== //depot/projects/dtrace6/src/include/readpassphrase.h#2 (text+ko) ==== @@ -1,5 +1,5 @@ /* $OpenBSD: /usr/local/www/cvsroot/OpenBSD/src/include/readpassphrase.h,v 1.2 2002/02/16 21:27:17 millert Exp $ */ -/* $FreeBSD: src/include/readpassphrase.h,v 1.2 2002/03/08 20:52:52 green Exp $ */ +/* $FreeBSD: src/include/readpassphrase.h,v 1.2.18.1 2008/05/16 01:22:20 scf Exp $ */ /* * Copyright (c) 2000 Todd C. Miller @@ -39,6 +39,12 @@ #define RPP_SEVENBIT 0x10 /* Strip the high bit from input. */ #include +#include + +#ifndef _SIZE_T_DECLARED +typedef __size_t size_t; +#define _SIZE_T_DECLARED +#endif __BEGIN_DECLS char * readpassphrase(const char *, char *, size_t, int); ==== //depot/projects/dtrace6/src/lib/libc/gen/readdir.c#2 (text+ko) ==== @@ -35,7 +35,7 @@ static char sccsid[] = "@(#)readdir.c 8.3 (Berkeley) 9/29/94"; #endif /* LIBC_SCCS and not lint */ #include -__FBSDID("$FreeBSD: src/lib/libc/gen/readdir.c,v 1.11 2002/02/26 21:39:32 alfred Exp $"); +__FBSDID("$FreeBSD: src/lib/libc/gen/readdir.c,v 1.11.14.1 2008/05/19 11:50:48 kib Exp $"); #include "namespace.h" #include @@ -51,8 +51,9 @@ * get next entry in a directory. */ struct dirent * -_readdir_unlocked(dirp) +_readdir_unlocked(dirp, skip) DIR *dirp; + int skip; { struct dirent *dp; @@ -75,7 +76,7 @@ dp->d_reclen > dirp->dd_len + 1 - dirp->dd_loc) return (NULL); dirp->dd_loc += dp->d_reclen; - if (dp->d_ino == 0) + if (dp->d_ino == 0 && skip) continue; if (dp->d_type == DT_WHT && (dirp->dd_flags & DTF_HIDEW)) continue; @@ -91,11 +92,11 @@ if (__isthreaded) { _pthread_mutex_lock((pthread_mutex_t *)&dirp->dd_lock); - dp = _readdir_unlocked(dirp); + dp = _readdir_unlocked(dirp, 1); _pthread_mutex_unlock((pthread_mutex_t *)&dirp->dd_lock); } else - dp = _readdir_unlocked(dirp); + dp = _readdir_unlocked(dirp, 1); return (dp); } @@ -112,11 +113,11 @@ errno = 0; if (__isthreaded) { _pthread_mutex_lock((pthread_mutex_t *)&dirp->dd_lock); - if ((dp = _readdir_unlocked(dirp)) != NULL) + if ((dp = _readdir_unlocked(dirp, 1)) != NULL) memcpy(entry, dp, _GENERIC_DIRSIZ(dp)); _pthread_mutex_unlock((pthread_mutex_t *)&dirp->dd_lock); } - else if ((dp = _readdir_unlocked(dirp)) != NULL) + else if ((dp = _readdir_unlocked(dirp, 1)) != NULL) memcpy(entry, dp, _GENERIC_DIRSIZ(dp)); if (errno != 0) { ==== //depot/projects/dtrace6/src/lib/libc/gen/telldir.c#2 (text+ko) ==== @@ -35,7 +35,7 @@ static char sccsid[] = "@(#)telldir.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ #include -__FBSDID("$FreeBSD: src/lib/libc/gen/telldir.c,v 1.8 2002/02/01 00:57:29 obrien Exp $"); +__FBSDID("$FreeBSD: src/lib/libc/gen/telldir.c,v 1.8.14.1 2008/05/19 11:50:48 kib Exp $"); #include "namespace.h" #include @@ -102,7 +102,7 @@ dirp->dd_seek = lp->loc_seek; dirp->dd_loc = 0; while (dirp->dd_loc < lp->loc_loc) { - dp = _readdir_unlocked(dirp); + dp = _readdir_unlocked(dirp, 0); if (dp == NULL) break; } ==== //depot/projects/dtrace6/src/lib/libc/gen/telldir.h#2 (text+ko) ==== @@ -29,7 +29,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/lib/libc/gen/telldir.h,v 1.2 2001/01/24 12:59:24 deischen Exp $ + * $FreeBSD: src/lib/libc/gen/telldir.h,v 1.2.14.1 2008/05/19 11:50:48 kib Exp $ */ #ifndef _TELLDIR_H_ @@ -59,7 +59,7 @@ long td_loccnt; /* index of entry for sequential readdir's */ }; -struct dirent *_readdir_unlocked(DIR *); +struct dirent *_readdir_unlocked(DIR *, int); void _reclaim_telldir(DIR *); void _seekdir(DIR *, long); ==== //depot/projects/dtrace6/src/sbin/dhclient/bpf.c#2 (text+ko) ==== @@ -41,7 +41,7 @@ */ #include -__FBSDID("$FreeBSD: src/sbin/dhclient/bpf.c,v 1.2.2.4 2006/09/29 03:07:41 brooks Exp $"); +__FBSDID("$FreeBSD: src/sbin/dhclient/bpf.c,v 1.2.2.5 2008/05/15 01:59:20 brooks Exp $"); #include "dhcpd.h" #include @@ -245,6 +245,21 @@ unsigned char buf[256]; struct iovec iov[2]; int result, bufp = 0; + int sock; + + if (to->sin_addr.s_addr != INADDR_BROADCAST) { + note("SENDING DIRECT"); + /* We know who the server is, send the packet via + normal socket interface */ + + if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) >= 0) { + result = sendto (sock, (char *)raw, len, 0, + (struct sockaddr *)to, sizeof *to); + close(sock); + if (result > 0) + return result; + } + } /* Assemble the headers... */ assemble_hw_header(interface, buf, &bufp, hto); ==== //depot/projects/dtrace6/src/sbin/dump/dump.h#2 (text+ko) ==== @@ -28,7 +28,7 @@ * * @(#)dump.h 8.2 (Berkeley) 4/28/95 * - * $FreeBSD: src/sbin/dump/dump.h,v 1.27 2004/12/02 13:56:53 maxim Exp $ + * $FreeBSD: src/sbin/dump/dump.h,v 1.27.2.1 2008/05/23 18:08:31 mckusick Exp $ */ /* @@ -105,8 +105,6 @@ int mapdirs(ino_t maxino, long *tapesize); /* file dumping routines */ -void ufs1_blksout(ufs1_daddr_t *blkp, int frags, ino_t ino); -void ufs2_blksout(ufs2_daddr_t *blkp, int frags, ino_t ino); void bread(ufs2_daddr_t blkno, char *buf, int size); ssize_t cread(int fd, void *buf, size_t nbytes, off_t offset); void dumpino(union dinode *dp, ino_t ino); ==== //depot/projects/dtrace6/src/sbin/dump/traverse.c#2 (text+ko) ==== @@ -32,7 +32,7 @@ static char sccsid[] = "@(#)traverse.c 8.7 (Berkeley) 6/15/95"; #endif static const char rcsid[] = - "$FreeBSD: src/sbin/dump/traverse.c,v 1.36.2.2 2007/04/12 07:53:13 thomas Exp $"; + "$FreeBSD: src/sbin/dump/traverse.c,v 1.36.2.3 2008/05/23 18:08:31 mckusick Exp $"; #endif /* not lint */ #include @@ -75,7 +75,13 @@ static int dirindir(ino_t ino, ufs2_daddr_t blkno, int level, long *size, long *tapesize, int nodump, ino_t maxino); -static void dmpindir(ino_t ino, ufs2_daddr_t blk, int level, off_t *size); +static void dmpindir(union dinode *dp, ino_t ino, ufs2_daddr_t blk, int level, + off_t *size); +static void ufs1_blksout(ufs1_daddr_t *blkp, int frags, ino_t ino); +static void ufs2_blksout(union dinode *dp, ufs2_daddr_t *blkp, int frags, + ino_t ino, int last); +static int appendextdata(union dinode *dp); +static void writeextdata(union dinode *dp, ino_t ino, int added); static int searchdir(ino_t ino, ufs2_daddr_t blkno, long size, long filesize, long *tapesize, int nodump, ino_t maxino); static long blockest(union dinode *dp); @@ -450,7 +456,7 @@ void dumpino(union dinode *dp, ino_t ino) { - int ind_level, cnt; + int ind_level, cnt, last, added; off_t size; char buf[TP_BSIZE]; @@ -470,6 +476,7 @@ if (sblock->fs_magic == FS_UFS1_MAGIC) { spcl.c_mode = dp->dp1.di_mode; spcl.c_size = dp->dp1.di_size; + spcl.c_extsize = 0; spcl.c_atime = _time32_to_time(dp->dp1.di_atime); spcl.c_atimensec = dp->dp1.di_atimensec; spcl.c_mtime = _time32_to_time(dp->dp1.di_mtime); @@ -483,6 +490,7 @@ } else { spcl.c_mode = dp->dp2.di_mode; spcl.c_size = dp->dp2.di_size; + spcl.c_extsize = dp->dp2.di_extsize; spcl.c_atime = _time64_to_time(dp->dp2.di_atime); spcl.c_atimensec = dp->dp2.di_atimensec; spcl.c_mtime = _time64_to_time(dp->dp2.di_mtime); @@ -512,6 +520,7 @@ DIP(dp, di_size) < sblock->fs_maxsymlinklen) { spcl.c_addr[0] = 1; spcl.c_count = 1; + added = appendextdata(dp); writeheader(ino); if (sblock->fs_magic == FS_UFS1_MAGIC) memmove(buf, (caddr_t)dp->dp1.di_db, @@ -521,6 +530,7 @@ (u_long)DIP(dp, di_size)); buf[DIP(dp, di_size)] = '\0'; writerec(buf, 0); + writeextdata(dp, ino, added); return; } /* FALLTHROUGH */ @@ -535,7 +545,9 @@ case S_IFSOCK: case S_IFCHR: case S_IFBLK: + added = appendextdata(dp); writeheader(ino); + writeextdata(dp, ino, added); return; default: @@ -543,18 +555,21 @@ DIP(dp, di_mode) & IFMT); return; } - if (DIP(dp, di_size) > NDADDR * sblock->fs_bsize) + if (DIP(dp, di_size) > NDADDR * sblock->fs_bsize) { cnt = NDADDR * sblock->fs_frag; - else + last = 0; + } else { cnt = howmany(DIP(dp, di_size), sblock->fs_fsize); + last = 1; + } if (sblock->fs_magic == FS_UFS1_MAGIC) ufs1_blksout(&dp->dp1.di_db[0], cnt, ino); else - ufs2_blksout(&dp->dp2.di_db[0], cnt, ino); + ufs2_blksout(dp, &dp->dp2.di_db[0], cnt, ino, last); if ((size = DIP(dp, di_size) - NDADDR * sblock->fs_bsize) <= 0) return; for (ind_level = 0; ind_level < NIADDR; ind_level++) { - dmpindir(ino, DIP(dp, di_ib[ind_level]), ind_level, &size); + dmpindir(dp, ino, DIP(dp, di_ib[ind_level]), ind_level, &size); if (size <= 0) return; } @@ -564,13 +579,14 @@ * Read indirect blocks, and pass the data blocks to be dumped. */ static void -dmpindir(ino_t ino, ufs2_daddr_t blk, int ind_level, off_t *size) +dmpindir(union dinode *dp, ino_t ino, ufs2_daddr_t blk, int ind_level, + off_t *size) { union { ufs1_daddr_t ufs1[MAXBSIZE / sizeof(ufs1_daddr_t)]; ufs2_daddr_t ufs2[MAXBSIZE / sizeof(ufs2_daddr_t)]; } idblk; - int i, cnt; + int i, cnt, last; if (blk != 0) bread(fsbtodb(sblock, blk), (char *)&idblk, @@ -578,23 +594,26 @@ else memset(&idblk, 0, sblock->fs_bsize); if (ind_level <= 0) { - if (*size < NINDIR(sblock) * sblock->fs_bsize) + if (*size > NINDIR(sblock) * sblock->fs_bsize) { + cnt = NINDIR(sblock) * sblock->fs_frag; + last = 0; + } else { cnt = howmany(*size, sblock->fs_fsize); - else - cnt = NINDIR(sblock) * sblock->fs_frag; + last = 1; + } *size -= NINDIR(sblock) * sblock->fs_bsize; if (sblock->fs_magic == FS_UFS1_MAGIC) ufs1_blksout(idblk.ufs1, cnt, ino); else - ufs2_blksout(idblk.ufs2, cnt, ino); + ufs2_blksout(dp, idblk.ufs2, cnt, ino, last); return; } ind_level--; for (i = 0; i < NINDIR(sblock); i++) { if (sblock->fs_magic == FS_UFS1_MAGIC) - dmpindir(ino, idblk.ufs1[i], ind_level, size); + dmpindir(dp, ino, idblk.ufs1[i], ind_level, size); else - dmpindir(ino, idblk.ufs2[i], ind_level, size); + dmpindir(dp, ino, idblk.ufs2[i], ind_level, size); if (*size <= 0) return; } @@ -603,7 +622,7 @@ /* * Collect up the data into tape record sized buffers and output them. */ -void +static void ufs1_blksout(ufs1_daddr_t *blkp, int frags, ino_t ino) { ufs1_daddr_t *bp; @@ -638,13 +657,25 @@ /* * Collect up the data into tape record sized buffers and output them. */ -void -ufs2_blksout(ufs2_daddr_t *blkp, int frags, ino_t ino) +static void +ufs2_blksout(union dinode *dp, ufs2_daddr_t *blkp, int frags, ino_t ino, + int last) { ufs2_daddr_t *bp; - int i, j, count, blks, tbperdb; + int i, j, count, resid, blks, tbperdb, added; + static int writingextdata = 0; + /* + * Calculate the number of TP_BSIZE blocks to be dumped. + * For filesystems with a fragment size bigger than TP_BSIZE, + * only part of the final fragment may need to be dumped. + */ blks = howmany(frags * sblock->fs_fsize, TP_BSIZE); + if (last) { + resid = howmany(fragoff(sblock, dp->dp2.di_size), TP_BSIZE); + if (resid > 0) + blks -= howmany(sblock->fs_fsize, TP_BSIZE) - resid; + } tbperdb = sblock->fs_bsize >> tp_bshift; for (i = 0; i < blks; i += TP_NINDIR) { if (i + TP_NINDIR > blks) @@ -657,6 +688,8 @@ else spcl.c_addr[j - i] = 0; spcl.c_count = count - i; + if (last && count == blks && !writingextdata) + added = appendextdata(dp); writeheader(ino); bp = &blkp[i / tbperdb]; for (j = i; j < count; j += tbperdb, bp++) @@ -667,7 +700,122 @@ dumpblock(*bp, (count - j) * TP_BSIZE); } spcl.c_type = TS_ADDR; + spcl.c_count = 0; + if (last && count == blks && !writingextdata) { + writingextdata = 1; + writeextdata(dp, ino, added); + writingextdata = 0; + } + } +} + +/* + * If there is room in the current block for the extended attributes + * as well as the file data, update the header to reflect the added + * attribute data at the end. Attributes are placed at the end so that + * old versions of restore will correctly restore the file and simply + * discard the extra data at the end that it does not understand. + * The attribute data is dumped following the file data by the + * writeextdata() function (below). + */ +static int +appendextdata(union dinode *dp) +{ + int i, blks, tbperdb; + + /* + * If no extended attributes, there is nothing to do. + */ + if (spcl.c_extsize == 0) + return (0); + /* + * If there is not enough room at the end of this block + * to add the extended attributes, then rather than putting + * part of them here, we simply push them entirely into a + * new block rather than putting some here and some later. + */ + if (spcl.c_extsize > NXADDR * sblock->fs_bsize) + blks = howmany(NXADDR * sblock->fs_bsize, TP_BSIZE); + else + blks = howmany(spcl.c_extsize, TP_BSIZE); + if (spcl.c_count + blks > TP_NINDIR) + return (0); + /* + * Update the block map in the header to indicate the added + * extended attribute. They will be appended after the file + * data by the writeextdata() routine. + */ + tbperdb = sblock->fs_bsize >> tp_bshift; + for (i = 0; i < blks; i++) + if (&dp->dp2.di_extb[i / tbperdb] != 0) + spcl.c_addr[spcl.c_count + i] = 1; + else + spcl.c_addr[spcl.c_count + i] = 0; + spcl.c_count += blks; + return (blks); +} + +/* + * Dump the extended attribute data. If there was room in the file + * header, then all we need to do is output the data blocks. If there + * was not room in the file header, then an additional TS_ADDR header + * is created to hold the attribute data. + */ +static void +writeextdata(union dinode *dp, ino_t ino, int added) +{ + int i, frags, blks, tbperdb, last; + ufs2_daddr_t *bp; + off_t size; + + /* + * If no extended attributes, there is nothing to do. + */ + if (spcl.c_extsize == 0) + return; + /* + * If there was no room in the file block for the attributes, + * dump them out in a new block, otherwise just dump the data. + */ + if (added == 0) { + if (spcl.c_extsize > NXADDR * sblock->fs_bsize) { + frags = NXADDR * sblock->fs_frag; + last = 0; + } else { + frags = howmany(spcl.c_extsize, sblock->fs_fsize); + last = 1; + } + ufs2_blksout(dp, &dp->dp2.di_extb[0], frags, ino, last); + } else { + if (spcl.c_extsize > NXADDR * sblock->fs_bsize) + blks = howmany(NXADDR * sblock->fs_bsize, TP_BSIZE); + else + blks = howmany(spcl.c_extsize, TP_BSIZE); + tbperdb = sblock->fs_bsize >> tp_bshift; + for (i = 0; i < blks; i += tbperdb) { + bp = &dp->dp2.di_extb[i / tbperdb]; + if (*bp != 0) { + if (i + tbperdb <= blks) + dumpblock(*bp, (int)sblock->fs_bsize); + else + dumpblock(*bp, (blks - i) * TP_BSIZE); + } + } + } + /* + * If an indirect block is added for extended attributes, then + * di_exti below should be changed to the structure element + * that references the extended attribute indirect block. This + * definition is here only to make it compile without complaint. + */ +#define di_exti di_spare[0] + /* + * If the extended attributes fall into an indirect block, + * dump it as well. + */ + if ((size = spcl.c_extsize - NXADDR * sblock->fs_bsize) > 0) + dmpindir(dp, ino, dp->dp2.di_exti, 0, &size); } /* ==== //depot/projects/dtrace6/src/sbin/ipfw/ipfw.8#5 (text+ko) ==== @@ -1,5 +1,5 @@ .\" -.\" $FreeBSD: src/sbin/ipfw/ipfw.8,v 1.175.2.15 2008/04/25 10:29:26 oleg Exp $ +.\" $FreeBSD: src/sbin/ipfw/ipfw.8,v 1.175.2.16 2008/05/20 11:32:03 dwmalone Exp $ .\" .Dd May 4, 2007 .Dt IPFW 8 @@ -1937,6 +1937,13 @@ Even worse effects can result if you get packets from an interface with a much larger MTU, e.g.\& the loopback interface with its 16KB packets. +The +.Xr sysctl 8 +variables +.Em net.inet.ip.dummynet.pipe_byte_limit +and +.Em net.inet.ip.dummynet.pipe_slot_limit +control the maximum lengths that can be specified. .Pp .It Cm red | gred Ar w_q Ns / Ns Ar min_th Ns / Ns Ar max_th Ns / Ns Ar max_p Make use of the RED (Random Early Detection) queue management algorithm. @@ -2092,6 +2099,13 @@ .It Em net.inet.ip.dummynet.red_max_pkt_size : No 1500 Parameters used in the computations of the drop probability for the RED algorithm. +.It Va net.inet.ip.dummynet.pipe_byte_limit : No 1048576 +.It Va net.inet.ip.dummynet.pipe_slot_limit : No 100 +The maximum queue size that can be specified in bytes or packets. +These limits prevent accidental exhaustion of resources such as mbufs. +If you raise these limits, +you should make sure the system is configured so that sufficient resources +are available. .It Em net.inet.ip.fw.autoinc_step : No 100 Delta between rule numbers when auto-generating them. The value must be in the range 1..1000. ==== //depot/projects/dtrace6/src/sbin/ipfw/ipfw2.c#5 (text+ko) ==== @@ -17,7 +17,7 @@ * * NEW command line interface for IP firewall facility * - * $FreeBSD: src/sbin/ipfw/ipfw2.c,v 1.76.2.22 2008/04/25 10:35:53 oleg Exp $ + * $FreeBSD: src/sbin/ipfw/ipfw2.c,v 1.76.2.23 2008/05/20 11:32:03 dwmalone Exp $ */ #include @@ -3485,11 +3485,25 @@ errx(EX_DATAERR, "weight must be <= 100"); } if (p.fs.flags_fs & DN_QSIZE_IS_BYTES) { - if (p.fs.qsize > 1024*1024) - errx(EX_DATAERR, "queue size must be < 1MB"); + size_t len; + long limit; + + len = sizeof(limit); + if (sysctlbyname("net.inet.ip.dummynet.pipe_byte_limit", + &limit, &len, NULL, 0) == -1) + limit = 1024*1024; + if (p.fs.qsize > limit) + errx(EX_DATAERR, "queue size must be < %ldB", limit); } else { - if (p.fs.qsize > 100) - errx(EX_DATAERR, "2 <= queue size <= 100"); + size_t len; + long limit; + + len = sizeof(limit); + if (sysctlbyname("net.inet.ip.dummynet.pipe_slot_limit", + &limit, &len, NULL, 0) == -1) + limit = 100; + if (p.fs.qsize > limit) + errx(EX_DATAERR, "2 <= queue size <= %ld", limit); } if (p.fs.flags_fs & DN_IS_RED) { size_t len; @@ -3507,7 +3521,6 @@ len = sizeof(int); if (sysctlbyname("net.inet.ip.dummynet.red_lookup_depth", &lookup_depth, &len, NULL, 0) == -1) - errx(1, "sysctlbyname(\"%s\")", "net.inet.ip.dummynet.red_lookup_depth"); if (lookup_depth == 0) ==== //depot/projects/dtrace6/src/sbin/restore/dirs.c#2 (text+ko) ==== @@ -37,7 +37,7 @@ static char sccsid[] = "@(#)dirs.c 8.7 (Berkeley) 5/1/95"; #endif static const char rcsid[] = - "$FreeBSD: src/sbin/restore/dirs.c,v 1.30 2005/04/03 16:35:58 imp Exp $"; + "$FreeBSD: src/sbin/restore/dirs.c,v 1.30.2.1 2008/05/23 18:08:31 mckusick Exp $"; #endif /* not lint */ #include @@ -85,6 +85,7 @@ uid_t uid; gid_t gid; int flags; + int extsize; }; /* @@ -114,6 +115,7 @@ static struct inotab *inotablookup(ino_t); static RST_DIR *opendirfile(const char *); static void putdir(char *, long); +static void putdirattrs(char *, long); static void putent(struct direct *); static void rst_seekdir(RST_DIR *, long, long); static long rst_telldir(RST_DIR *); @@ -184,7 +186,7 @@ return; } itp = allocinotab(&curfile, seekpt); - getfile(putdir, xtrnull); + getfile(putdir, putdirattrs, xtrnull); putent(&nulldir); flushent(); itp->t_size = seekpt - itp->t_seekpt; @@ -410,6 +412,17 @@ } /* + * Save extended attributes for a directory entry to a file. + */ +static void +putdirattrs(char *buf, long size) +{ + + if (mf != NULL) + (void) fwrite(buf, 1, size, mf); +} + +/* * Seek to an entry in a directory. * Only values returned by rst_telldir should be passed to rst_seekdir. * This routine handles many directories in a single file. @@ -543,8 +556,9 @@ FILE *mf; struct modeinfo node; struct entry *ep; - char *cp; + char *cp, *buf; const char *tmpdir; + int bufsize; vprintf(stdout, "Set directory mode, owner, and times.\n"); if ((tmpdir = getenv("TMPDIR")) == NULL || tmpdir[0] == '\0') @@ -564,10 +578,27 @@ return; } clearerr(mf); + bufsize = 0; for (;;) { (void) fread((char *)&node, 1, sizeof(struct modeinfo), mf); if (feof(mf)) break; + if (node.extsize > 0) { + if (bufsize < node.extsize) { + if (bufsize > 0) + free(buf); + if ((buf = malloc(node.extsize)) != 0) { + bufsize = node.extsize; + } else { + bufsize = 0; + } + } + if (bufsize >= node.extsize) { + (void) fread(buf, 1, node.extsize, mf); + } else { + (void) fseek(mf, node.extsize, SEEK_CUR); + } + } ep = lookupino(node.ino); if (command == 'i' || command == 'x') { if (ep == NULL) @@ -582,18 +613,28 @@ } if (ep == NULL) { panic("cannot find directory inode %d\n", node.ino); - } else { - cp = myname(ep); - if (!Nflag) { - (void) chown(cp, node.uid, node.gid); - (void) chmod(cp, node.mode); - utimes(cp, node.ctimep); - utimes(cp, node.mtimep); - (void) chflags(cp, node.flags); + continue; + } + cp = myname(ep); + if (!Nflag) { + if (node.extsize > 0) { + if (bufsize >= node.extsize) { + set_extattr_file(cp, buf, node.extsize); + } else { + fprintf(stderr, "Cannot restore %s%s\n", + "extended attributes for ", cp); + } } - ep->e_flags &= ~NEW; + (void) chown(cp, node.uid, node.gid); + (void) chmod(cp, node.mode); + utimes(cp, node.ctimep); + utimes(cp, node.mtimep); + (void) chflags(cp, node.flags); } + ep->e_flags &= ~NEW; } + if (bufsize > 0) + free(buf); if (ferror(mf)) panic("error setting directory modes\n"); (void) fclose(mf); @@ -668,7 +709,7 @@ itp = calloc(1, sizeof(struct inotab)); if (itp == NULL) - panic("no memory directory table\n"); + panic("no memory for directory table\n"); itp->t_next = inotab[INOHASH(ctxp->ino)]; inotab[INOHASH(ctxp->ino)] = itp; itp->t_ino = ctxp->ino; @@ -684,6 +725,7 @@ node.ctimep[0].tv_usec = ctxp->atime_nsec / 1000; node.ctimep[1].tv_sec = ctxp->birthtime_sec; node.ctimep[1].tv_usec = ctxp->birthtime_nsec / 1000; + node.extsize = ctxp->extsize; node.mode = ctxp->mode; node.flags = ctxp->file_flags; node.uid = ctxp->uid; ==== //depot/projects/dtrace6/src/sbin/restore/extern.h#2 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)extern.h 8.2 (Berkeley) 1/7/94 - * $FreeBSD: src/sbin/restore/extern.h,v 1.10 2004/05/24 16:24:26 stefanf Exp $ + * $FreeBSD: src/sbin/restore/extern.h,v 1.10.8.1 2008/05/23 18:08:31 mckusick Exp $ */ struct entry *addentry(char *, ino_t, int); @@ -54,7 +54,8 @@ void freename(char *); int genliteraldir(char *, ino_t); char *gentempname(struct entry *); -void getfile(void (*)(char *, long), void (*)(char *, long)); +void getfile(void (*)(char *, long), void (*)(char *, long), + void (*)(char *, long)); void getvol(long); void initsymtable(char *); int inodetype(ino_t); @@ -86,6 +87,7 @@ void rst_closedir(void *); void runcmdshell(void); char *savename(char *); +void set_extattr_file(char *, void *, int); void setdirmodes(int); void setinput(char *, int); void setup(void); ==== //depot/projects/dtrace6/src/sbin/restore/restore.h#2 (text+ko) ==== @@ -32,7 +32,7 @@ * SUCH DAMAGE. * * @(#)restore.h 8.3 (Berkeley) 9/13/94 - * $FreeBSD: src/sbin/restore/restore.h,v 1.10 2005/04/03 05:18:28 imp Exp $ + * $FreeBSD: src/sbin/restore/restore.h,v 1.10.2.1 2008/05/23 18:08:31 mckusick Exp $ */ /* @@ -114,6 +114,7 @@ int atime_nsec; /* access time nanoseconds */ int mtime_nsec; /* modified time nanoseconds */ int birthtime_nsec; /* creation time nanoseconds */ + int extsize; /* size of extended attribute data */ off_t size; /* size of file */ char *name; /* name of file */ } curfile; ==== //depot/projects/dtrace6/src/sbin/restore/tape.c#2 (text+ko) ==== @@ -39,14 +39,17 @@ #endif /* not lint */ #include -__FBSDID("$FreeBSD: src/sbin/restore/tape.c,v 1.44.2.1 2006/10/08 05:52:49 maxim Exp $"); +__FBSDID("$FreeBSD: src/sbin/restore/tape.c,v 1.44.2.2 2008/05/23 18:08:31 mckusick Exp $"); #include #include #include #include #include +#include +#include +#include #include #include @@ -92,10 +95,16 @@ #define FLUSHTAPEBUF() blkcnt = ntrec + 1 +char *namespace_names[] = EXTATTR_NAMESPACE_NAMES; + static void accthdr(struct s_spcl *); static int checksum(int *); static void findinode(struct s_spcl *); static void findtapeblksize(void); +static char *setupextattr(int); +static void xtrattr(char *, long); +static void set_extattr_link(char *, void *, int); >>> TRUNCATED FOR MAIL (1000 lines) <<<